tkinter listbox宽度会干扰滚动条



我遇到了一个问题,其中我有一个滚动框显示几行,每行约200个字符宽。我的宽度设置为125,这还不够。但是,当我撞到175左右时,我的卷轴消失了。如果我在100处或以下,则它将滚动在所有数据中滚动,但是一个很小的窗口。我希望窗口是框架的大小并滚动浏览所有代码。代码:


import Tkinter as tk
import tkFont
def view():
    data = ['|unique_id |     id |              species | sex_age |  collector |                          location |                  preparator | collection_date | entered_date | innitials |         notes', 
            '|       88 | A-1444 |      puffinus grseus |     n/a |        n/a |                               n/a |                         n/a |     13 May 2013 |  27 Apr 2017 |        EB | TL: 395mm WC:',
            '|       72 | A-1444 |      puffinus grseus |     n/a |        n/a |                               n/a |                         n/a |     13 May 2013 |  27 Apr 2017 |        EB | TL: 395mm WC:',
            '|       71 | A-1445 |        anas clypeata |       M |  G. Webber |                               n/a |                     A. Zack |     23 Oct 2013 |  26 Apr 2017 |        EB | TL: 395mm WC:',
            '|       87 | A-1445 |        anas clypeata |       M |  G. Webber |                               n/a |                     A. Zack |     23 Oct 2013 |  26 Apr 2017 |        EB | TL: 395mm WC:']
    size = [800, 600]
    obj_main_frame = tk.Tk()
    data_frame = tk.Frame(obj_main_frame, width=size[0], height=size[1])
    scrollbar_y = tk.Scrollbar(obj_main_frame, orient=tk.VERTICAL)
    scrollbar_x = tk.Scrollbar(obj_main_frame, orient=tk.HORIZONTAL)
    data_scrollable = tk.Listbox(data_frame, font=tkFont.Font(family="Courier", size=10), selectbackground="gray", selectmode=tk.SINGLE, width=150, yscrollcommand=scrollbar_y.set, xscrollcommand=scrollbar_x.set)
    scrollbar_y.config(command=data_scrollable.yview)
    scrollbar_x.config(command=data_scrollable.xview)
    obj_main_frame.grid()
    data_frame.grid_propagate(0)
    data_frame.grid(row=0, column=0, sticky='nsew')
    scrollbar_x.grid(row=1, column=0, sticky='ew')
    scrollbar_y.grid(row=0, column=1, sticky='ns')
    data_scrollable.grid(row=0, column=0, sticky='nsew')
    for i, datum in enumerate(data):
        data_scrollable.insert(tk.END, datum)
    obj_main_frame.mainloop()
    return
if __name__ == '__main__':
    view()

您在对齐中犯了2个错误。

  • 首先,在定义列表框时应删除width参数,以便可以调整到其父的大小:

    data_scrollable = tk.Listbox(data_frame, 
                                 font=tkFont.Font(family="Courier", size=10),
                                 selectbackground="gray", selectmode=tk.SINGLE,
                                 yscrollcommand=scrollbar_y.set,
                                 xscrollcommand=scrollbar_x.set)
    
  • 第二,在将列表框对齐后,您必须将非零权重给相应的行和列,以允许ListBox扩展:

    data_scrollable.grid(row=0, column=0, sticky='nsew')
    data_frame.columnconfigure(0, weight=1)
    data_frame.rowconfigure(0, weight=1)
    

请参阅:TKINTER网格管理器文档

最新更新