设计破碎角落PyQT5

时间:2017-06-08 09:35:12

标签: python qt pyqt qt5 pyqt5

我对此有点新鲜,所以我基本上只是复制粘贴我已完成的教程中的内容以使其正常工作。

我已经使用QtDesigner创建了一个designer.ui文件,现在我已将其导出到Python代码中。如果我使用-x命令然后运行设计Python它工作正常,但如果我将它导入到另一个文件(所以我可以建立连接)然后它全部粉碎到1个地方而不是坚持网格布局基础。

如果我启动我的Main.py文件(不是设计师代码),那么我收到错误QLayout: Attempting to add QLayout "" to MainWindow "MainWindow", which already has a layout,但我不知道我在主代码中添加布局的位置......

我的代码是: https://gist.github.com/crabcrabcam/3a6a9e847791117616d18ada0895f868

感谢您的帮助:)如果您需要更多的东西,请询问。

1 个答案:

答案 0 :(得分:1)

问题的原因是QMainWindow类已经有了放置QStatusBarQMenubar等的布局。要自定义它,只需使用QWidget添加setCentralWidget

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        w = QtWidgets.QWidget(MainWindow)
        MainWindow.setCentralWidget(w)
        self.gridLayout = QtWidgets.QGridLayout(w)
        self.gridLayout.setObjectName("gridLayout")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.btnOpenFile = QtWidgets.QPushButton(MainWindow)
        self.btnOpenFile.setObjectName("btnOpenFile")
        self.horizontalLayout.addWidget(self.btnOpenFile)
        self.btnSaveFile = QtWidgets.QPushButton(MainWindow)
        self.btnSaveFile.setObjectName("btnSaveFile")
        self.horizontalLayout.addWidget(self.btnSaveFile)
        self.btnSendEmail = QtWidgets.QPushButton(MainWindow)
        self.btnSendEmail.setObjectName("btnSendEmail")
        self.horizontalLayout.addWidget(self.btnSendEmail)
        self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1)
        self.txtEditMain = QtWidgets.QPlainTextEdit(MainWindow)
        self.txtEditMain.setObjectName("txtEditMain")
        self.gridLayout.addWidget(self.txtEditMain, 1, 0, 1, 1)
        self.btnClear = QtWidgets.QPushButton(MainWindow)
        self.btnClear.setObjectName("btnClear")
        self.gridLayout.addWidget(self.btnClear, 2, 0, 1, 1)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

另一个观察,当你从类继承时,你必须调用该类的构造函数。在您的情况下,您继承自QMainWindow,那么您应该调用QMainWindow构造函数而不是QWidget

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent=parent)
        self.setupUi(self)