重新设计用户界面后,QtDesigner更改将丢失

时间:2017-10-03 12:37:30

标签: python pyqt pyqt5 qt-designer

我使用QtDesinger设计GUI在python中使用,在QtDesigner中设计我想要的UI后,将其转换为python代码然后我改变生成的代码在我的python代码中做一些动作,但是如果我改变了使用QtDesigner的UI并再次将其转换为python代码,我丢失了以前对代码的更改。

我该如何解决这个问题?

我们可以在python中传播多个文件的类来在其他文件中编写代码吗?

2 个答案:

答案 0 :(得分:6)

为避免出现这些问题,建议不要修改此文件,而是创建一个新文件,我们实现一个使用该设计的类。

例如,假设您使用了design.ui文件中的Ui_Design.py模板,然后将其转换为from PyQt5 import QtCore, QtGui, QtWidgets 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)

因此,即使您修改设计并再次生成文件.py,您也不必修改逻辑文件。

为了概括这个想法,我们必须遵守以下规则,但为此,逻辑类必须具有以下结构:


   Template                      PyQtClass
 ─────────────────────────────────────────────
   Main Window                   QMainWindow
   Widget                        QWidget 
   Dialog with Buttons Bottom    QDialog
   Dialog with Buttons Right     QDialog
   Dialog with Without Buttons   QDialog
  • PyQtClass:此类取决于所选择的设计。
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()

  • DesignClass:设计中出现的类的名称。

此实现的优点是您可以实现所有逻辑,因为它是一个小部件,例如我们将实现解决方案closing pyqt messageBox with closeevent of the parent window

amqmdnet.dll

答案 1 :(得分:0)

最简单的方法是直接在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_())