2014-04-01 101 views
0

我是python的新手,並對Qt有以下問題;當我運行這個代碼並在我創建的表中選擇一個項目時,我的scene_selection_changed插槽不被執行,或者至少它看起來如此。誰能告訴我爲什麼?在QGraphisScene中選擇窗口小部件

class MyWidget(QWidget): 


def __init__(self, parent=None): 
    super(MyWidget, self).__init__(parent) 
    self.scene = QGraphicsScene() 
    self.view = QGraphicsView(self.scene) 
    self.view.show() 
    self.parent_proxy = self.scene.addWidget(self) 
    self.parent_layout = QGraphicsLinearLayout(Qt.Vertical, self.parent_proxy) 

    self.table_view = QTableWidget(2,1) 
    item = QTableWidgetItem("Item1") 
    item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) 
    self.table_view.setItem(0, 0, item) 
    item = QTableWidgetItem("Item2") 
    item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) 
    self.table_view.setItem(1, 0, item) 
    self.table_proxy = self.scene.addWidget(self.table_view) 
    self.parent_layout.addItem(self.table_proxy) 


    self.scene.selectionChanged.connect(self.scene_selection_changed) 


def scene_selection_changed(self): 
    print "Scene selection changed" 


if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    widget = MyWidget() 

    widget.show() 
    app.exec_() 
    sys.exit() 

回答

2

場景項目可以選擇,場景選擇是指選擇項目。您只有一個場景項目(用於顯示錶格的QGraphicsProxyWidget)並且它不可選,因此場景選擇始終爲空且不能更改。

您需要使用表格控件本身的選擇跟蹤。它指的是選定的表格單元格。

self.table_view.itemSelectionChanged.connect(self.scene_selection_changed) 

如果你想找出哪些細胞被選中,你也應該從表構件請求該信息,而不是從現場。

+0

嗨,它的工作,謝謝。現在我有另一個問題,但我認爲它一定很容易解決。我剛剛編輯了這篇文章。你可以幫幫我嗎? – Keks

+0

@Keks一般來說,如果你還有其他問題,你應該發表另一個問題。將問題添加到正確回答的問題本質上是令人討厭的。 –

相關問題