首页 > 解决方案 > 从存储为实例变量的 Entry 小部件中检索输入并在类外部使用它

问题描述

我在尝试从存储为实例变量的 Entry 小部件中获取输入时遇到困难,因此我可以将其用作此类外部的输入:

class CreateGUI:

    def __init__(self, master):
        self.master = master
        self.master.geometry("275x325")
        self.master.columnconfigure(0, weight=1)
        self.master.columnconfigure(1, weight=2)
        self.checkbutton_var1 = IntVar()
        self.checkbutton_var2 = IntVar()
        self.path = ''
        self.type = []

    def add_labels(self):
        Label(self.master, text="Provide path to file:").grid(column=0, row=0, padx=10, pady=10, sticky="N")

    def add_entries(self):
        user_input = Entry(self.master)
        user_input.grid(column=0, row=1, padx=5, pady=5, ipadx=60)
        return user_input

    def add_buttons(self, user_input):
        checkbutton1 = Checkbutton(self.master, text="test1", variable=self.checkbutton_var1, onvalue=1,offvalue=0,height=2,width=10)
        checkbutton1.grid(column=1, row=0)
        checkbutton2 = Checkbutton(self.master, text="test2", variable=self.checkbutton_var2, onvalue=1, offvalue=0,height=2, width=10)
        checkbutton2.grid(column=1, row=1)
        button = Button(self.master, text="push", bg="pink", bd=100, fg="white",
                    command=lambda: self.retrieve_input(user_input.get(), self.checkbutton_var1.get(), self.checkbutton_var2.get()))
        button.grid(column=0, row=3, padx=20, pady=20, sticky="NEWS")


    def retrieve_input(self, p, *args):
        self.path = p
        #print(self.path)
        for el in args:
            self.type.append(el)
            #print(self.type)

def main():
    tk = Tk()
    app = CreateGUI(tk)
    app.add_labels()
    user_input = app.add_entries()
    app.add_buttons(user_input)
    print(app.type)
    print(app.path)
    tk.mainloop()

当我启动程序,写入输入并按下按钮时,它不会打印任何内容。启动程序时会打印空括号。里面的retrieve_input打印内容正是我需要的,但我需要在课堂之外输入这些内容,因为它们将成为另一个类的输入。

我尝试了与此问题相关的所有方法,但它不起作用,我真的会寻求任何帮助。谢谢!

标签: pythontkinter

解决方案


在任何人有机会输入之前,您就已经获得了 Entry 小部件的输入。结果,user_input.get()将返回一个空字符串。您可以做的一件事是制作某种触​​发器add_buttons(),以便用户在填写完后激活该触发器user_input。之后的进一步调整应该可以使它工作。

请告诉我您是否还有其他问题。


推荐阅读