我对此有点陌生,所以我基本上只是复制粘贴我所做的教程中的内容以使其工作。
我用QtDesigner制作了一个designer.ui文件,现在我把它导出到Python代码中。如果我使用 -x
命令然后运行设计 Python,它可以正常工作,但如果我将其导入另一个文件(以便我可以建立连接(,那么它都会压缩到 1 个位置,而不是坚持网格布局基础。
如果我启动我的 Main.py 文件(不是设计器代码(,那么我会收到错误QLayout: Attempting to add QLayout "" to MainWindow "MainWindow", which already has a layout
但我看不到我在 Main 代码中添加布局的位置......
我的代码是:https://gist.github.com/crabcrabcam/3a6a9e847791117616d18ada0895f868
感谢您的任何帮助:)如果你需要更多的东西,就问吧。
导致此问题是因为QMainWindow
类已经有一个布局,其中放置了QStatusBar
、QMenubar
等。要自定义它,只需添加带有setCentralWidget
的QWidget
。
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)