Как изменить глобальные значения между классами в python - PullRequest
0 голосов
/ 07 апреля 2020

Мне нужно отправить self.deviceIp=QLineEdit() last value другому классу из класса PopUpWindows Поэтому я пытаюсь использовать глобальные переменные:

У меня есть интерфейс виджета со вкладками, а перед TabWidget у меня есть всплывающее окно с PyQt5. Когда я запускаю интерфейс, открывается popUp windows, и я даю число в QlineEdit, например, я ввел число 12, и я равняюсь GLOBAL_VAL = 12. Поэтому, когда я нажимаю кнопку запуска, открывается интерфейс TabWidget. Когда я нахожусь в Tab1 (), мне нужно увидеть GLOBAL_VAL = 12, но я вижу 0, почему это происходит, хотя я использую global слов

GLOBAL_VAL=0

class PopUpWindows(QDialog):
    def __init__(self):
        super().__init__()
        self.setFixedSize(750, 450) #set window size
        self.msg = QVBoxLayout()
        self.deviceIpLabel = QLabel("Please Give number :")
        self.deviceIp=QLineEdit()
        self.layoutx = QGridLayout()
        self.buttoninterface = QPushButton('Start Interface', self)
        self.buttoninterface.clicked.connect(self.showinterface)
        self.layoutx.addWidget(self.deviceIpLabel,0,0)
        self.layoutx.addWidget(self.deviceIp,0,1)
        self.layoutx.addWidget( self.buttoninterface,1,0)

        self.setLayout(self.layoutx)
        self.setLayout(self.msg)

    def showinterface(self):
        # app = QApplication(sys.argv)
        # self.master.set_timeout(2.0)
        self.tabwidget = TabWidget()
        global GLOBAL_VAL
        GLOBAL_VAL = self.deviceIp.text()
        # print(HOST_ADDRESS)
        self.tabwidget.show()
        self.close()

class TabWidget(QDialog):
      tabwidget = QTabWidget(QWidget)
            tabwidget.addTab(Tab1(), "Tab1")

            tabwidget.addTab(Tab2(), "Tab2")
            ...


class Tab1(QWidget):


    ..

class Tab2()
          global GLOBAL_VAL
          print(GLOBAL_VAL) ... I want to see  12 but I see 0 in here
    ..

1 Ответ

1 голос
/ 07 апреля 2020

Я думаю, вы, вероятно, не вызываете эту функцию. Если я сделаю это

gv = 0
print("gv before change:", gv)
class class1(object):
    def __init__(self):
        self.some_variables = 1
        self.change_global_var()
    def change_global_var(self):
        global gv
        gv = 4
        print("gv in change_global_var:", gv)
class class2(object):
    def __init__(self):
        global gv
        print("gv in class2:", gv)
c = class1()
c2 = class2()

Результат будет таким:

gv before change: 0
gv in change_global_var: 4
gv in class2: 4

Вы создаете вкладки "self.tabwidget = TabWidget ()" перед изменением переменных с помощью глобального "global GLOBAL_VAL, GLOBAL_VAL = self.deviceIp.text () "

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