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
Lepaskan: 2024-12-25 16:13:10
asal
704 orang telah melayarinya

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):
        [...]
Salin selepas log masuk

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)
Salin selepas log masuk

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)
Salin selepas log masuk

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()
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan