2017-06-08 31 views
0

我有点新来这个,所以我基本上只是复制粘贴我从事的教程,使其工作的东西。设计粉碎到角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

问题是由于QMainWindow类已经有一个布局,其中放置了QStatusBarQMenubar等。要定制它只需添加QWidgetsetCentralWidget

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) 
+0

啊哈!谢谢。这是它的工作。我如何让设计者添加'w = QtWidgets.QWidget(MainWindow)'部件?或者我将不得不每次都进去并添加它。 – crabcrabcam

+0

他总是添加它,在我看来,很奇怪他没有这样做,当你设计它的时候,你还没有消除某些东西。 – eyllanesc

+0

我将主布局设置为网格,然后放置在网格位置的水平布局中。这可能是QWidget类是一个布局(现在更改为垂直) – crabcrabcam