QtDesigner-UI-Updates ohne Überschreiben von Änderungen
Wenn Sie auf das Problem gestoßen sind, dass in Qt Designer vorgenommene UI-Änderungen später nach der Codekonvertierung überschrieben werden Dieser Artikel bietet eine Lösung, um Ihre Änderungen beizubehalten.
Um dieses Problem zu beheben, vermeiden Sie es, den generierten Python-Code direkt zu ändern. Erstellen Sie stattdessen eine separate Klasse in einer neuen Datei, um die UI-Logik zu verarbeiten. Diese Klasse sollte von der von Qt Designer generierten Designklasse erben und deren Methoden implementieren.
Beispiel:
Betrachten Sie eine MainWindow-Vorlage mit einer entsprechenden design.ui-Datei. Konvertieren Sie es wie folgt in Ui_Design.py:
class Ui_MainWindow(object): def setupUi(self, MainWindow): [...] def retranslateUi(self, MainWindow): [...]
Erstellen Sie eine neue Datei „logic.py“:
class Logic(QMainWindow, Ui_MainWindow): def __init__(self, *args, **kwargs): QMainWindow.__init__(self, *args, **kwargs) self.setupUi(self)
Durch Befolgen dieser Regeln können Sie das Design ändern und seinen Code ohne neu generieren Auswirkungen auf Ihre Logikimplementierung. Stellen Sie sicher, dass Ihre Logikklasse der folgenden Struktur entspricht:
class Logic(PyQtClass, DesignClass): def __init__(self, *args, **kwargs): PyQtClass.__init__(self, *args, **kwargs) self.setupUi(self)
Wobei:
Zusätzliche Vorteile:
Mit dieser Implementierung können Sie Logik innerhalb eines bestimmten Widgets implementieren, z. B. das Schließen einer Pyqt-MessageBox mit dem closeEvent des übergeordneten Fensters:
class Logic(QMainWindow, Ui_MainWindow): def __init__(self, *args, **kwargs): QMainWindow.__init__(self, *args, **kwargs) self.setupUi(self) def closeEvent(self, event): answer = QtWidgets.QMessageBox.question( self, 'Are you sure you want to quit ?', 'Task is in progress !', QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No ) if answer == QtWidgets.QMessageBox.Yes: event.accept() else: event.ignore()
Das obige ist der detaillierte Inhalt vonWie kann ich meine Qt Designer-Benutzeroberfläche aktualisieren, ohne meine Codeänderungen zu verlieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!