【问题标题】:Where should I paste get() method to print the value of the entryBox in Python Tkinter?我应该在哪里粘贴 get() 方法以在 Python Tkinter 中打印 entryBox 的值?
【发布时间】:2023-03-17 08:55:01
【问题描述】:

我想构建一个数据输入应用程序,但是输入框没有得到输入的值。我知道 get() 方法,但由于某种原因它不起作用。这是相关的代码详细信息:

from tkinter import *

root = Tk()
root.geometry("600x500")

myList = []

class oneClass:
    def __init__(self, master):
        self.entryName = Entry(master).get()
        self.entryName.place(relx=0.5, rely=0.45, anchor=CENTER)
        myList.append(self.entryName)
        self.buttonPrint = Button(master, text="Click Me!", command=self.print).place(relx=0.5, rely=0.75, anchor=CENTER)

    def print(self):
        print(myList)

val = oneClass(root)

root.mainloop()

运行后,我在第 11 行收到“AttributeError: 'str' object has no attribute 'place'”消息。那么问题出在哪里?

【问题讨论】:

  • 这不是您使用.get 方法的方式。你到底想创造什么?
  • 您正在尝试在创建条目小部件后立即获取条目。您需要等待用户输入输入。 .get()方法返回字符串,字符串作为空位。

标签: python tkinter


【解决方案1】:

试试这个:

from tkinter import *

# Now it will have global scope
myList = []

class oneClass:
    def __init__(self, master):
        self.entryName = Entry(master)
        self.entryName.place(relx=0.5, rely=0.45, anchor=CENTER)
        self.buttonPrint = Button(master, text="Click Me!", command=self.print)
        self.buttonPrint.place(relx=0.5, rely=0.75, anchor=CENTER)

    def print(self):
        myList.append(self.entryName.get())
        print(myList)

root = Tk()
app = oneClass(root)
root.mainloop()

在调用.get 之前,您需要给用户时间在条目中实际写下他们的响应。我将myList 变量设为全局变量。当函数是几何管理器函数时,也永远不要使用variable = Widget(...).function(...),因为变量将始终为None,以便解释查看here

【讨论】:

  • 也许你想改变variable = Widget(...).function(...) -> variable = Widget(...).place()。不一定要变成None 它通常取决于方法返回的内容。
  • @JacksonPro 不,它仍然是None.place.pack.grid 等所有几何方法都返回 None。我想不出任何会返回自身的 tkinter 小部件上的方法。所以永远不要使用variable = Widget(...).function(...),只需像这样将它分成两行:variable = Widget(...)variable.function(...)
  • Entry(master).get() 返回空字符串。如果您只谈论 tkinter 提供的几何管理器,那么您的说法是正确的。
  • 是的,但 OP 使用 self.entryName = Entry(master).get() 认为它返回了一个小部件。所以总是像这样把它分成两行:self.entryName = Entry(master)entry_result = self.entryName.get()。同样现在,我忽略了您在创建条目后立即查询该条目的事实。就像 The Zen of Python 中的旁注一样,它说 简单胜于复杂
  • @JacksonPro 我编辑了我的解释。我不擅长解释事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 2016-05-13
  • 1970-01-01
相关资源
最近更新 更多