Nyo*_*yoa 2 python layout user-interface pyqt
我正在为 GUI 创建一个布局,该布局应该有一个用于主布局的 QVBoxLayout 和一个用于子布局的 QHBoxLayout,但由于某种原因,它给了我这个错误。
这是代码:
class Application(QtGui.QMainWindow):
err1 = QtCore.pyqtSignal(int)
reset = QtCore.pyqtSignal()
def __init__(self, parent=None):
super(Application, self).__init__()
self.setGeometry(300, 300, 600, 600)
self.setWindowTitle('IPv6 traffic generator')
PlotWidget(self)
self.createwidgets()
def createwidgets(self):
self.mainWidget = QtGui.QWidget(self)
self.setCentralWidget(self.mainWidget)
self.mainLayout = QtGui.QVBoxLayout(self.mainWidget)
self.hLayout = QtGui.QHBoxLayout(self.mainLayout)
---- creating widgets ----
self.hLayout.addWidget(self.label2)
self.hLayout.addWidget(self.menubutton1)
self.hLayout.addWidget(self.label3)
self.hLayout.addWidget(self.button2)
self.hLayout.addWidget(self.button3)
self.mainLayout.setLayout(self.hLayout)
self.mainLayout.show()
Run Code Online (Sandbox Code Playgroud)
你做错的是,你为 QHLayout 提供了另一个 Layout 对象,而它只接受 QWidget。
Traceback (most recent call last):
File "C:/stackoverflow/QtVlayout.py", line 37, in <module>
myapp = Application()
File "C:/stackoverflow/QtVlayout.py", line 14, in __init__
self.createwidgets()
File "C:/stackoverflow/QtVlayout.py", line 23, in createwidgets
self.hLayout = QtGui.QHBoxLayout(self.mainLayout)
TypeError: arguments did not match any overloaded call:
QHBoxLayout(): too many arguments
QHBoxLayout(QWidget): argument 1 has unexpected type 'QVBoxLayout'
Run Code Online (Sandbox Code Playgroud)
所以为了实现你想要做的事情:
self.mainLayout = QtGui.QVBoxLayout(self.mainWidget)
self.hLayout = QtGui.QHBoxLayout()
self.mainLayout.addLayout(self.hLayout)
Run Code Online (Sandbox Code Playgroud)
并删除
self.mainLayout.show()
Run Code Online (Sandbox Code Playgroud)
这应该可以解决问题。