Apabila menggunakan Qt Designer untuk mencipta GUI untuk aplikasi Python, adalah mengecewakan untuk kehilangan perubahan kod tersuai pada UI berikutnya reka bentuk semula. Artikel ini meneroka penyelesaian kepada masalah ini dan memperkenalkan konsep pemisahan logik kepada fail Python yang berasingan.
Untuk mengelakkan kehilangan perubahan kod semasa mereka bentuk semula UI menggunakan Qt Designer, adalah disyorkan untuk buat fail kedua yang melaksanakan logik GUI, sambil mengekalkan kod yang dijana daripada Qt Designer berasingan.
Untuk contoh, jika templat MainWindow digunakan dalam "design.ui," tukarkannya kepada "Ui_Design.py" dan buat fail baharu "logic.py" untuk melaksanakan logik.
# Ui_Design.py (Generated from Qt Designer) from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): [...] def retranslateUi(self, MainWindow): [...] # 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)
Menggunakan pendekatan ini memastikan bahawa perubahan UI yang dibuat dalam Qt Designer tidak akan menimpa kod tersuai dalam "logic.py."
Untuk menyusun dan menyelenggara kod selanjutnya, anda boleh membahagikan kelas logik kepada berbilang fail, memastikan setiap fail memfokus pada aspek fungsi tertentu.
Untuk mencapai ini, kelas logik mesti ikut spesifik struktur:
class Logic(PyQtClass, DesignClass): def __init__(self, *args, **kwargs): PyQtClass.__init__(self, *args, **kwargs) self.setupUi(self)
Di mana:
Sebagai contoh melaksanakan logik dalam fail berasingan, pertimbangkan untuk mencipta pengendali peristiwa rapat yang memaparkan kotak mesej pengesahan sebelum menutup PyQt aplikasi.
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()
Dengan membahagikan kod kepada fail berasingan dan mengikut struktur kelas logik, anda boleh dengan mudah mengekalkan dan melanjutkan aplikasi Python berasaskan Qt anda sambil mengekalkan perubahan kod tersuai di tengah-tengah reka bentuk semula UI.
Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Kod Tersuai Apabila Merekabentuk Semula UI Pereka Qt dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!