在QGraphicsScene中选择小部件

时间:2014-04-01 10:44:49

标签: python qt qgraphicsscene

我是python的新手并且Qt遇到以下问题;当我运行此代码并在我创建的表中选择一个项目时,我的scene_selection_changed插槽不会被执行,或者至少它会如此。谁能告诉我为什么?

    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()

1 个答案:

答案 0 :(得分:2)

可以选择场景项目,场景选择是指选择项目。您只有一个场景项(用于显示表格的QGraphicsProxyWidget)并且无法选择,因此场景选择始终为空且无法更改。

您需要使用表格小部件本身的选择跟踪。它指的是选定的表格单元格。

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

如果您想知道选择了哪些单元格,您还应该从表格小部件而不是场景中请求此信息。