首页 >后端开发 >Python教程 >如何在不丢失代码更改的情况下更新 Qt Designer UI?

如何在不丢失代码更改的情况下更新 Qt Designer UI?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-18 06:15:09448浏览

How Can I Update My Qt Designer UI Without Losing My Code Changes?

QtDesigner UI 更新而不覆盖更改

如果您遇到在 Qt Designer 中进行的 UI 更改在代码转换后被覆盖的问题,本文提供了保留修改的解决方案。

要解决此问题,请避免修改生成的 Python 代码 直接地。相反,应在新文件中创建一个单独的类来处理 UI 逻辑。该类应继承自 Qt Designer 生成的设计类并实现其方法。

示例:

考虑具有相应 design.ui 文件的 MainWindow 模板。将其转换为 Ui_Design.py,如下所示:

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

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

创建一个新文件logic.py:

class Logic(QMainWindow, Ui_MainWindow):
    def __init__(self, *args, **kwargs):
        QMainWindow.__init__(self, *args, **kwargs)
        self.setupUi(self)

通过遵循这些规则,您可以修改设计并重新生成其代码,而无需影响你的逻辑实现。确保您的逻辑类遵循以下结构:

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

其中:

  • PyQtClass 取决于设计模板(例如 QMainWindow、QWidget) .
  • DesignClass 是您设计中的类的名称(例如, Ui_MainWindow)。

额外好处:

此实现允许您在指定的小部件中实现逻辑,例如使用父窗口的 closeEvent 关闭 pyqt messageBox:

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

以上是如何在不丢失代码更改的情况下更新 Qt Designer UI?的详细内容。更多信息请关注PHP中文网其他相关文章!

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