【问题标题】:Getting tkinter to display output in a textbox让 tkinter 在文本框中显示输出
【发布时间】:2016-04-25 13:46:00
【问题描述】:

我正在尝试创建一个小型 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()

提前感谢您提供的任何帮助,如果您想进一步澄清任何问题,请告诉我。谢谢。

【问题讨论】:

  • 所有那些使用 Tkinter 的人今天仍然...
  • 您正在用新标签替换标签,而不是更改现有标签。例如,您应该使用label1["text"] = "Is prime"
  • @AmitGold 如果你知道答案,你不应该点击“添加评论”按钮来发布答案。
  • @linusg 你会推荐什么来代替 Tkinter 来使用 python 制作 GUI?
  • @TadhgMcDonald-Jensen 我正在审核,所以我没有按钮。

标签: python tkinter


【解决方案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)

【讨论】:

    猜你喜欢
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 2020-04-10
    相关资源
    最近更新 更多