python получить список из одного класса в другой - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь вернуть test_list обратно в первый класс. Как я могу это сделать, если я хочу использовать self.pushbutton.clicked.connect (self.xy) спасибо

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):
        test_list = []
        test_list.append("a", "b", "c")
        # return test_list to need_list

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Если вы хотите использовать test_list, переменную, созданную методом other_window, из экземпляра test, у вас есть пара опций.

Предполагается, что вы определили экземпляр из test где-нибудь глобально, вы можете вызвать need_list() и указать test_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())

Вы также можете сделать test_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 имеет переменные области (см. документацию Python по выполнению ), что означает, что в вашей исходной программе , need_list() не может увидеть test_list, потому что он определен локально. Все, что находится за пределами этой функции, не может видеть test_list, если вы не объявите ее глобальной переменной (с ключевым словом global, используемым во втором параметре, что позволяет видеть его где угодно, кроме тел функций, переназначающих одно и то же имя См. этот вопрос для получения дополнительной информации) или явным образом передайте его функции (используя аргумент функции в need_list(), как показано в первом варианте).

Надеюсь, это помогло!

0 голосов
/ 22 апреля 2020

Вы должны сделать test_list глобальной переменной. Я имею в виду, что вы должны объявить это перед обоими классами и получить к ним доступ в классах. Пример:

test_list = []
class test(QtWidgets.QMainWindow):
    ...

и затем в списке возврата:

def return_list(self):
    global test_list
    # do what you want with it

Как только вы это сделаете, need_list сможет получить доступ к test_list. Смотрите здесь для более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...