2016-04-25 13 views
0

Ich bin auf tkinter in Python ein Tutorial zu tun, und der aktuelle Schritt ist es, diesen Code zu schreiben:Scrollbar erscheinen in der falschen Stelle mit tkinter und Python

from tkinter import * 
win=Tk() 

lb = Listbox(win,height=3) 
lb.pack() 
lb.insert(END,"first entry") 
lb.insert(END,"second entry") 
lb.insert(END,"third entry") 
lb.insert(END,"fourth entry") 

sb=Scrollbar(win,orient=VERTICAL) 
sb.pack(side=LEFT,fill=Y) 

Anscheinend sollte die Bildlaufleiste packen nächste in das Listenfeld, sondern stattdessen es unter der Listbox. Ich habe dies in Python 2.7 und Python 3.5 mit den gleichen Ergebnissen versucht. Was mache ich falsch?

Antwort

0

Wenn Sie pack statt grid verwenden wollen, möchten Sie einen Rahmen sowohl die Listbox und die Bildlaufleiste in wie diese, packen:

fr = Frame(win) 
lb = Listbox(fr, height=3) 
lb.pack(side=LEFT, fill='both') 
lb.insert(END, "first entry") 
lb.insert(END, "second entry") 
lb.insert(END, "third entry") 
lb.insert(END, "fourth entry") 
sb=Scrollbar(fr, orient=VERTICAL) 
sb.pack(side=LEFT, fill=Y) 
fr.grid() 

Oder Sie könnten grid sie wie folgt aus:

lb = Listbox(win, height=3) 
lb.grid(row=0, column=0, sticky=(N, W, E, S)) 
lb.insert(END, "first entry") 
lb.insert(END, "second entry") 
lb.insert(END, "third entry") 
lb.insert(END, "fourth entry") 
sb=Scrollbar(win, orient=VERTICAL) 
sb.grid(row=0, column=1, sticky=(N, S)) 
0

pack verwendet eine "Box" -Metapher. Jedes Objekt wird an einer Seite des verfügbaren Platzes in der Box platziert. Wenn Sie keine Seite angeben, ist der Standardwert "top".

Wenn Sie die Listbox gepackt haben, haben Sie keine Seite angegeben, damit tkinter sie oben platziert. Stellen Sie sich vor, die Box wurde nicht halbiert: Die obere Hälfte hat die Listbox und die untere Hälfte ist leer.

Wenn Sie die Bildlaufleiste auf der linken Seite packen, geht es auf der linken Seite des leeren Teils der Box, weshalb es unterhalb der Listbox erscheint.

Sie können dieses Problem lösen, indem Sie das Listenfeld links oder rechts platzieren und dann die Bildlaufleiste links oder rechts platzieren.

Tkinter ist ein Wrapper um tcl/tk. Die endgültige Definition, wie pack Arbeiten ist auf die Tcl/Tk Manpages:

https://www.tcl.tk/man/tcl/TkCmd/pack.htm#M26