首页 >后端开发 >Python教程 >如何防止Qt Designer在修改UI时覆盖自定义代码?

如何防止Qt Designer在修改UI时覆盖自定义代码?

DDD
DDD原创
2024-12-25 16:13:10707浏览

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

Qt Designer 覆盖问题:在 UI 更改期间保留代码修改

使用 Qt Designer 设计 GUI 时,通常的做法是对特定功能生成的代码进行更改。但是,这些修改可能会在后续 UI 更改时丢失。

解决方案:

为避免此问题,建议将 UI 设计与自定义代码分离。这可以通过创建一个继承自 Qt Designer 类并包含您想要保留的逻辑的新类来实现。

例如,如果 Qt Designer 设计名为 Ui_Design.py,则以下代码结构可以使用:

# Ui_Design.py
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        [...]

    def retranslateUi(self, MainWindow):
        [...]

创建一个单独的文件,logic.py,来实现自定义逻辑并将设计用作如下:

# 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)

采用这种方式,即使UI设计被修改并重新生成,logic.py中的自定义代码也将保持不变。

附加说明:自定义逻辑的类结构

为了有效地实现这一点,自定义逻辑类必须遵循特定的结构:

class Logic(PyQtClass, DesignClass):
    def __init__(self, *args, **kwargs):
        PyQtClass.__init__(self, *args, **kwargs)
        self.setupUi(self)

其中:

  • PyQtClass 取决于所使用的 Qt Designer 模板(例如,QMainWindow 表示 MainWindow 模板)
  • DesignClass 是设计文件中的类(例如, Ui_MainWindow)

保留关闭消息框代码的示例:

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()

此实现确保您的自定义逻辑(例如 closeEvent 处理程序)保留不受使用 Qt Designer 进行的后续 UI 更改的影响。

以上是如何防止Qt Designer在修改UI时覆盖自定义代码?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn