2017-04-26 54 views
0

我有一个问题,我有一个滚动框显示几行,每行约200个字符宽。我有宽度设置为125这是不够的。但是,当我撞过它大约175我的滚动条消失。如果我将它的值设置为100或更低,它将滚动浏览所有的数据,但这是一个非常小的窗口。我希望窗口成为框架的大小并滚动浏览所有代码。 代码:Tkinter Listbox宽度干扰滚动条


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

回答

1

你在你对准了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) 
    
  • 其次,在其框架对齐列表框后,你必须到相应的行和列给非零的权重,以允许列表框扩展:

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

参见:Tkinter Grid Manager documentation