【问题标题】:how to read the entry function in tkinter如何在 tkinter 中读取入口函数
【发布时间】:2015-07-16 13:20:44
【问题描述】:
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()

【问题讨论】:

  • 请添加一些文字,描述您遇到的问题。

标签: python tkinter


【解决方案1】:

我看到的几个问题:

-您提供的示例代码一团糟,这可能是由于格式不正确,但无论如何,我已经为我的示例修复了它。

-您在创建条目后调用了一次e1.get()。这将返回一个空字符串;但是,您实际上并没有对存储的变量进行任何操作 ,因此它是无用的。 us 从未使用过。

-command = factorize 不传递变量,factorize 需要变量。我已更改此设置,以便回调将传入 Entry 小部件。这样,我们就可以调用us = int(e1.get())inside这个函数,这样每次点击按钮,我们都会得到最新的入口值。

为此,我将命令更改为command = lambda: factorize(e1)lambda 本质上声明了一个“anonymous function”。这是使用 Tkinter 从回调传递变量的唯一方法,因为 command 关键字需要函数的名称,例如 command = master.destroy。说起来,我还把master.quit改成了master.destroy,因为you most likely want to destroy it

-我已将 us = int(e1.get()) 包装在 try/catch 块中,因为您想要一个 int 用于您的函数。 Entry.get() 将返回一个您不能用来创建范围的字符串。

-最后我已经导入了 tkMessageBox,这样当你给 Entry 一个错误的值时我可以生成一个很好的错误消息(例如,任何不能转换为整数的东西)

from tkinter import *
import tkMessageBox

master= Tk()

e1 = Entry(master) 

def factorize(us): 
    try:
        us = int(e1.get())
    except ValueError:
        tkMessageBox.showerror("Value Error", "Please enter an integer!")
    else:
        product=1 
        for x in range(1,us+1):
            product=product*x 
            print(product)

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

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

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

master.mainloop( )

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • factorize 怎么会知道函数内部的e1 是什么?这是一个相当不完整的答案。您对代码当前的方式的空白字符串是正确的。
    • 您应该尝试将打印错误的语句是 Valueerror is given to the console print that there was invalid input
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 2016-09-23
    相关资源
    最近更新 更多