Apabila menggunakan Qt Designer untuk mereka bentuk antara muka pengguna grafik (GUI) untuk Python, ada kemungkinan untuk menghadapi isu yang mengecewakan: pengubahsuaian dibuat pada kod Python yang dijana hilang apabila UI direka bentuk semula. Ini boleh menjadi kesulitan yang ketara, terutamanya apabila anda telah melaburkan banyak usaha dalam menyesuaikan kod untuk fungsi tertentu.
Kunci untuk menyelesaikan masalah ini terletak pada memisahkan Reka bentuk UI daripada kod yang mengendalikan fungsi UI. Daripada mengubah suai terus kod Python yang dijana, buat kelas baharu yang menggunakan reka bentuk tetapi mengendalikan logik secara berasingan.
Pertimbangkan contoh berikut menggunakan templat MainWindow daripada Qt Pereka:
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)
Dengan menggunakan pendekatan ini, anda boleh membuat perubahan pada reka bentuk dalam Qt Designer tanpa menjejaskan kod dalam logic.py.
Pilihan PyQtClass bergantung pada templat reka bentuk yang dipilih:
Template | PyQtClass |
---|---|
Main Window | QMainWindow |
Widget | QWidget |
Dialog with Buttons Bottom | QDialog |
Dialog with Buttons Right | QDialog |
Dialog with Without Buttons | QDialog |
Pelaksanaan ini membenarkan pelaksanaan logik lanjutan dalam kelas logik, seperti mengendalikan peristiwa penutupan tetingkap. Berikut ialah contoh:
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()
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencegah Kehilangan Kod Tersuai Apabila Merekabentuk Semula UI Pereka Qt?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!