Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menghalang Pereka Qt daripada Menulis Ganti Kod Tersuai Semasa Pengubahsuaian UI?
Isu Penggantian Qt Designer: Memelihara Pengubahsuaian Kod Semasa Perubahan UI
Apabila menggunakan Qt Designer untuk mereka bentuk GUI, adalah amalan biasa untuk membuat perubahan kepada kod yang dijana untuk fungsi tertentu. Walau bagaimanapun, pengubahsuaian ini boleh hilang selepas perubahan UI berikutnya.
Penyelesaian:
Untuk mengelakkan isu ini, adalah disyorkan untuk memisahkan reka bentuk UI daripada kod tersuai. Ini boleh dicapai dengan mencipta kelas baharu yang mewarisi daripada kelas Qt Designer dan termasuk logik yang anda mahu simpan.
Sebagai contoh, jika reka bentuk Qt Designer dinamakan Ui_Design.py, struktur kod berikut boleh digunakan:
# Ui_Design.py from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): [...] def retranslateUi(self, MainWindow): [...]
Buat fail berasingan, logic.py, untuk melaksanakan logik tersuai dan gunakan reka bentuk sebagai berikut:
# 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)
Dengan menggunakan pendekatan ini, walaupun reka bentuk UI diubah suai dan dijana semula, kod tersuai dalam logic.py akan kekal utuh.
Nota Tambahan : Struktur Kelas untuk Logik Tersuai
Untuk melaksanakan ini dengan berkesan, kelas logik tersuai mesti mengikut struktur:
class Logic(PyQtClass, DesignClass): def __init__(self, *args, **kwargs): PyQtClass.__init__(self, *args, **kwargs) self.setupUi(self)
di mana:
Contoh Memelihara Kod untuk Menutup Kotak Mesej:
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()
Pelaksanaan ini memastikan logik tersuai anda, seperti pengendali closeEvent, kekal tidak terjejas oleh perubahan UI berikutnya yang dibuat dengan Qt Designer.
Atas ialah kandungan terperinci Bagaimana untuk Menghalang Pereka Qt daripada Menulis Ganti Kod Tersuai Semasa Pengubahsuaian UI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!