Почему я получаю скобки между текстом при попытке напечатать некоторый текст в Tkinter canvas?

#python #python-3.x #dataframe #tkinter #tkinter-canvas

#python #python-3.x #dataframe #tkinter #tkinter-canvas

Вопрос:

Я пытаюсь напечатать некоторый текст на Tkinter canvas вместе с изображением, которое работает нормально. Но, к сожалению, некоторые фигурные скобки также печатаются на экране без их использования где-либо в инструкции print. Я извлекаю некоторую часть текста из фрейма данных и сохраняю его в переменной перед печатью на экране.

Мой код выглядит следующим образом:

 best_batsmen = dataset.loc[dataset.loc[dataset['Innings']>=15,'Average'].idxmax(),'Names']
message = ("The best Batsman of the Tournament could possibly be: ",best_batsmen)
canvas_width = 500
canvas_height = 500
root = Toplevel()
root.geometry("700x600")
root.title("New Window")
canvas = Canvas(root, width=canvas_width, height=canvas_height)
canvas.create_text(1, 10, anchor=W, text=message)
img = ImageTk.PhotoImage(Image.open("virat.jpeg"))
canvas.create_image(0, 20, anchor=NW, image=img)
canvas.image = img
canvas.pack()
root.mainloop()
  

Когда я запускаю приведенный выше код, он печатает {The best Batsmen of the Tournament could possibly be:} {Virat Kohli} вместо The best Batsmen of the Tournament could possible be: Virat Kohli . Эти фигурные скобки выглядят довольно странно. Кто-нибудь, пожалуйста, может помочь мне решить эту ошибку?

Комментарии:

1. Вам нужно, чтобы message это была строка, а не кортеж: "The best..." best_batsmen возможно.

Ответ №1:

Это либо в наборе, либо в словаре в вашем наборе данных. Просто преобразуйте его в строку перед отображением:

 string = ''.join(str(l) for l in list(name))
  

Это сработает для любого количества элементов в наборе.

Ответ №2:

Этот код устанавливает message в кортеж:

 message = ("The best Batsman of the Tournament could possibly be: ",best_batsmen)
  

При этом кортеж используется в качестве значения text атрибута без преобразования его в строку:

 canvas.create_text(1, 10, anchor=W, text=message)
  

Это значение передается базовому интерфейсу tcl в виде списка (с точки зрения Tcl). Когда tcl преобразует список в строку, что он должен сделать перед добавлением его в canvas, он добавляет фигурные скобки, чтобы сохранить его свойства, подобные списку.

Решение простое: не передавайте списки или кортежи функциям tkinter. Сначала явно преобразуйте их в строку:

 message = " ".join(message)
canvas.create_text(1, 10, anchor=W, text=message)