Python, Tkinter - 如何从 Entry 获取文本

Python, Tkinter - How to get text from Entry

如果以前有人问过这个问题,我深表歉意,但我一直在努力自己解决这个问题,并在同学的帮助下解决了这个问题。他们似乎没有问题,但我就是无法到达 EntryValue。我总是得到像 <function StringVar.get at 0x0358E970> 或类似的奇怪字符串。我现在已经花了整整 5 个小时试图在互联网的帮助下解决这个问题。我希望有人能帮助我理解这一点。

所以我有这个 class 和一个函数,在这个函数中我创建了一个 Tkinter window,只有一个简单的条目和一个简单的按钮。但是当我尝试获取 textvariable 的值时,我没有得到 string 而是某种我根本无法使用的代码。我究竟做错了什么?或者有什么我没有做的吗?

    import tkinter as tk
    from tkinter import ttk
    from tkinter import *

    class StrWnd:
        def __init__(self):
            self.firstname = StringVar
        def Register(self):
            self.register = Toplevel(self.scr)
            self.register.geometry("300x300")
            self.register.title("Register")

            Label(self.register, text="Vorname(Keine Nummern)").pack()
            ttk.Entry(self.register, textvariable=self.firstname).pack()

            ttk.Button(self.register, text="Submit", command=lambda: self.printValues()).pack()

        def printValues(self):
            print(self.firstname.get)

欢迎任何提示。

好的,你的代码有很多问题。

要回答您的具体问题 "How to get text from Entry",您需要调用 get 方法。您的代码中的缺陷是您没有调用 get 方法。您需要将 printValues 更改为如下所示。注意在 get:

之后使用 ()
def printValues(self):
    print(self.firstname.get())

但是,这会暴露代码中的下一个问题。您在创建 self.firstname 时犯了同样类型的错误。您需要将其更改为以下内容。再次注意 ().

的使用
self.firstname = StringVar()

第三个问题是您只能在先创建根目录后才能这样做window。你的例子没有显示你是否、如何或何时这样做,但在评论中你报告了一个错误,这是此类错误的症状。

因此,在创建 StrWnd 的实例之前,您必须创建根 window。例如,它可能看起来像这样:

root = tk.Tk()
strwnd = StrWnd()

不过,您似乎还有另一个 class 代表根 window,所以这可能不是您在代码中的确切做法。关键是,在创建 StringVar.

的实例之前,需要创建根 window

我对自己编码还很陌生,但我发现的第一个问题是它必须是 tk.StringVar()StringVar(),因为这不仅是一个变量,而且是一个预定义的 class 在 Tkinter 中。

要了解更多信息,请参阅此 post:what is the difference between a variable and StringVar() of tkinter

此外,我不确定是否正确调用了所有函数。在最后一行,我希望 self.firstname.get() 而不是 self.firstname.get.

不过,我敢肯定,更有经验的编码人员可以为您提供更多有用的建议。

编辑:很高兴看到有人刚刚给了您更详细的回复。 :-)