需要帮助调用defs中的输入框

时间:2018-05-04 09:46:52

标签: python tkinter

嗨,我是python gui的新手,已经被困在这个问题上好几个小时了。我需要在def中的一个输入框中调用一个名字,使用另一个def并继续收到错误:

line 15, in callback 
name = (username.get())
AttributeError: 'str' object has no attribute 'get'

我正在使用代码:

from tkinter import *
username = str();
e = object();

def getname():
    global username
    e = Entry(root, textvariable=username)
    e.pack()
    e.focus_set()
    b = Button(root, text = "OK", width = 10, command = callback)
    b.pack()

def callback():
    name = (username.get())
    print(name)

root = Tk()
getname()
mainloop()

如果我执行e.get()它会出现相同的错误,除了'object'而不是'string'

感谢任何帮助,谢谢

3 个答案:

答案 0 :(得分:1)

你对编写代码的方式会遇到很多挑战,因为你开始tkinter编程我会建议你这样做以达到相同的结果。你不必声明全局使用此变量通过此示例获取entry中的内容。

from tkinter import *


def callback():
    name = (e.get())
    print(name)

root = Tk()


e = Entry(root)
e.pack()
e.focus_set()
b = Button(root, text="OK", width=10, command=callback)
b.pack()

mainloop()

答案 1 :(得分:1)

您将username设置为Entrytextvariable,这意味着它是Tkinter variable,例如StringVar。将username从字符串更改为StringVar时,可以使用您拥有的.get()方法。唯一的事情是你必须在创建Tk()实例后声明它,因为StringVar与根关联:

from tkinter import *
e = object()

def getname():
    global username
    e = Entry(root, textvariable=username)
    e.pack()
    e.focus_set()
    b = Button(root, text = "OK", width = 10, command = callback)
    b.pack()

def callback():
    name = (username.get())
    print(name)

root = Tk()
username = StringVar()
getname()
root.mainloop()

答案 2 :(得分:-1)

不幸的是,python中没有 username.get()(因为没有get()函数,即使是字符串)。也许这会起作用(我还没有测试过这个):

def callback():
    global username
    name = username
    print(name)