Heim >Backend-Entwicklung >Python-Tutorial >Wie kann verhindert werden, dass Qt Designer benutzerdefinierten Code während UI-Änderungen überschreibt?

Wie kann verhindert werden, dass Qt Designer benutzerdefinierten Code während UI-Änderungen überschreibt?

DDD
DDDOriginal
2024-12-25 16:13:10676Durchsuche

How to Prevent Qt Designer from Overwriting Custom Code During UI Modifications?

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:

  • PyQtClass hängt von der verwendeten Qt Designer-Vorlage ab (z. B. QMainWindow für MainWindow-Vorlage)
  • DesignClass ist der Name der Klasse in der Designdatei (z. B. Ui_MainWindow)

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn