如何从Tkinter中的输入框中获取输入文本?

2024-05-21 07:33:58 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我试图为我的程序获取文本输入,但tkinter似乎没有注册它, 我不知道我做错了什么

    window = self.newWindow(value)

    label = tk.Label(window, text="Intfix to Postfix Convert")
    label.place(x=0, y=20)

    e1 = tk.Entry(window)
    text = e1.get()
    e1.place(x=0, y=50)

    rezultat = tk.Text(window, width=20, height=3)
    rezultat.place(x=0, y=80)

    button = tk.Button(window, text="Enter")
    button.place(x=127, y=46)
    button.bind("<Double-Button-1>", self.passValue(rezultat, text))

我的代码看起来像这样。其他一切都在运转self.newWindow(value)只是 从主窗口创建新窗口的函数

所以我说了text=e1.get(),但我运行了debbuger,它说这是一个空字符串,我想通过函数passValue()(一个将值传递给控制器的函数)传递这个文本,我使用button.bind()来实现这一点。可以吗

我通过在文本处放置一个默认值来测试它,比如text="My name",它确实传递了该值,因此应该是有序的,但我不知道为什么它不能像应该的那样从输入框中获取它

我甚至试着去做{}和{},它确实得到了,所以我认为输入有问题

我需要使用一些特殊的输入函数吗

整个代码:

class Gui:

    def __init__(self, controller):
        self.main = tk.Tk()
        self.main.title("DSA Quiz Helper")
        self.__controller = controller

    def IntFixPostExecute(self, event):
        widget = event.widget
        selection = widget.curselection()
        value = widget.get(selection[0])
        self.IntfixPostfixWindow(value)

    def mainWindow(self):
        self.main.geometry("800x500")

        # to do scrollbar
        lb = tk.Listbox(self.main, width=50, height=30)
        lb.insert(1, "Intfix and Postfix Calculator")
        lb.insert(2, "Something else")
        lb.bind("<Double-Button-1>", self.IntFixPostExecute)
        lb.pack()

    def IntfixPostfixWindow(self, value):
        window = self.newWindow(value)

        label = tk.Label(window, text="Intfix to Postfix Convert")
        label.place(x=0, y=20)

        e1 = tk.Entry(window)
        text = e1.get()
        e1.place(x=0, y=50)

        rezultat = tk.Text(window, width=20, height=3)
        rezultat.place(x=0, y=80)

        button = tk.Button(window, text="Enter")
        button.place(x=127, y=46)
        button.bind("<Double-Button-1>", self.passValue(rezultat, text))
        print(text)

    def passValue(self, rezultat, value):
        returnValue = self.__controller.InfixToPostC(rezultat, value)
        rezultat.insert(tk.INSERT, returnValue)

    def newWindow(self, msg):
        newwind = tk.Toplevel(self.main)
        q1 = tk.Frame(newwind)
        q1.pack()
        newwind.geometry("500x230")
        return newwind

    def run(self):
        self.mainWindow()
        self.main.mainloop()

如果我手动设置,它会工作。我不明白为什么我不能使用entrybox输入

    text = tk.StringVar()
    e1 = tk.Entry(window, textvariable=text)
    text.set("x+y*2")
    text = e1.get()
    e1.place(x=0, y=50)

我想我明白了(如果我错了,请纠正我)。我认为有一个问题 使用该按钮是因为一旦打开新窗口,按钮就会自动单击自身,而最初在输入框中还没有写入任何文本(因此它会将初始文本(为空)发送给控制器)。问题是为什么按钮自动单击自身(或者自动运行函数passValue),以及为什么在我输入文本并再次单击按钮后,它什么也不做(据我所知,它只工作一次,自动运行本身,起初entrybox中没有文本,按钮自动运行本身,因此传递一个空字符串


Tags: text文本selfgetvaluemaindefplace
1条回答
网友
1楼 · 发布于 2024-05-21 07:33:58

您应该使用entryname.get()来获取该条目中的文本,而不是声明stringVar(),使其更不可读、更难理解和使用。但这是我的观点!——蒂亚戈·奥利维拉48分钟前
我认为现在的情况是,您在声明entry widget之后立即使用该方法,这意味着您将获得一个“”空字符串,因为那里没有写入任何内容,您需要将命令参数替换为entryname.get(),而不是声明变量=entryname.get()并将其作为参数传递,wich将始终为空!希望这有帮助

相关问题 更多 >