5

最近Pythonの勉強を始めて、今はPyQt Librariesを使ってGUI付きのソフトウェアを作っています。

これが私の問題です:私はスクロールエリアを作成し、このスクロールエリアにQGridLayoutを含むウィジェットを配置しました。

    sa = QtGui.QScrollArea()
    sa_widget = QtGui.QWidget()
    self.sa_grid.setSizeConstraint(QtGui.QLayout.SetMinAndMaxSize)
    sa_widget.setLayout(self.sa_grid)
    sa.setWidgetResizable(True)
    sa.setWidget(sa_widget)

次に、10 個の QLabel を追加します (これはもちろん単なる例です。この例では、垂直レイアウトと同様に QGridLayout を使用しています):

    i = 0
    while i<100:
        i = i +1
        add = QtGui.QLabel("Row %i" % i)
        self.sa_grid.addWidget(add)

次に、関数「function_name」を呼び出すボタンを作成します。この関数が行を削除するようにしたいと思います。これまでのところ、これは私が書いたものです。

    tmp = QtGui.QWidget()
    tmp = self.sa_grid.itemAt(0)
    self.sa_grid.removeItem(tmp)

最初の行を削除し、グリッドレイアウトの x 行ごとに行 x-1 になりますが、「行 1」というテキストは削除されないため、同じ行に「行 0」と「行 1」が表示されます。

誰でも私を助けることができますか?

事前にどうもありがとう、ダビデ

4

1 に答える 1

2

レイアウトからアイテムを削除しても、そのアイテムは削除されません。アイテムは、関連付けられたレイアウトのないフリーフローティングオブジェクトになります。

オブジェクトを完全に削除する場合は、明示的に削除します。

def deleteGridWidget(self, index):
    item = self.sa_grid.itemAt(index)
    if item is not None:
        widget = item.widget()
        if widget is not None:
            self.sa_grid.removeWidget(widget)
            widget.deleteLater()
于 2012-11-16T19:18:32.987 に答える