0

私は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

私は2つのボタンを持っています。gridLayout を使用して QScrollArea にボタンを追加するためのもの。2 つ目は、QScrollArea 内のすべてのウィジェットを削除します。追加作品。新しいボタンがあるのがわかります。しかし、クリーニングボタンを押しても消えず、古いものの上に新しいものが表示され続けます。古いボタンを押すこともできます。これは、ウィンドウを再描画するゴーストだけでなく、それらが機能することを示唆しています。

私は機能しようrepaint()としupdate()ますが、効果はありません...

これは簡単な例ですが、彼でさえ機能していません。そして、将来的にボタンを追加する必要はなく、ブロック全体にたくさんの要素を追加する必要はありません。

ウィジェットを動的に追加および削除する方法は?

4

1 に答える 1

1

ループのこの部分で十分です。

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

すでに削除したウィジェットを削除しようとしていると思われるため、ループが途中で終了します。どこかにエラーメッセージが書かれている可能性があります。

于 2015-07-14T14:28:05.443 に答える