Передача переменных между функциями в классе в tkinter: self.param vs param - PullRequest
0 голосов
/ 01 марта 2019

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

Мой код - это простое окно, которое закрывается при нажатии кнопки, если поле ввода не пустое.

class simpleGUI:
    def __init__(self, root):
        height = StringVar()
        self.root = root
        self.frame = ttk.Frame(self.root, padding='30 30 30 30')
        self.frame.grid(row=0, column=0, sticky=(N, W, E, S))
        self.root.title("Enter your parameters")
        ttk.Label(self.frame, text="Height").grid(row=1, column=1, sticky=(W, E))

        # widgets
        self.height = ttk.Entry(self.frame, width=7, textvariable=height)
        self.height.grid(row=2, column=1, sticky=(W, E))
        self.height.focus()

        self.button = ttk.Button(self.frame, text="OK", command=self.close_window)
        self.button.grid(row=3, column=1, sticky=(W, E))

    def close_window(self):
        if len(self.height.get())>0:
            self.root.destroy()

Это работает, только если виджет высоты сохранен в self.height.Если self.height заменяется на height, то это не работает.Например, если нижняя половина кода заменена на следующую:

        # widgets 
        height = ttk.Entry(self.frame, width=7, textvariable=Height)
        height.grid(row=2, column=1, sticky=(W, E))
        height.focus()

        self.button = ttk.Button(self.frame, text="OK", command=self.close_window(height))
        self.button.grid(row=3, column=1, sticky=(W, E))

    def close_window(self, height):
        if len(height.get())>0:
            self.root.destroy()

Я не получаю никаких ошибок в консоли. Это просто больше не закрывает окно, и я пытаюсь понять, почему,Консультации от более опытных людей будут оценены.

...