Как использовать поле ввода для установки переменной - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь создать пользовательский интерфейс, в котором пользователь вводит свое имя в поле ввода, когда я пытаюсь напечатать переменную имени, что-то идет не так, как надо, и печатается PY_VAR.

import tkinter as tk


class TestApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self._frame = None
        self.geometry('400x500')
        self.switch_frame(StartPage)

    def switch_frame(self, frame_class):
        """Destroys current frame and replaces it with a new one."""
        new_frame = frame_class(self)
        if self._frame is not None:
            self._frame.destroy()
        self._frame = new_frame
        self._frame.grid()

    def save(self,var1name):
        print(var1name)


class StartPage(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        var1name = tk.StringVar()
        #Entry of basic information
        tk.Label(self, text="Please enter setup").grid(row=0, column=1, sticky="W")
        tk.LabelFrame(self, text="labelframe").grid()
        tk.Label(self, text="Name: ").grid(row=1, column=0, sticky="W")
        tk.Entry(self,textvar=var1name).grid(row=1, column=2, sticky="W")

        tk.Button(self, text="Set",
                  command=lambda: master.save(var1name)).grid(row=9, column=1, sticky="E")

        #tk.Button(self, text="Next",
                  #command=lambda: master.switch_frame(PageOne)).grid(row=9, column=2, sticky="E")


if __name__ == "__main__":
    app = TestApp()
    app.mainloop()

я ожидалимя напечатано на интерфейсе Python, но вместо него напечатано PY_VAR

1 Ответ

2 голосов
/ 19 сентября 2019

var1name является ссылкой на объект Tkinter.StringVar.Вам нужно вызвать его метод get для доступа к значению, которое он представляет, например:

print (var1name.get())

Метод get возвращает текущее значениепеременная, как объект Python.

В вашем коде:

class StartPage(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        var1name = tk.StringVar()
        # Entry of basic information
        tk.Label(self, text="Please enter setup").grid(row=0, column=1, sticky="W")
        tk.LabelFrame(self, text="labelframe").grid()
        tk.Label(self, text="Name: ").grid(row=1, column=0, sticky="W")
        tk.Entry(self, textvar=var1name).grid(row=1, column=2, sticky="W")

        tk.Button(self, text="Set",
                  command=lambda: master.save(var1name.get())).grid(row=9, column=1, sticky="E")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...