поделиться переменными в Python - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь поделиться переменными из класса tkinter с глобальным кодом, У меня есть tkinter графический интерфейс, в который я вставляю данные и однажды закрыл форму tkinter. Я хотел бы, чтобы код печатал эти данные, но код не берет введенные мной данные и возвращает другое значение.

это код:

class App:

    def __init__(self, master):

        self.username = None
        self.frame1 = tk.LabelFrame (master, text="Instagram")
        self.frame1.pack ()
        self.dict = {'':[], 'Scienza': ['Nasa', '2', '3'],
                    'Moda': ['vladislavkirillov', 'barengo1', 'vittorio__badia'],
                    'Dunk Page': ['stupidpikachu', 'nascecresceignora', 'the_fucking_dank']}

        self.categoria_pagina = tk.StringVar()
        self.pagina_preimpostata = tk.StringVar()
        self.username1 = tk.StringVar()
        self.password = tk.StringVar()
        self.pagina_tua = tk.StringVar()
        self.commento1 = tk.StringVar()

        Entry (self.frame1, textvariable=self.username1, bg="white").grid (column=1, row=2, sticky=tk.W)

        Entry (self.frame1, textvariable=self.password, bg="white").grid (column=1, row=3, sticky=tk.W)

        Entry (self.frame1, textvariable=self.pagina_tua, bg="white").grid (column=1, row=4, sticky=tk.W)

        self.categoria_pagina.trace('w', self.updateoptions)

        self.optionmenu_a = ttk.OptionMenu(self.frame1, self.categoria_pagina, *self.dict.keys())
        self.categoria_pagina.set("Scienza")
        self.optionmenu_a.grid(row = 7, column = 1)

        self.optionmenu_b = ttk.OptionMenu(self.frame1, self.pagina_preimpostata, '')
        self.optionmenu_b.grid(row = 8, column = 1)


        self.variable_c = tk.StringVar ()
        self.variable_d = tk.StringVar ()


    def updateoptions(self, *args):
        countries = self.dict[self.categoria_pagina.get()]
        self.pagina_preimpostata.set(countries[0])
        menu = self.optionmenu_b['menu']
        menu.delete(0, 'end')
        for country in countries:
            menu.add_command(label=country, command=lambda country=country: self.pagina_preimpostata.set(country))


        categoria = self.categoria_pagina.get()
        pagina_preimpostata_stringa = self.pagina_preimpostata.get()
        username= self.username1.get()
        password= self.password.get()
        pagina_tua=self.pagina_tua.get()

    root = tk.Tk()

    app = App(root)

    root.mainloop()

    print(app.username)

возвращает значение None вместо значения, которое я вставляю в tkinter gui

1 Ответ

0 голосов
/ 26 июня 2018

Проблема в том, что когда вы делаете ниже в вашем коде

username= self.username1.get()

Python создает локальную переменную в области действия функции, и когда функция завершается, переменная больше не существует. Таким образом, у вас есть несколько, чтобы решить эту проблему.

Один должен определить username в __init__ из App

self.username = None

А в своей функции используйте

self.username = self.username1.get()

А в дальнейшем вы можете использовать print(app.username)

Другой вариант - использовать глобальные переменные (НЕ РЕКОМЕНДУЕТСЯ)

username = None

class App
.....
    global username
    username= self.username1.get()

....

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