访问在另一个类的方法中创建的变量

2024-04-25 20:07:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想回忆另一个类的变量,而不必使其成为全局变量。我来不了!你能帮我吗

class labTreeMap(QLabel):
    clickedQL = pyqtSignal()
    def mouseReleaseEvent(self,event):
        if event.button() == Qt.LeftButton:
            xTM = event.pos().x()
            yTM = event.pos().y()
            self.clickedQL.emit()

class TreeMap(QWidget):
    def click_TreeMap(self,c):
        xTM=labTreeMap.mouseReleaseEvent.xTM  # recall xTM from here
        yTM=labTreeMap.mouseReleaseEvent.yTM  # recall yTM from here

Tags: fromposselfeventheredefclass全局变量
3条回答

让它们成为实例变量

class labTreeMap(QLabel):
    clickedQL = pyqtSignal()
    def mouseReleaseEvent(self,event):
        if event.button() == Qt.LeftButton:
            self.xTM = event.pos().x()
            self.yTM = event.pos().y()
            self.clickedQL.emit()

class TreeMap(QWidget):
    def click_TreeMap(self,c):
        xTM=someLabTreeMap.xTM  # recall xTM from here
        yTM=someLabTreeMap.yTM  # recall yTM from here

someLabTreeMap替换为保存先前调用mouseReleaseEvent()labTreeMap对象的变量

在PyQt中实现这一点的惯用方法是将值作为信号参数发出,以便它们在任何连接的插槽中都可以直接作为参数使用:

class LabTreeMap(QLabel):
    clickedQL = pyqtSignal(int, int) # declare paramter types

    def mouseReleaseEvent(self,event):
        if event.button() == Qt.LeftButton:
            xTM = event.pos().x()
            yTM = event.pos().y()
            self.clickedQL.emit(xTM, yTM) # emit paramters

class TreeMap(QWidget):
    def __init__(self):
        ...
        self.treeMapChart = TreeMapChart()
        ...
        self.labTreeMap = LabTreeMap()
        self.labTreeMap.clickedQL.connect(self.click_TreeMap)

    def click_TreeMap(self, xTM, yTM):
        # do something with parameters
        print(f'{xTM=}, {yTM=}')
        # do something with chart
        print(self.treeMapChart)

理想情况下,您需要使TreeMap依赖于实例化时提供给它的labTreeMap实例

以下是类的糟糕副本,但显示了TreeMap如何获取labTreeMap的实例:

class labTreeMap:
    def foo(self):
        self.xTM = 0

class TreeMap:
    def __init__(self, ltm):
        self.ltm = ltm
    def click_TreeMap(self,c):
        xTM=self.ltm.xTM  # recall xTM from here

l = labTreeMap()
l.foo()   # create the xTM attribute
t = TreeMap(l)
t.click_TreeMap(0)

相关问题 更多 >