【问题标题】:Python, Tkinter - How to get text from EntryPython,Tkinter - 如何从条目中获取文本
【发布时间】:2020-06-03 20:48:01
【问题描述】:

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

所以我有这个class 的功能,我可以在其中创建一个带有一个简单条目和一个简单按钮的 Tkinter 窗口。但是当我尝试获取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)

欢迎提供任何提示。

【问题讨论】:

  • 它是.get(),而不是.get
  • @BryanOakley 我知道我没有括号,但这实际上是必要的。如果我添加括号,我会收到错误 print(self.firstname.get()) TypeError: get() missing 1 required positional argument: 'self'
  • @BryanOakley 如果我也将 self 添加到括号中,我会收到错误 value = self._tk.globalgetvar(self._name) AttributeError: 'StrWnd' object has no attribute '_tk'
  • StringVar 也必须是 StringVar()
  • @BryanOakley 然后我收到错误self._root = master._root() AttributeError: 'NoneType' object has no attribute '_root'

标签: python tkinter tkinter-entry


【解决方案1】:

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

要回答您的具体问题“如何从条目中获取文本”,您需要调用get 方法。您的代码中的缺陷是您没有调用 get 方法。您需要将printValues 更改为如下所示。注意()get之后的使用:

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

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

self.firstname = StringVar()

第三个问题是你只能在第一次创建根窗口之后才能这样做。您的示例没有显示您是否、如何或何时这样做,但在 cmets 中您报告了一个错误,这是此类错误的症状。

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

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

不过,您似乎有另一个代表根窗口的类,所以这可能与您在代码中的执行方式不同。关键是,在创建StringVar的实例之前需要创建根窗口。

【讨论】:

  • 我猜它现在可以正常工作了。但由于某种原因,打印件只是空白。
  • 当我对您的确切代码进行这些更改并添加其他几位以使其工作时,它对我有用。您是否创建了不止一次的 Tk 实例?
  • 它正在工作。我只是忘记将根添加到顶层。太感谢了。现在已经是午夜了,我终于可以入睡了,而不会为此头疼
【解决方案2】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 2013-01-02
    • 2018-08-11
    • 2013-01-15
    • 2016-02-08
    • 1970-01-01
    相关资源
    最近更新 更多