Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menghalang Pereka Qt daripada Menulis Ganti Kod Tersuai Semasa Pengubahsuaian UI?

Bagaimana untuk Menghalang Pereka Qt daripada Menulis Ganti Kod Tersuai Semasa Pengubahsuaian UI?

DDD
DDDasal
2024-12-25 16:13:10672semak imbas

How to Prevent Qt Designer from Overwriting Custom Code During UI Modifications?

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:

  • PyQtClass bergantung pada templat Qt Designer yang digunakan (cth., QMainWindow untuk templat MainWindow)
  • DesignClass ialah nama bagi kelas dalam fail reka bentuk (cth., Ui_MainWindow)

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn