Der Autor hat meine Anpassungen um ein paar Änderungen erweitert und in sein Repo eingepflegt. Der QtWaitingSpinenr ist jetzt auch 3.10 kompatibel 🤓
1b268980-92ca-42a4-89a0-a6e4b7ab9378-grafik.png
Jeder Python3 Einsteiger dürfte diese Meldung kennen. Auch in meinem Projekt nutze ich einige wenige Variablen an verschiedenen Stellen im Code. Das wirft dann in Pylint diese Fehlermeldung. Im verlinkten Beitrag findet man eine Erklärung warum das so ist.
global tells python to look for a variable with this name in the global namespace and include it in the local namespace. This means it must exist in the global namespace first.
import sys
from PyQt5.QtWidgets import QApplication, QWidget
m = None # variable must exist in global namespace first
def show():
global m # this creates a local m that is linked to the global m
m = QWidget()
m.setWindowTitle("Testing this app")
m.show()
MYAPP = QApplication(sys.argv)
show()
MYAPP.exec_()
Das Beispiel aus dem Beitrag, zeigt das man die Variable im globalen Raum vorher deklarieren muss. Das mache ich jetzt so
###############################################
## Set global variables to avoid this message
## Global variable 'widget' undefined at the module level
###############################################
widget = None
mount_path = None
restore_path = None
row = None
load_data = None
Es wird überall immer erwähnt, das man globale Variablen unbedingt vermeiden soll. Das soll kein guter Programmierstil sein!? Dann habe ich jetzt eine gute Liste, um welche Variablen ich mich kümmern muss und werde diesen Teil so umschreiben, das ich das vermeiden kann.
Ok, da ich gestern schon wieder gelesen habe, das globale Variablen unbedingt zu vermeiden sind, habe ich mich mal dran gesetzt und nochmal drüber nachgedacht. Ausgangslage
Die Einträge in der Backup List kann man per Mausklick auswählen und die Nummer des gewählten Eintrages brauch ich überall im Projekt.
Mein erster Ansatz war, das mit global row zu machen. Das funktioniert auch einwandfrei. Mein zweiter Ansatz war, den Eintrag in einer Datei settings zu speichern. Auch das funktionierte einwandfrei. Aber beim Nachdenken, fiel mir dann wieder ein, ich muss mehr mit Klassen machen
Und genau beim Schreiben dieser Klasse ist mir dann aufgefallen, das das überhaupt nicht nötig ist
Man kann sich doch die Zeile direkt holen.
row = self.listWidget.currentRow()
Die Zeile in allen Funktionen hinzugefügt und die globale Variable row war Geschichte. Jepp, man lernt Stück für Stück dazu...
Kein globalen Variablen mehr im Projekt
Das Widget ließ sich relativ einfach erledigen.
#----QPlainTextEdit ----#
layout = QVBoxLayout()
widget = QTextEdit()
widget.setReadOnly(True)
widget.setLayout(layout)
setCentralWidget(widget)
#----QPlainTextEdit ----#
layout = QVBoxLayout()
self.widget = QTextEdit()
self.widget.setReadOnly(True)
self.widget.setLayout(layout)
self.setCentralWidget(self.widget)
Aufruf dann nicht mehr mit
# UI
widget.setHtml("")
sondern mit
# UI
mainWin.widget.setHtml("")
Problem erledeigt und hoffentlich auch verstanden