2016-05-09 2 views
0

ich mit einer TkInter Schnittstelle ein Problem habe, wobei ich keine Scrollbar visuell befestigen sich auf ein Listbox Element erhalten - zu sehen, dieses Bild: Problem interfaceVisuell Scrollbar zu Listbox befestigen: TkInter

Hier ist der Code, der erzeugt und positionieren die Listbox & Scrollbar:

 lblpd3 = ttk.Label(mainframe,text='',font=("Helvetica", 5)) 
     lblpd3.grid(column=0, row=12, sticky=NW) 
     scltrn = Scrollbar(mainframe, orient=VERTICAL) 
     lbltrn = ttk.Label(mainframe,text='Select Transformation',font=("Helvetica", 11, "bold")) 
     lbltrn.grid(column=0, row=13, sticky=NW)  
     self.lsttrn = Listbox(mainframe,selectmode=SINGLE,exportselection=0,width=62,height=4,yscrollcommand=scltrn.set,activestyle='none',selectbackground='#4A6984',selectborderwidth=3,highlightcolor='#4A6984',highlightthickness=1) 
     scltrn.config(command=self.lsttrn.yview) 
     scltrn.grid(column=0, row=14, sticky=(N,S,E)) 
     for item in self.coord: 
      self.lsttrn.insert(END, item) 
     self.lsttrn.grid(column=0, row=14, padx=0, sticky=NW) 
     self.lsttrn.select_set(0) 

gibt es eine einfache Hack, den ich verwenden könnte die Scrollbar ein paar Pixel nach links zu schieben - Dokumentation scheint kein Polsterelement vorzuschlagen, da?

+0

rufen Sie 'mainframe.grid_columnconfigure' irgendwo in Ihrem Code auf? –

+0

@BryanOakley das ist etwa so nah: Mainframe.Grid (Spalte = 0, Zeile = 0, sticky = (N, W, E, S)) Mainframe.columnconfigure (0, Gewicht = 1) mainframe.rowconfigure (0, Gewicht = 1) – lamb

+0

Ich verstehe nicht, was "das ist ungefähr so ​​nah" - sagst du, dass du ihn nennst? Sie setzen auch scrltrn' und 'self.lsttrn' in Spalte 0, Zeile 14. Ist das beabsichtigt? –

Antwort

0

Sie können Ihr Scrollbar Widget und Ihr Listbox Widget in ihr eigenes Frame hinzufügen.

Dann fügen Sie das als eine einzige 'Einheit' hinzu.

Während ich dein ganzes Programm weiß nicht, hier ist es, was die Logik hinter dem Update sollte in etwa wie folgt aussehen:

# Declare a new Frame to hold your Listbox and Scroll wheel  
myFrame = Frame.__init__(self, parent) 

# Make sure your Scrollbar is a part of our newly created Frame "myFrame" 
scltrn = Scrollbar(myframe, orient=VERTICAL) 

# Make sure your Listbox is a part of our newly created Frame "myFrame" 
self.lsttrn = Listbox(myFrame,selectmode=SINGLE,exportselection=0,width=62,height=4,yscrollcommand=scltrn.set,activestyle='none',selectbackground='#4A6984',selectborderwidth=3,highlightcolor='#4A6984',highlightthickness=1) 

... 

#pack the Scrollbar and Listbox together in our Frame IN THIS ORDER 
self.lsttrn.pack() 
scltrn.pack() 

.... 
# Now grid our Frame containing both the Scrollwheel and Listbox to your GUI 
myFrame.grid(column=xxx,row=xxx,padx=xxx,sticky=xxx) 

Diese sollte nicht eine Kopie + Paste fix sein, aber hoffentlich verstehen Sie die Logik hinter einer Frame Schaffung Halten Sie Ihre Bildlaufleiste und Listbox, und dann Gitter dass in, anstatt beide getrennt.

Hoffe, das hilft! ~ Gunner

+0

Mit einigen Modifikationen konnte ich das perfekt funktionieren lassen, es war der 'Rahmen', den ich brauchte. Danke auch an @BryanOakley für die Hilfe – lamb

0

Zumindest ein Teil des Problems rührt von der Tatsache her, dass Sie die Bildlaufleiste und das Listenfeld in derselben Spalte platzieren. Sie müssen in verschiedenen Spalten stehen.

Eine wirklich einfache Lösung ist die Verwendung eines Rahmens, der nur Listbox und Bildlaufleiste enthält. Da Sie keine horizontale Bildlaufleiste haben, können Sie pack verwenden, um das Listenfeld und die Bildlaufleiste mit nur ein paar Zeilen Code in den Rahmen einzufügen. Sie können diesen Frame dann in einer einzelnen Spalte in seinem übergeordneten Element platzieren.