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
Freigeben: 2024-12-25 16:13:10
Original
676 Leute haben es durchsucht

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):
        [...]
Nach dem Login kopieren

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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()
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage