2024-05-03 08:31:29 发布
网友
我正在使用Qt Designer for design GUI在python中使用,在Qt Designer中设计所需的UI后,将其转换为python代码,然后更改生成的代码以在python代码中执行某些操作,但是如果我使用Qt Designer更改UI并再次将其转换为python代码,我将丢失以前对代码所做的更改
我怎样才能解决这个问题
我们可以在python中的多个文件上扩展一个类,以便在其他文件中编写代码吗
最简单的方法是在python代码中直接使用*.ui文件,不需要每次更改ui时都转换为*.py文件。 您可以在项目中使用此伪代码
# imports from PyQt5 import uic # load ui file baseUIClass, baseUIWidget = uic.loadUiType("MainGui.ui") # use loaded ui file in the logic class class Logic(baseUIWidget, baseUIClass): def __init__(self, parent=None): super(Logic, self).__init__(parent) self.setupUi(self) . . . . def main(): app = QtWidgets.QApplication(sys.argv) ui = Logic(None) ui.showMaximized() sys.exit(app.exec_())
为了避免出现这些问题,建议不要修改此文件,而是创建一个新文件,在其中实现一个使用该设计的类
例如,假设您在design.ui文件中使用了MainWindow模板,然后将其转换为Ui_Design.py类似以下结构:
design.ui
MainWindow
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
class Logic(QMainWindow, Ui_MainWindow): def __init__(self, *args, **kwargs): QMainWindow.__init__(self, *args, **kwargs) self.setupUi(self)
因此,即使修改设计并再次生成文件.py,也不必修改逻辑文件
要概括这一思想,我们必须有以下规则,但为此,逻辑类必须有以下结构:
class Logic(PyQtClass, DesignClass): def __init__(self, *args, **kwargs): PyQtClass.__init__(self, *args, **kwargs) self.setupUi(self)
Template PyQtClass ───────────────────────────────────────────── Main Window QMainWindow Widget QWidget Dialog with Buttons Bottom QDialog Dialog with Buttons Right QDialog Dialog with Without Buttons QDialog
此实现的优点是,您可以实现所有逻辑,因为它是一个小部件,例如,我们将实现解决方案closing pyqt messageBox with closeevent of the parent window:
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()
最简单的方法是在python代码中直接使用*.ui文件,不需要每次更改ui时都转换为*.py文件。 您可以在项目中使用此伪代码
为了避免出现这些问题,建议不要修改此文件,而是创建一个新文件,在其中实现一个使用该设计的类
例如,假设您在
design.ui
文件中使用了MainWindow
模板,然后将其转换为Ui_Design.py
类似以下结构:然后,我们将创建一个新文件,我们将调用
logic.py
,其中我们将创建一个处理逻辑并使用以前设计的文件:因此,即使修改设计并再次生成文件.py,也不必修改逻辑文件
要概括这一思想,我们必须有以下规则,但为此,逻辑类必须有以下结构:
此实现的优点是,您可以实现所有逻辑,因为它是一个小部件,例如,我们将实现解决方案closing pyqt messageBox with closeevent of the parent window:
相关问题 更多 >
编程相关推荐