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)
其中:
保留关闭消息框代码的示例:
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中文网其他相关文章!