2011-10-11 25 views
18

Tuval kaydırılabilir yapmaya çalışıyorum. Ancak, tuval ile çalışmak için kaydırma çubuklarını ayarlamaya çalıştığımda, tkinter ilk olarak tuvalim için ayarladığım boyutları tamamen yok sayıyor gibi görünüyor. Bunları bir çerçeveye yerleştirmeyi, çerçeveyi dolduracak şekilde tuvali ayarlamayı ve daha sonra çerçeve boyutunu ayarlamayı denedim, ancak çerçeveyi pencereyi de dolduracak şekilde ayarlamadığım sürece aynı problemi sunuyor. . Temel olarak, üzerinde kaydırma çubukları olan sabit boyutlu bir tuval istiyorum. Benim geçerli kod (python 3.1) aşağıdaki gibidir:python ve tkinter: Tuval üzerinde kaydırma çubuklarını kullanma

from tkinter import * 
root=Tk() 
frame=Frame(root,width=300,height=300) 
frame.grid(row=0,column=0) 
canvas=Canvas(frame,bg='#FFFFFF',width=300,height=300,scrollregion=(0,0,500,500)) 
hbar=Scrollbar(canvas,orient=HORIZONTAL) 
hbar.pack(side=BOTTOM,fill=X) 
hbar.config(command=canvas.xview) 
vbar=Scrollbar(canvas,orient=VERTICAL) 
vbar.pack(side=RIGHT,fill=Y) 
vbar.config(command=canvas.yview) 
canvas.config(width=300,height=300) 
canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set) 
canvas.pack(side=LEFT,expand=True,fill=BOTH) 

root.mainloop() 

cevap

26

Sizin kaydırma çubukları bir ebeveyn değil, Tuval olarak Frame olması gerekir:

from tkinter import * 
root=Tk() 
frame=Frame(root,width=300,height=300) 
frame.grid(row=0,column=0) 
canvas=Canvas(frame,bg='#FFFFFF',width=300,height=300,scrollregion=(0,0,500,500)) 
hbar=Scrollbar(frame,orient=HORIZONTAL) 
hbar.pack(side=BOTTOM,fill=X) 
hbar.config(command=canvas.xview) 
vbar=Scrollbar(frame,orient=VERTICAL) 
vbar.pack(side=RIGHT,fill=Y) 
vbar.config(command=canvas.yview) 
canvas.config(width=300,height=300) 
canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set) 
canvas.pack(side=LEFT,expand=True,fill=BOTH) 

root.mainloop() 

bu işleri nedeni nasıl kaynaklanmaktadır pack çalışır. Varsayılan olarak, bir kabı çocuklarına tam olarak uyacak şekilde küçültmeye (veya büyütmeye) çalışacaktır. Kaydırma çubukları orijinal örnekte kanvasın çocukları olduğundan, tuval sığacak şekilde küçülür.

Kaydırma çubuklarının tuvalin içinde görünmesini istiyorsanız, hile fazladan bir çerçeve kullanmaktır. Tuval ve kaydırma çubuklarını bu iç çerçeveye yerleştirin, bordürü kenarlarından ve çerçeve için açın. Çerçevenin arka planını tuvalle aynı olacak şekilde ayarlayın ve kaydırma çubuklarının tuvalin içinde olduğu görünecektir.

+0

Neden tuvali en son olarak paketlemeliyiz? Kaydırma çubuklarından herhangi birinden önce tuvali topladığımda, yatay kaydırma çubuğunun üst üste geldiğinin farkına vardım - kiremit kullanmaya başladım, ama paketin üst üste gelmeyeceğini düşündüm. Teşekkürler – Lanfear

+1

Ve çekirdek 'scrollregion = (0,0,500,500)', onsuz çalışamazsınız! – Turtle

İlgili konular