python - 清除pyqt中QWidget上的布局

标签 python layout pyqt

我正在尝试使用 PYQT 创建一个显示一些图片和按钮的 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()

最佳答案

这里的问题是,每次调用 next() 时,您都会重新初始化整个 UI,这每次都会创建一个新布局,并尝试使用 self 将其分配给您的小部件.setLayout(hbox)

您真正想做的只是更改标签内显示的像素图。如果您更改 initUI 函数以使标签成为 Example 类的成员,那么下一个函数可能如下所示

def next(self):
  self.pageNumber += 1
  pixmap = QtGui.QPixmap(self.CTlist[self.pageNumber])
  self.lbl1.setPixmap(pixmap)
  self.lbl2.setPixmap(pixmap)

关于python - 清除pyqt中QWidget上的布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24305614/

相关文章:

python - QGridLayout 不同的列宽

python - signal clicked 仅适用于静态方法

Python Pandas 和正则表达式使用字典替换 Dataframe 中的项目

python - 使用Python计算时差

python - 通过SSH的Pygame不注册按键(Raspberry Pi 3)

html - 布局问题( float /填充)

css 3 float 问题

html - 在 Firefox 中缩放会导致页面布局中断

Python/PYQT5-隐藏菜单时崩溃,如果从主窗口运行

python - 在 None 上拆分列表并记录索引