Почему я получаю квадратные скобки между текстом при попытке напечатать какой-нибудь текст на холсте Tkinter? - PullRequest
0 голосов
/ 24 апреля 2019

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

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

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. Эти фигурные скобки выглядят довольно странно. Может кто-нибудь, пожалуйста, помогите мне решить эту ошибку?

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

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

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

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

0 голосов
/ 24 апреля 2019

Этот код устанавливает 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 преобразует список в строку, что он должен сделать перед добавлением его на холст, он добавляет фигурные скобки, чтобы сохранить его свойства, подобные списку.

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

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