在pyqt中清除QWidget上的布局

机械师

我正在尝试使用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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Python

清除pyqt中布局中的所有小部件

来自分类Dev

在pyqt5中的QWidget上实现dragMoveEvent吗?

来自分类Dev

使用PyQt4的QWidget上的eventFilter

来自分类Dev

在Python中的布局(或QWidget)中嵌入QQuickWidget

来自分类Dev

如何使QWidget内容在PyQt中可滚动?

来自分类Dev

PyQt5 中的 QWebEngineView 和 QWidget

来自分类Dev

在QWidget上的QPixmap上绘制点(pyqt5)

来自分类Dev

清除 PyQt5 中的 QTableView

来自分类Dev

添加拉伸时,QWidget中的布局使背景变为白色

来自分类Python

PyQt5中多个QWidget的样式表?

来自分类Dev

更新:如何减少PyQt代码中的QWidget嵌套?

来自分类Dev

如何清除集合视图布局iOS上的内容

来自分类Dev

PYQT5中的布局大小

来自分类Python

在pyqt中更改嵌套布局的扩展空间

来自分类Dev

在PyQt中删除小部件和布局

来自分类Dev

PyQt打印QWidget

来自分类Dev

QLayout: 尝试将 QLayout "" 添加到 QWidget "",其中已经有 PyQt5 Python 布局

来自分类Dev

QWidget::setLayout: 试图在已经有布局的 ProgramWindow "" 上设置 QLayout ""

来自分类Dev

QWidget :: setLayout:尝试在已经有布局的MainWindow“”上设置QLayout“”

来自分类Dev

如何清除pyqt5中qtextbrowser的内容?

来自分类Dev

如何只清除pyqt5中的图?

来自分类Dev

QWidget的PyQt更改方向从右到左

来自分类Dev

如何清除画布中图像上的矩形

来自分类Dev

如何在QWidget中的matplot画布上跟踪鼠标?

来自分类Dev

在 PyQt5 的 QTableWidget 单元格中垂直居中 QWidget 中的 QLineEdit?

来自分类Dev

如何使用QThread在运行时将QWidget添加到布局中?

来自分类Dev

如何清除pyqt QTableWidget?

来自分类Dev

如何在PyQt5中设置布局的固定高度?

来自分类Dev

Pyqt 在不同的布局中添加相同的小部件对象

Related 相关文章

  1. 1

    清除pyqt中布局中的所有小部件

  2. 2

    在pyqt5中的QWidget上实现dragMoveEvent吗?

  3. 3

    使用PyQt4的QWidget上的eventFilter

  4. 4

    在Python中的布局(或QWidget)中嵌入QQuickWidget

  5. 5

    如何使QWidget内容在PyQt中可滚动?

  6. 6

    PyQt5 中的 QWebEngineView 和 QWidget

  7. 7

    在QWidget上的QPixmap上绘制点(pyqt5)

  8. 8

    清除 PyQt5 中的 QTableView

  9. 9

    添加拉伸时,QWidget中的布局使背景变为白色

  10. 10

    PyQt5中多个QWidget的样式表?

  11. 11

    更新:如何减少PyQt代码中的QWidget嵌套?

  12. 12

    如何清除集合视图布局iOS上的内容

  13. 13

    PYQT5中的布局大小

  14. 14

    在pyqt中更改嵌套布局的扩展空间

  15. 15

    在PyQt中删除小部件和布局

  16. 16

    PyQt打印QWidget

  17. 17

    QLayout: 尝试将 QLayout "" 添加到 QWidget "",其中已经有 PyQt5 Python 布局

  18. 18

    QWidget::setLayout: 试图在已经有布局的 ProgramWindow "" 上设置 QLayout ""

  19. 19

    QWidget :: setLayout:尝试在已经有布局的MainWindow“”上设置QLayout“”

  20. 20

    如何清除pyqt5中qtextbrowser的内容?

  21. 21

    如何只清除pyqt5中的图?

  22. 22

    QWidget的PyQt更改方向从右到左

  23. 23

    如何清除画布中图像上的矩形

  24. 24

    如何在QWidget中的matplot画布上跟踪鼠标?

  25. 25

    在 PyQt5 的 QTableWidget 单元格中垂直居中 QWidget 中的 QLineEdit?

  26. 26

    如何使用QThread在运行时将QWidget添加到布局中?

  27. 27

    如何清除pyqt QTableWidget?

  28. 28

    如何在PyQt5中设置布局的固定高度?

  29. 29

    Pyqt 在不同的布局中添加相同的小部件对象

热门标签

归档