【问题标题】:pyqt. how to add and delete widgets?pyqt。如何添加和删除小部件?
【发布时间】:2015-07-13 15:21:47
【问题描述】:

我使用 python 2.7 + qt4.8

如何动态改变窗口中小部件的数量?我需要删除所有小部件并以正确的数量创建新的小部件。 testarovaniya 制作了一个简单的脚本:

import sys
from PyQt4 import QtCore, QtGui, uic

class MainForm(QtGui.QDialog):
    def __init__(self):
        super(MainForm, self).__init__()
        uic.loadUi("testQTwindow.ui", self)

        self.connect(self.addBtn, QtCore.SIGNAL("clicked()"), self.addBtnClick)
        self.connect(self.delBtn, QtCore.SIGNAL("clicked()"), self.delBtnClick)

    def addBtnClick(self):
        self.tempBtn = QtGui.QPushButton('button')
        self.gridLayout_2.addWidget(self.tempBtn)

    def delBtnClick(self):
        while True:
            item = self.gridLayout_2.takeAt(0)
            if not item:
                break
            self.gridLayout_2.removeWidget(item.widget())


app = QtGui.QApplication(sys.argv)
form = MainForm()
form.show()
sys.exit(app.exec_())

并加载此 UI:https://yadi.sk/d/jBOmSubYhqbjm

我有两个按钮。一种用于使用 gridLayout 向 QScrollArea 添加按钮。第二个是删除 QScrollArea 中的所有小部件。添加作品。我可以看到如何有新按钮。但是当您按下清洁按钮时不会消失,并且新的继续出现在旧的之上。旧的按钮也可以按下,这说明它们可以工作,而不仅仅是清理重绘窗口的鬼魂。

我尝试了repaint()update() 函数 - 但它没有效果......

这是一个简单的例子,但即使他不工作。而且我以后不需要添加按钮,以及带有一堆元素的整个块。

如何动态添加和删除小部件?

【问题讨论】:

    标签: python widget pyqt qscrollarea qgridlayout


    【解决方案1】:

    这部分循环应该够用了:

        while True:
            item = self.gridLayout_2.takeAt(0)
    

    我怀疑您正在尝试删除已删除的小部件,因此过早地结束了循环。可能在某处写了一条错误消息。

    【讨论】:

    • 没有错误信息。我正在输入循环中某个项目发生的情况 - 应该删除的小部件的确切位置。最后,您可以看到小部件已不复存在。 programa 说小部件没有。但他们在屏幕上有一个窗口并进行操作。但是如果请求是在程序中完成的 - 程序会说没有小部件。内部结构有些问题不符合显示
    猜你喜欢
    • 2012-01-28
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 2012-02-05
    相关资源
    最近更新 更多