问题是由于QMainWindow
类已经有一个布局,其中放置了QStatusBar
,QMenubar
等。要定制它只需添加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)
啊哈!谢谢。这是它的工作。我如何让设计者添加'w = QtWidgets.QWidget(MainWindow)'部件?或者我将不得不每次都进去并添加它。 – crabcrabcam
他总是添加它,在我看来,很奇怪他没有这样做,当你设计它的时候,你还没有消除某些东西。 – eyllanesc
我将主布局设置为网格,然后放置在网格位置的水平布局中。这可能是QWidget类是一个布局(现在更改为垂直) – crabcrabcam