2017-04-26 2 views
0

Ich habe ein Problem, wo ich ein Bildlauffeld habe mit ein paar Zeilen jede Zeile ist etwa 200 Zeichen breit. Ich hatte die Breite auf 125 eingestellt, was nicht genug war. Wenn ich es jedoch über 175 stoße, verschwinden meine Bildlaufleisten. Wenn ich es bei oder unter 100 habe, scrollt es durch alle Daten, ist aber ein sehr kleines Fenster. Ich möchte, dass das Fenster die Größe des Rahmens hat und durch den gesamten Code scrollt. Code:Tkinter Listbox Breite interferiert mit Bildlaufleisten


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

Antwort

1

Sie haben zwei Fehler in Ihrer Ausrichtung.

  • Zunächst sollten Sie die width Argument entfernen, wenn Ihr listbox zu definieren, so dass es auf die Größe des übergeordneten einstellen:

    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) 
    
  • Zweitens, nachdem das Listenfeld in seinem Rahmen auszurichten, Sie müssen nicht Null Gewichte auf die entsprechende Zeile und Spalte geben, die listbox zu ermöglichen, zu erweitern:

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

Siehe: Tkinter Grid Manager documentation

Verwandte Themen