Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich verhindern, dass benutzerdefinierter Code verloren geht, wenn ich Qt Designer-Benutzeroberflächen neu gestalte?

Wie kann ich verhindern, dass benutzerdefinierter Code verloren geht, wenn ich Qt Designer-Benutzeroberflächen neu gestalte?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-18 03:19:10789Durchsuche

How Can I Prevent Losing Custom Code When Redesigning Qt Designer UIs?

Auflösen verlorener Änderungen bei Neugestaltungen der Qt Designer-Benutzeroberfläche

Beim Verwenden von Qt Designer zum Entwerfen grafischer Benutzeroberflächen (GUIs) für Python kann es zu einem frustrierenden Problem kommen: Änderungen Änderungen am generierten Python-Code gehen verloren, wenn die Benutzeroberfläche neu gestaltet wird. Dies kann eine erhebliche Unannehmlichkeit darstellen, insbesondere wenn Sie erheblichen Aufwand in die Anpassung des Codes für bestimmte Funktionalitäten investiert haben.

Trennung von Design und Logik

Der Schlüssel zur Lösung dieses Problems liegt in der Trennung von UI-Design aus dem Code, der die Funktionalität der UI verwaltet. Anstatt den generierten Python-Code direkt zu ändern, erstellen Sie eine neue Klasse, die das Design verwendet, aber die Logik separat verarbeitet.

Beispielimplementierung

Betrachten Sie das folgende Beispiel mit der MainWindow-Vorlage von Qt Designer:

Ui_MainWindow.py

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        [...]

    def retranslateUi(self, MainWindow):
        [...]

logic.py

from Ui_MainWindow import Ui_MainWindow

class Logic(QMainWindow, Ui_MainWindow):
    def __init__(self, *args, **kwargs):
        QMainWindow.__init__(self, *args, **kwargs)
        self.setupUi(self)

Durch die Anwendung dieses Ansatzes können Sie kann Änderungen am Design in Qt Designer vornehmen, ohne den Code in Logic.py zu beeinflussen.

Design-Klasse Auswahl

Die Wahl der PyQtClass hängt von der gewählten Designvorlage ab:

Template PyQtClass
Main Window QMainWindow
Widget QWidget
Dialog with Buttons Bottom QDialog
Dialog with Buttons Right QDialog
Dialog with Without Buttons QDialog

Zusätzliche Funktionen

Diese Implementierung ermöglicht eine erweiterte Logikimplementierung innerhalb der Logikklasse, wie z Behandeln von Fensterschließereignissen. Hier ist ein Beispiel:

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 verhindern, dass benutzerdefinierter Code verloren geht, wenn ich Qt Designer-Benutzeroberflächen neu gestalte?. 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