【发布时间】:2022-01-18 01:15:53
【问题描述】:
我想知道是否有办法获取 QGraphicsItem 的 id。没什么复杂的。假设我有一个 QGraphicsScene,并在其中创建了许多相同大小和颜色的矩形。即使没有 id,我如何识别它们?
更新 这是我的一些代码
class Test(QtWidgets.QDialog):
def __init__(self):
super(Test, self).__init__()
loader = QtUiTools.QUiLoader()
self.ui = loader.load(ui_path, self)
self.variables()
self.ui.create_button.clicked.connect(self.creator)
self.scene.focusItemChanged.connect(self.nameDisplay)
def variables(self):
self.scene = QtWidgets.QGraphicsScene()
self.ui.canvas_area.setScene(self.scene)
def creator(self):
rect = self.scene.addRect(-20,-20,40,40, QPen(Qt.red), QBrush(Qt.gray))
rect.setFlag(QGraphicsItem.ItemIsMovable)
rect.setFlag(QGraphicsItem.ItemIsFocusable)
rect.setFlag(QGraphicsItem.ItemIsSelectable)
def nameDisplay(self, newFocusItem, oldFocusItem, reason):
self.ui.name_line.setText(str(self.scene.focusItem()))
if __name__ == '__main__':
test_window = Test()
test_window.ui.show()
提前致谢!
【问题讨论】:
-
您何时/如何需要“识别”这些项目?这些项目是动态添加的吗?
-
@musicamante 感谢您的快速回复!我提供了一些代码,以便您更清楚地了解正在发生的事情。如果您将运行代码,您将看到一个按钮,当您单击它时,将创建 QGraphicsItem。我想将这些 QGraphicsItems 连接到某些功能。所以,当我选择其中一个时,会发生一些事情(没关系)。对于 QPushButtons,我们只需执行 myPushButton.clicked.connect(myFunction)。我可以用 QGraphicsItems 做类似的事情吗?
-
注意:
QUiLoader的最大限制之一是它不能在现有小部件上“安装” UI(PyQt 允许通过uic.loadUi代替)。创建 QMainWindow 和 QDialog 时应格外小心:如果您使用 QUiLoader,则不应在 Designer 中创建主窗口或对话框,因为您实际上会将它们重新设置为您正在使用的小部件实例(这也可能会产生严重的问题);您应该始终使用基本表单(QWidget),最重要的是,将其添加到父级的主布局集中。
标签: python pyqt5 pyside2 qgraphicsitem