2012-08-08 1314 views
0

我用Python编写了一个程序。但我想知道是否可能有更短的方式做到这一点。特别是关于“画布”,“框架”,“标签框架”和“标签”,是否有任何其他方式来自动制作“滚动区域”(而不是我写的,如果可能的话在Tkinter自然的方式)在Tkinter中的画布scrollregion?

这里是代码:

from tkinter import * 
dict = {} 
Liste = ["bir","iki","üç","4",5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18] 
a = 1 

####### ekleme basi ################################################## 
pencere = Tk() 
pencere.geometry("{0}x{1}".format(100, 100)) 

labelFrame = LabelFrame(pencere, width = 100, height = 100) 
labelFrame.pack(side="left",fill=BOTH) 
canvas = Canvas(labelFrame,relief=SUNKEN) 
#canvas.config(scrollregion=(0,0,300,1000)) # halloldu =) 

scrollbar = Scrollbar(labelFrame) 
scrollbar.config(command=canvas.yview) 
canvas.config(yscrollcommand=scrollbar.set) 
scrollbar.pack(side="right",fill=Y) 
canvas.pack(side="left",expand=YES,fill=BOTH) 

frame = Frame(canvas,width=100,height=100) 
frame.pack(side="top",fill=BOTH) 
canvas.create_window(0,0,window=frame, anchor="nw") 
####### ekleme sonu ################################################## 

bas = [0, 0, 0, 100] 
for i in Liste: 
    dict["a%s"%a] = Label(frame, text=i) # "frame" ekledim 
    dict["a%s"%a].grid(row=a) 
    canvas["scrollregion"] = "%d %d %d %d" %(bas[0], bas[1], bas[2], bas[3]) 
    bas[3] += 16 # "scrollregion" i dinamik olarak arttir (degistirebilirsiniz) 
    a += 1 


mainloop() 

注:英语是我的第二语言,我不太清楚,所以对不起。

回答

3

设置滚动区域中的典型方法是将其设置为一切的边界框是在画布上,其可以与bbox方法进行检索,给它文字串"all"

canvas.configure(scrollregion = canvas.bbox("all")) 
+0

的问题是:你什么时候从canvas.bbox(“all”)获得一些东西。如果你打电话过早,你只会得到错误的价值观。 – jms 2016-06-29 17:12:35