使用 Qt Designer 为 Python 设计图形用户界面 (GUI) 时,可能会遇到一个令人沮丧的问题:修改当重新设计 UI 时,对生成的 Python 代码所做的修改将会丢失。这可能会带来很大的不便,尤其是当您投入大量精力来定制特定功能的代码时。
解决这个问题的关键在于将UI 设计来自处理 UI 功能的代码。不要直接修改生成的 Python 代码,而是创建一个使用设计但单独处理逻辑的新类。
请考虑使用 Qt 中的 MainWindow 模板的以下示例设计师:
Ui_MainWindow.py
from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): [...] def retranslateUi(self, MainWindow): [...]
logic.py
from Ui_MainWindow import Ui_MainWindow class Logic(QMainWindow, Ui_MainWindow): def __init__(self, *args, **kwargs): QMainWindow.__init__(self, *args, **kwargs) self.setupUi(self)
通过采用这种方法,您可以在 Qt Designer 中更改设计而不影响其中的代码logic.py.
PyQtClass的选择取决于所选的设计模板:
Template | PyQtClass |
---|---|
Main Window | QMainWindow |
Widget | QWidget |
Dialog with Buttons Bottom | QDialog |
Dialog with Buttons Right | QDialog |
Dialog with Without Buttons | QDialog |
此实现允许在逻辑类中实现高级逻辑,例如处理窗口关闭事件。这是一个示例:
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中文网其他相关文章!