如何读取tkinter中的入口函数

时间:2015-07-16 13:20:44

标签: python tkinter

from tkinter import *
master = Tk()
e1 = Entry(master)
us = e1.get() # doesn't work

def factorize(us):
    product=1
    for x in range(1,us+1): # gives error here
        product=product*x
    print(product)

Label(master, text="Number").grid(row=0)

e1.grid(row=0, column=1)
e1.get()))

Button(master, text='Quit', command=master.quit).grid(row=3, column=0, sticky=W, pady=4)
Button(master, text='ans', command=factorize).grid(row=3, column=1, sticky=W, pady=4)

mainloop()

2 个答案:

答案 0 :(得分:0)

我看到的问题很少:

- 您提供的示例代码很乱,可能是由于格式不佳,但无论如何,我已经为我的示例修复了它。

- 创建条目后,您正在调用e1.get()一次。这将返回一个空字符串;但是,你实际上并没有使用存储的变量 任何东西,所以它无用。 <{1}}永远不会被使用。

- us没有传递变量,command = factorize需要变量。我已对此进行了更改,以便回调将传递到factorize窗口小部件中。通过这种方式,我们可以在函数内部调用Entry ,这样每次单击按钮时,我们都会获得最新的条目值。

为此,我将命令更改为us = int(e1.get())command = lambda: factorize(e1)基本上声明了anonymous function&#39;。这是使用Tkinter从回调传递变量的唯一方法,因为lambda关键字需要函数的名称,例如command。说到这里,我还将command = master.destroy更改为master.quit,因为you most likely want to destroy it

- 我已在master.destroy块中包裹us = int(e1.get()),因为您希望try/catch用于您的功能。 int将返回一个您无法用来创建范围的字符串。

- 最后我导入了tkMessageBox,这样当你给Entry.get()一个坏的值时我就会产生一个很好的错误信息(例如,任何无法转换为整数的东西)

Entry

答案 1 :(得分:-1)

脚本将插入按钮,然后它将获得空白的值 所以你需要将我们移动到函数中然后从参数中删除我们这意味着当单击按钮时设置值 你也应该放一些try语句来确保程序可以处理所有输入