#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)