我很難嘗試在tkinter中實現decdent GUI佈局。我的目標左側的佈局,但沒有得到任何進一步的比右側的佈局:如何將滾動條應用於畫布中的框架
我覺得完全失去了在所有不同的佈局管理器。這是到目前爲止我的代碼:
from Tkinter import *
class ScrolledCanvas:
def __init__(self, master, width=500, height=350):
Label(master, text="top of master frame").pack(side=TOP)
self.control=Frame(master)
self.control.pack(side=BOTTOM, fill=X, padx=2)
Label(self.control, text="bottom of master frame").pack()
self.grid = Frame(master, bd=2, bg="red")
self.canvas = Canvas(master, relief=SUNKEN, borderwidth=2,
scrollregion=('-11c', '-11c', '50c', '20c'))
self.vscroll = Scrollbar(master, command=self.canvas.yview)
self.canvas.configure(yscrollcommand=self.vscroll.set)
self.grid.pack(expand=YES, fill=BOTH, padx=1, pady=1)
self.grid.rowconfigure(0, weight=1, minsize=0)
self.grid.columnconfigure(0, weight=1, minsize=0)
self.canvas.grid(padx=1, in_=self.grid, pady=1, row=0,
column=0, rowspan=1, columnspan=1, sticky='news')
self.vscroll.grid(padx=1, in_=self.grid, pady=1, row=0,
column=1, rowspan=1, columnspan=1, sticky='news')
self.oldFill = None
self.canvas = self.fillCanvas(self.canvas)
def fillCanvas(self, theCanvas):
for i in range(10):
frame = Frame(theCanvas)
Label(frame, text="text for inner frame (%s)" % i).pack(side=TOP)
Button(frame, text="button %s.1" % i).pack(side=LEFT)
Button(frame, text="button %s.2" % i).pack(side=LEFT)
frame.pack()
return theCanvas
if __name__ == '__main__':
root = Tk()
scroll = ScrolledCanvas(root)
root.mainloop()
出於某種原因,scrollregion擴展到全尺寸,使所有的滾動條動作過時的(在這裏畫布充滿了一些矩形滾動條示例此代碼庫,一切滾動真尼斯)。我可能錯過了調整大小的根本原因,因爲大多數組件似乎完全忽略了它們的固定寬度和高度。
我在尋找如何獲得這個例子的幫助與tkinter一起工作。我知道還有其他佈局技術,我知道其他模塊提供可滾動的小部件。但除非完全無法避免,否則我真的很喜歡這個例子,至少要花費我3晚的時間......
我知道這有點舊,但你可能想看看這個:http://stackoverflow.com/questions/3085696/adding-a-scrollbar-to-a-grid-of-widgets-in- tkinter – samwyse