2016-03-26 14 views
2
from tkinter import * 
from tkinter import ttk 

_root = Tk() 

_F_Cassa = PanedWindow(_root, orient = HORIZONTAL) 
_F_Cassa.pack(fill = BOTH, expand = True) 

_F_Right = Frame(_F_Cassa) 
_F_Left = Frame(_F_Cassa) 


_F_Cassa.add(_F_Left) 
_F_Cassa.add(_F_Right) 

_L_NomeS = Button(_F_Left, text = "Sinistra") 
_L_NomeS.grid(row = 0, column = 0) 


_L_NomeD = Button(_F_Right, text = "Destra") 
_L_NomeD.grid(row = 0, column = 0) 


_root.mainloop() 

Sonra standart" ile doldurulur 2 kare (Sol ve Sağ) tutan bir PanedWindow widget'ta oluşan bir uygulama oluşturmak çalışıyorumPython 3.4 Tkinter - PanedWindow karelere bir boyut vermek mümkün değildir

enter image description here

:

enter image description here

ama ne istediğim böyle bir şey şudur: "düğmeler, etiketler vb gibi aletler ... sorun bu sonucu elde ediyoruz

Çerçevelere genişlik ve yükseklik eklemeye çalıştım ancak işe yaramadı.

Sadece her şey açık: ttk modülünden widget'ları kullanmıyorum, sadece normal tk.

cevap

1

Gerçekten de, her iki çerçeve de PaneWindow alt öğeleri olduğundan, denediğiniz gibi Frame örneğinin boyutlarını değiştiremezsiniz.

sorununuzu çözmek için, paneconfig() yöntem böyle araştırmak gerekir:

_F_Cassa.paneconfig(_F_Left, width = 120, height = 400, sticky = E+W+S+N) 
_F_Cassa.paneconfig(_F_Right, width = 200, height = 400, sticky = E+W+S+N) 

Tam programı:

from tkinter import * 

_root = Tk() 
_root.title("BEGUERADJ PaneWindow") 

_F_Cassa = PanedWindow(_root, orient = HORIZONTAL) 
_F_Cassa.pack(fill = BOTH, expand = True) 
""" 
Every column and row has a "weight" grid option associated with it, 
which tells it how much it should grow if there is extra room in the 
_F_Cassa to fill. By default, the weight of each column or row is 0, 
meaning don't expand to fill space. 
""" 
_F_Cassa.grid_rowconfigure(0, weight = 1) 
_F_Cassa.grid_columnconfigure(0, weight = 1) 

# I set background colors just to highlight the results 
_F_Right = Frame(_F_Cassa, bg = "blue") 
_F_Left = Frame(_F_Cassa, bg = "yellow")  

_F_Cassa.add(_F_Left) 
_F_Cassa.add(_F_Right) 

_F_Right.grid(row = 0, column = 1) 
_F_Left.grid(row = 0, column = 0) 

_L_NomeS = Button(_F_Left, text = "Sinistra") 
_L_NomeS.grid(row = 0, column = 0) 


_L_NomeD = Button(_F_Right, text = "Destra") 
_L_NomeD.grid(row = 0, column = 0) 

# Resize frame widgets: 
_F_Cassa.paneconfig(_F_Left, width = 120, height = 400, sticky = E+W+S+N) 
_F_Cassa.paneconfig(_F_Right, width = 200, height = 400, sticky = E+W+S+N) 


_root.mainloop() 

Demo çalıştığını

enter image description here

+0

Tamam ama neden _F_Cassa.grid_rowconfigure (0, weight = 1) _F diyorsunuz _Cassa.grid_columnconfigure (0, weight = 1) Zaten paned pencerede paketi zaten kullanıyorum? – Steve

+0

Evet, her zaman 'grid_rowconfigure()' ve 'grid_columnconfigure() kullanın. Eğer kodumda uzun bir yorum olarak açıklamamın sebebi olan çocuk widget'ları için daha sonra' sticky 'kullanacaksanız. Bu, pack() 'düzen yöneticisini çelişir mi? Hayır, hiç de değil. Bunları karıştırmak için tam hakka sahibiz ve bu bağlam bir haktır çünkü 'pack()' '_root' ** içerisindeki _F_Cassa'yı ** '' ('' grid()' yöneticisi (ve dolayısıyla 'grid_rowconfigure()') ve 'grid_columnconfigure()'), içerdeki widget'ları göreceli olarak \ _F_Cassa'ya yönetmek için kullanılır. @Steve –