【问题标题】:How can I replace a tkinter label with a new one?如何用新标签替换 tkinter 标签?
【发布时间】:2020-06-03 22:07:40
【问题描述】:

我正在尝试编写一个相当简单的程序,该程序使用 tkinter GUI 将数字转换为二进制。我遇到的问题是,当我输入一个大数字(例如 1000)然后输入一个较小的数字(如 2)并点击提交时,新输出只会显示在旧输出的中间。在我使用的示例中,它看起来像“1000 i 2 in binary is 10 01000”

如何在显示新标签之前完全删除旧标签?

from tkinter import *

win = Tk()

def compute_binary():
    user_num = binary_entry.get()
    user_num = int(user_num)
    binary_equivalent = ("{:b}".format(user_num))
    binary_output = StringVar()
    binary_output.set(str(user_num) + " in binary is " + binary_equivalent)
    binary_label = Label(win, textvariable = binary_output)
    binary_label.grid(row = 1, column = 1)

win.title("Number to Binary Converter")

win.geometry("450x75")

input_request = Label(win, text = "Input a number to\nconvert to binary:")
input_request.grid(row = 0, column = 0)

binary_entry = Entry(win)
binary_entry.grid(row = 0, column = 1)

entry_confirm = Button(win, text = "Submit", command = compute_binary)
entry_confirm.grid(row=0, column = 2)

win.mainloop()

【问题讨论】:

  • 那是因为您将标签层叠在一起。而是将您的标签写入全局命名空间并简单地更新它。

标签: python tkinter replace label


【解决方案1】:

您为每次转换的结果重新创建新标签,新标签覆盖在前一个标签之上。

您需要创建一次结果标签并在每次转换中更新它:

from tkinter import *

win = Tk()

def compute_binary():
    user_num = binary_entry.get()
    user_num = int(user_num)
    binary_equivalent = ("{:b}".format(user_num))
    binary_output.set("{} in binary is {}".format(user_num, binary_equivalent))

win.title("Number to Binary Converter")

win.geometry("450x75")

input_request = Label(win, text="Input a number to\nconvert to binary:")
input_request.grid(row=0, column=0)

binary_entry = Entry(win)
binary_entry.grid(row=0, column=1)

entry_confirm = Button(win, text="Submit", command=compute_binary)
entry_confirm.grid(row=0, column=2)

binary_output = StringVar()
binary_label = Label(win, textvariable=binary_output)
binary_label.grid(row=1, column=0, columnspan=3)

win.mainloop()

【讨论】:

  • 好吧,我没有意识到标签会在变量更新时更新,所以我认为它必须是命令的一部分。也只是好奇,您使用格式而不是字符串连接运行“binary_output.set”的方式有什么好处吗?
  • 使用format()更清晰易读。如果在 Python 3.6+ 中,更喜欢使用 f-string:binary_output = f"{user_num} in binary is {binary_equivalent}"
  • 您也可以将两个format() 合二为一:binary_output = "{0} in binary is {0:b}".format(user_num)。在 f-string 上类似。
猜你喜欢
  • 2016-03-22
  • 2013-12-25
  • 2022-12-08
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 2017-04-12
相关资源
最近更新 更多