python从一个类到另一个类获取列表

python从一个类到另一个类获取列表,python,python-3.x,pyqt,pyqt5,Python,Python 3.x,Pyqt,Pyqt5,我正试着把考试单带回头等舱。如果我想使用self.butdown.clicked.connect(self.xy),我该怎么做 谢谢 您应该将test\u列表设置为全局变量。我的意思是,您应该在两个类之前声明它,并在类中访问它们。例如: test_list=[] 类测试(QtWidgets.QMainWindow): ... 然后在返回列表中: def返回列表(self): 全球测试列表 #你想用它做什么就做什么 完成此操作后,需要列表可以访问测试列表。查看更多详细信息。如果要使用test\

我正试着把考试单带回头等舱。如果我想使用self.butdown.clicked.connect(self.xy),我该怎么做 谢谢


您应该将
test\u列表
设置为全局变量。我的意思是,您应该在两个类之前声明它,并在类中访问它们。例如:

test_list=[]
类测试(QtWidgets.QMainWindow):
...
然后在返回列表中:

def返回列表(self):
全球测试列表
#你想用它做什么就做什么

完成此操作后,
需要列表
可以访问
测试列表
。查看更多详细信息。

如果要使用
test\u list
,一个由
other\u window
的方法从
test
的实例创建的变量,您有两个选项

假设您在某个地方全局定义了
test
的实例,您可以调用
need\u list()
并将
test\u list
作为参数。例如:

class test(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
       self.test.setupUi(self) # QT
       #do something
       self.pushbutton.clicked.connect(self.connect1)

    def connect1(self):
        window = other_window(self)
        otherview.show()

    def need_list(self, test_list):
        print(test_list)

class other_window(QtWidgets.QMainWindow)
    def __init__(self, parent=None):
        self.other_window.setupUi(self) # QT
        #do something
        self.pushbutton.clicked.connect(self.connect2)

    def connect2(self):
        # do something
        self.pushbutton.clicked.connect(self.return_list)

    def return_list(self):
        test_list = []
        test_list.append("a", "b", "c")
        return test_list

test_instance = test()  # Or however you defined these
other_window_instance = other_window()

test_instance.need_list(other_window_instance.return_list())
您还可以将
测试列表
设置为全局。这将需要较少的更改,但需要一定的灵活性:

class test(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
       self.test.setupUi(self) # QT
       #do something
       self.pushbutton.clicked.connect(self.connect1)

    def connect1(self):
        window = other_window(self)
        otherview.show()

    def need_list(self):
        print(test_list)

class other_window(QtWidgets.QMainWindow)
    def __init__(self, parent=None):
        self.other_window.setupUi(self) # QT
        #do something
        self.pushbutton.clicked.connect(self.connect2)

    def connect2(self):
        # do something
        self.pushbutton.clicked.connect(self.return_list)

    def return_list(self):
        global test_list

        test_list = []
        test_list.append("a", "b", "c")

test_instance = test()
other_window_instance = other_window()
Python具有可变作用域(请参阅),这意味着在原始程序中,
need\u list()
无法查看
test\u list
,因为它是在本地定义的。该函数之外的任何内容都无法查看
test\u list
,除非您将其声明为全局变量(第二个选项中使用了
global
关键字,这使得它可以在除重新分配给相同名称的函数体之外的任何位置查看。有关详细信息,请参阅)或显式地将其传递给函数(使用
need_list()
中的函数参数,如第一个选项所示)


希望这能有所帮助!

应该注意的是,完全重新发布原始代码不是一个好主意,这是因为第二个插槽连接根本不起任何作用。我建议您编辑此帖子,以便它报告这一点。我还建议您在从t创建连接时避免连接到信号同样的信号(或者,至少确保信号只连接一次):如果多次单击该按钮,则每次都会再次调用第二个信号。我曾考虑删除未更改的代码,但我不确定要保留哪些部分。我认为你有资格为我编辑我的帖子,因为你似乎比我更清楚该做什么。我真的不喜欢编辑别人的帖子答案(最重要的是,他们的代码)除非我认为这是真的有必要,因为我担心这可能会改变答案的初衷和意义,也因为我认为自我编辑提供了很多见解。我将保留你的答案,因为我认为我的评论可能足以让未来的读者提供更多信息(这就是评论的目的),而且,如果有一天你会记住它并抽出时间编辑它,这将意味着其他人(特别是你,但不仅仅是你)将从中获得更多好处:-)
class test(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
       self.test.setupUi(self) # QT
       #do something
       self.pushbutton.clicked.connect(self.connect1)

    def connect1(self):
        window = other_window(self)
        otherview.show()

    def need_list(self):
        print(test_list)

class other_window(QtWidgets.QMainWindow)
    def __init__(self, parent=None):
        self.other_window.setupUi(self) # QT
        #do something
        self.pushbutton.clicked.connect(self.connect2)

    def connect2(self):
        # do something
        self.pushbutton.clicked.connect(self.return_list)

    def return_list(self):
        global test_list

        test_list = []
        test_list.append("a", "b", "c")

test_instance = test()
other_window_instance = other_window()