2012-06-18 71 views
0

我是一個Python和Qt新手...如何添加事件監聽器到PyQt4中的動態QTableWidgetItem?

我正在開發一個GUI程序,該程序在開始時顯示使用QTableWidget的數據列表。

使用setItem()方法將行插入到表中。他們是QTableWidgetItem的對象。

現在我想讓用戶點擊選擇某一行(QTableWidgetItem),我的程序將填充第二個QTableWidget

我已經瞭解到有一種叫做Signal and Slot的東西。我會用那個嗎? 也有使用installEventFilter()的示例,但它不適用於QTableWidgetItem

回答

5

造成這種情況的最簡單的方法也只是使用itemClicked - 信號的QTableWidget的的:

def handle_item_clicked(tableItem): 
    #the callback, called when an item is clicked, with the item as an argument 
    #populate the secondary table in some way 

#register the callback with the QTableWidget 
yourTableWidget.itemClicked.connect(handle_item_clicked) 

您也可以使用currentItemChanged信號,讓你當前和以前的選擇(例如,所以你可以清除或者如果用戶取消選擇一個項目,隱藏你的輔助小部件,在這種情況下當前項目將是None)。

1

Qt沒有「事件監聽器」。正如你所提到的,你可以通過connecting信號來完成這些事情。

例如:

QObject.connect(myTableWidget, QtCore.SIGNAL("clicked()"), self.foobar) 

這將導致該方法self.foobar()當你點擊myTableWidget被調用。 foob​​ar函數可以檢索which item is selected並基於此填充第二個小部件。

請注意,在connect的最後一個參數中,不要使用圓括號(foobar()),只是方法名!

+0

爲什麼你使用這種古老的連接機制? –

+0

@BlaXpirit:謹慎地闡述?古代在什麼意義上? –

+0

@Kuba:我想他認爲l4mpi的答案中使用的語法在某種程度上更好/更新。不知道我自己,我一直在PyQt4中使用它,它完全適合我。 – Junuxx