Qt Designer-Override-Problem: Beibehaltung von Codeänderungen während UI-Änderungen
Beim Verwenden von Qt Designer zum Entwerfen einer GUI ist es gängige Praxis, Folgendes vorzunehmen Änderungen am generierten Code für bestimmte Funktionalitäten. Diese Änderungen können jedoch bei späteren UI-Änderungen verloren gehen.
Lösung:
Um dieses Problem zu vermeiden, wird empfohlen, das UI-Design vom benutzerdefinierten Code zu trennen. Dies kann erreicht werden, indem eine neue Klasse erstellt wird, die von der Qt Designer-Klasse erbt und die Logik enthält, die Sie beibehalten möchten.
Wenn das Qt Designer-Design beispielsweise den Namen Ui_Design.py trägt, kann die folgende Codestruktur verwendet werden verwendet werden:
# Ui_Design.py from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): [...] def retranslateUi(self, MainWindow): [...]
Erstellen Sie eine separate Datei, „logic.py“, um die benutzerdefinierte Logik zu implementieren und das Design als zu verwenden folgt:
# logic.py from PyQt5 import QtCore, QtGui, QtWidgets from Ui_Design import Ui_MainWindow class Logic(QMainWindow, Ui_MainWindow): def __init__(self, *args, **kwargs): QMainWindow.__init__(self, *args, **kwargs) self.setupUi(self)
Durch die Übernahme dieses Ansatzes bleibt der benutzerdefinierte Code inlogic.py intakt, auch wenn das UI-Design geändert und neu generiert wird.
Zusätzlicher Hinweis : Klassenstruktur für benutzerdefinierte Logik
Um dies effektiv umzusetzen, muss die benutzerdefinierte Logikklasse einem bestimmten folgen Struktur:
class Logic(PyQtClass, DesignClass): def __init__(self, *args, **kwargs): PyQtClass.__init__(self, *args, **kwargs) self.setupUi(self)
wobei:
Beispiel für die Beibehaltung von Code zum Schließen des Meldungsfelds:
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()
Diese Implementierung stellt sicher, dass Ihre benutzerdefinierte Logik, wie z. B. der closeEvent-Handler, erhalten bleibt bleibt von späteren UI-Änderungen mit Qt Designer unberührt.
Das obige ist der detaillierte Inhalt vonWie kann verhindert werden, dass Qt Designer benutzerdefinierten Code während UI-Änderungen überschreibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!