我正在尝试使用PYQT创建一个gui,该gui显示一些图片和按钮。每次用户单击下一步时,我都希望出现新图片。但是,当我尝试执行此操作时,出现错误消息:
Attempting to set QLayout "" on Example "", which already has a layout
如何从QWidget删除布局?
这是我的代码:
#!/usr/bin/env.python
import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.pageNumber = 1
self.CTlist = ('ct.png', 'ct2.png', 'ct3.png')
self.initUI(self.pageNumber)
def initUI(self,page):
lbl1 = QtGui.QLabel(self)
button1 = QtGui.QRadioButton('Picture 1')
lbl2 = QtGui.QLabel(self)
button2 = QtGui.QRadioButton('Picture 2')
button3 = QtGui.QPushButton('Next')
button3.clicked.connect(self.next)
pixmap = QtGui.QPixmap(self.CTlist[page])
lbl1.setPixmap(pixmap)
lbl2.setPixmap(pixmap)
vbox1 = QtGui.QVBoxLayout()
vbox1.addWidget(lbl1)
vbox1.addWidget(button1)
vbox2 = QtGui.QVBoxLayout()
vbox2.addWidget(lbl2)
vbox2.addWidget(button2)
vbox3 = QtGui.QVBoxLayout()
vbox3.addWidget(button3)
hbox = QtGui.QHBoxLayout()
hbox.addLayout(vbox1)
hbox.addLayout(vbox2)
hbox.addLayout(vbox3)
self.setLayout(hbox)
self.move(300,200)
self.setWindowTitle('Choose which picture you like more')
self.show()
def next(self):
self.pageNumber += 1
self.initUI(self.pageNumber)
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__== '__main__':
main()
根据文档:
将此窗口小部件的布局管理器设置为布局。
如果此小部件上已经安装了布局管理器,则QWidget将不允许您安装另一个。必须先删除现有的布局管理器(由layout()返回),然后才能使用新布局调用setLayout()。
如果layout是另一个窗口小部件上的布局管理器,则setLayout()将使该布局父级化,并使其成为该窗口小部件的布局管理器。
因此,您只需将布局重新绑定到一个临时小部件(link):
def initUI(self,page):
if self.layout():
QtGui.QWidget().setLayout(self.layout())
lbl1 = QtGui.QLabel(self)
button1 = QtGui.QRadioButton('Picture 1')
lbl2 = QtGui.QLabel(self)
button2 = QtGui.QRadioButton('Picture 2')
button3 = QtGui.QPushButton('Next')
button3.clicked.connect(self.next)
pixmap = QtGui.QPixmap(self.CTlist[page])
lbl1.setPixmap(pixmap)
lbl2.setPixmap(pixmap)
vbox1 = QtGui.QVBoxLayout()
vbox1.addWidget(lbl1)
vbox1.addWidget(button1)
vbox2 = QtGui.QVBoxLayout()
vbox2.addWidget(lbl2)
vbox2.addWidget(button2)
vbox3 = QtGui.QVBoxLayout()
vbox3.addWidget(button3)
hbox = QtGui.QHBoxLayout()
hbox.addLayout(vbox1)
hbox.addLayout(vbox2)
hbox.addLayout(vbox3)
self.setLayout(hbox)
self.move(300,200)
self.setWindowTitle('Choose which picture you like more')
self.show()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句