Почему я получаю уродливые фигурные скобки вокруг текста в виджете метки? - Ткинтер

Я получаю фигурные скобки вокруг текста в виджете метки. Выход {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 ответа

Решение
self.label["text"] = "Total tries: 0",

В конце строки запятая. Запятая меняет значение, назначаемое self.label["text"] из строки в кортеж. Удалите запятую, и фигурные скобки будут удалены.

Я не знаю, почему это происходит; однако, когда я использовал 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))

У меня была похожая проблема, но ни одно из этих решений не помогло мне. Для тех, кто в будущем будет бороться с этим, я получаю сообщение об ошибке в тексте, содержащем пробел, например "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()
Другие вопросы по тегам