Python, Tkinter - 如何从 Entry 获取文本
Python, Tkinter - How to get text from Entry
如果以前有人问过这个问题,我深表歉意,但我一直在努力自己解决这个问题,并在同学的帮助下解决了这个问题。他们似乎没有问题,但我就是无法到达 Entry
的 Value
。我总是得到像 <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
.
不过,我敢肯定,更有经验的编码人员可以为您提供更多有用的建议。
编辑:很高兴看到有人刚刚给了您更详细的回复。 :-)
如果以前有人问过这个问题,我深表歉意,但我一直在努力自己解决这个问题,并在同学的帮助下解决了这个问题。他们似乎没有问题,但我就是无法到达 Entry
的 Value
。我总是得到像 <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
.
我对自己编码还很陌生,但我发现的第一个问题是它必须是 tk.StringVar()
或 StringVar()
,因为这不仅是一个变量,而且是一个预定义的 class 在 Tkinter 中。
要了解更多信息,请参阅此 post:what is the difference between a variable and StringVar() of tkinter
此外,我不确定是否正确调用了所有函数。在最后一行,我希望 self.firstname.get()
而不是 self.firstname.get
.
不过,我敢肯定,更有经验的编码人员可以为您提供更多有用的建议。
编辑:很高兴看到有人刚刚给了您更详细的回复。 :-)