为什么我在标签小部件中看到难看的花括号? - Tkinter

5 投票
3 回答
5480 浏览
提问于 2025-04-17 07:16

我在我的标签控件中看到文本周围有大括号。输出的结果是 {Total tries: 0},而不是 Total tries: 0

下面是我代码的简化版本:

class Cell:
    def check(self):
        mem.tries += 1
        mem.update_tries()

class Memory(Frame):
    def __init__(self, master):
        super(Memory, self).__init__(master)
        self.grid()
        self.create_widgets()
        self.tries = 0

    def create_widgets(self):
        self.label = Label(self)
        self.label["text"] = "Total tries: 0",
        self.label["font"] = ("Helvetica", 11, "italic")
        self.label.grid(row = 7, columnspan = 7, pady = 5)

    def update_tries(self):
        self.label["text"] = "Total tries: " + str(self.tries)

root = Tk()
root.title("Memory")
root.geometry("365x355")
mem = Memory(root)
root.mainloop()

3 个回答

0

我遇到过类似的问题,但这些解决办法对我都没用。对于将来有同样困扰的人,我在处理包含空格的文本时会出错,比如 "Health and Fitness",它会被打印成 {Health and Fitness}

对我来说,解决办法是不要像这样创建标签:

score = 25
tk.Label(container, text=("Health and Fitness",score)).pack()

而是要像这样

toPrint = "Health and Fitness" + str(score)
tk.Label(container, text=toPrint).pack()
0

我不知道为什么会发生这种情况;不过,当我使用Tkinter时,我总是通过StringVar或者config方法来更新文本。这里有一些示例页面。

使用StringVar的示例:

# in class Memory

def create_widgets(self):
  self.labelText = StringVar()
  self.label = Label(self, textvariable = self.labelText)
  ... rest of method ...

def update_tries(self):
  self.labelText.set("Total tries: " + str(self.tries))
9
self.label["text"] = "Total tries: 0",

这一行的末尾有一个逗号。这个逗号把赋值给 self.label["text"] 的内容从一个字符串变成了一个元组。去掉这个逗号后,大括号也会被去掉。

撰写回答