2012-11-16 42 views
5

最近Pythonの学習を開始しましたが、現在はPyQtライブラリを使用してGUIを使用してソフトウェアを作成しています。動的QGridLayoutの更新 - Python PyQt

私の問題は次のとおりです。 私はScrollareaを作成します。私はこのscrollareaに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) 

その後、私はそのボタンを作成します

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

それは最初の行を削除し、GridLayoutののすべてのXの行は、行のx-1次のようになります。機能は、これまでのところ、これは私が書いたものですが、私はこの関数は行を削除することを望む、「FUNCTION_NAME」と呼びますしかし、それはテキスト "行1"を削除しないでください。同じ行に "行0"と "行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() 
+0

は完璧に動作し、おかげでたくさん!私はあまりにも多くの時間を無駄にして答えを探していましたが、今は得ました。 Python/PyQtチュートリアルをお勧めしますか?あなたの助けをありがとう! – xuT

+0

@ TheTux94。 [PyQt Wiki](http://www.diotavelli.net/PyQtWiki/StartPage?action=show&redirect=FrontPage)は悪い場所ではありません。すべての資料が最新ではありません(PyQt4ではなくPyQt3に関連するものもあります)。 – ekhumoro