使用 QGraphicsItem.focusItem() 检查哪个项目处于焦点上

Checking which item is on focus with QGraphicsItem.focusItem()

所以这是我正在做的这个练习,每当我点击“create_button”时我需要在 QGraphicsScene 中创建方块,当我点击任何方块时,应该显示该方块的名称在 QLabel 中,它位于 QGraphicsView 下,这就是我尝试这样做的方式。

这是我用的window

这是代码

    
class rectangles(QtWidgets.QDialog):

    def __init__(self):
        super(rectangles, 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)
        self.current_focus_obj = QGraphicsItem.focusItem() #the problem is in here
         
    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)
        num_list.remove(num_list[0])
        
    def nameDisplay(self):
        self.ui.name_line.setText(str(self.current_focus_obj)) #Here I try to set 
                                                               #the name of the 
                                                               #active rectangle 
                                                               #to my QLabel      
                
if __name__ == '__main__':
    rectangles_window = rectangles()
    rectangles_window.ui.show()

但是,当我 运行 此代码时,出现以下错误:

# Error: TypeError: file <maya console> line 32: descriptor 'focusItem' of 'PySide2.QtWidgets.QGraphicsItem' object needs an argument # 

老实说,我真的不明白我应该在 focusItem() 中传递什么参数,这就是问题所在。我认为它不需要任何参数,因为它应该 return 当前关注的任何对象。 这可能是一个小问题,但它现在确实减慢了我的步伐,所以如果有人能提供帮助,我将不胜感激:)

你不尊重信号QGraphicsScene::focusItemChanged。您必须将它连接到接收这些参数的函数:

def nameDisplay(self, newFocusItem, oldFocusItem, reason):
    # ...presumably use newFocusItem

这样写也是错误的:

self.current_focus_obj = QGraphicsItem.focusItem()

因为那个函数不是静态的。它必须在 QGraphicsItem.

的实例上调用