让tkinter在文本框中显示输出

时间:2016-04-25 13:46:01

标签: python tkinter

我尝试创建一个小型GUI,当用户在文本框中输入数字时,它会显示(作为标签)是否为素数。

我目前的代码"工作" (因为没有显示错误)但标签没有变化。

素数代码在python shell中有效。

我的代码如下:

from tkinter import *

root = Tk()

label1 = Label( root, text="Enter Number")
E1 = Entry(root, bd =5)

def isPrime():
    entry1 = E1.get()
    entry1 = int(entry1)
    for d in range(2,entry1):
        if entry1 % d == 0:
            label1 = Label(root, text="Not prime")
            root.update_idletasks()
            break
    else:
        label1 = Label(root, text="Is prime")


submit = Button(root, text ="Submit", command = isPrime)
root.update_idletasks()

label1.pack()
E1.pack()
submit.pack(side =BOTTOM) 
root.mainloop()

感谢您提前获得任何帮助,如果您对任何问题有任何更多说明,请与我们联系。谢谢。

1 个答案:

答案 0 :(得分:1)

每次点击按钮时,您都会重新创建label1。此外,您没有打包正在创建的那个,因为那个是isPrime()方法的本地范围。

如果您想更改标签的文字,则应将其作为参数传递给isPrime()并使用.config(text="text here")label["text"] = "text here"

def isPrime(lbl):
    entry1 = int(E1.get())
    for d in range(2,entry1):
        if entry1 % d == 0:
            lbl.config(text = "Not prime")
            break
    else:
        lbl["text"] = "Prime"

submit = Button(root, text ="Submit", command = lambda:isPrime(label1))

或者您可以将label1设为全局并更改其文字。

def isPrime():
    global label1
    entry1 = E1.get()
    entry1 = int(entry1)
    for d in range(2,entry1):
        if entry1 % d == 0:
            label1.config(text = "Not prime")
            break
    else:
        label1["text"] = "Prime"

submit = Button(root, text ="Submit", command = isPrime)