Как заставить холст в сетке занимать предшествующие столбцы - PullRequest
0 голосов
/ 30 марта 2019

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

, но это тоже не помогло.Как мне исправить эту проблему?

...