Я пытаюсь сделать несколько гиперссылок, используя список URL.Я сделал это с помощью canvas.create_window () для каждой гиперссылки url в канве и поместил этот холст в столбец сетки 1, чтобы он располагался в центре окна.
def display_result(link_url_list, headline_text_list):
result_window = Tk()
result_window.title("Filter result")
result_window.geometry("800x800")
canvas = Canvas(result_window)
ver_bar = Scrollbar(result_window, orient='vertical', command=canvas.yview)
hor_bar = Scrollbar(result_window, orient='horizontal', command=canvas.xview)
for i in range(len(headline_text_list)):
hyperlink = Label(canvas, text=headline_text_list[i], font="Helvetica 10 bold", fg="blue", cursor="hand2")
article_url = link_url_list[i]
hyperlink.bind("<Button-1>", lambda event, article_url=article_url: webbrowser.open(article_url))
hyperlink.pack()
canvas.create_window((0, i * 30), anchor='center', window=hyperlink, height=20)
canvas.configure(scrollregion=canvas.bbox('all'), yscrollcommand=ver_bar.set)
canvas.configure(scrollregion=canvas.bbox('all'), xscrollcommand=hor_bar.set)
result_window.grid_columnconfigure(0, weight=1)
result_window.grid_columnconfigure(1, weight=1)
result_window.grid_columnconfigure(2, weight=1)
result_window.grid_rowconfigure(0, weight=1)
result_window.grid_rowconfigure(1, weight=1)
canvas.grid(row=0, column=1, columnspan=3, rowspan=2, sticky="nsew")
hor_bar.grid(row=1, column=0, columnspan=3, sticky=E+W+S)
ver_bar.grid(row=0, column=2, rowspan=2, sticky=N+S+E)
Но холст результата не занимает столбец 0, а некоторые слова в длинном предложении в столбце 1 «скрыты» за пустым пространством столбца 0. Я знаю в ответе на вопрос
Как разрешить виджету в Tkinter охватывать несколько столбцов в обратном направлении?
говорит, что размещение виджета в столбце 0 и расширение его вперед имеет тот же эффект, что и охват назад, но когда я попробовал это, холст фиксируется на левой стороне окна и не расширяется при изменении размера окна.(что и понятно, поскольку холст находится в столбце 0, самом левом конце окна)
Я также пытался
def on_canvas_configure(event):
canvas.configure(width=event.width, height=event.height)
canvas.bind("<Configure>", on_canvas_configure)
, но это тоже не помогло.Как мне исправить эту проблему?