Tkinter,Canvas拒绝展开或缩小窗口大小

问题描述:

我试图根据窗口大小使用画布展开和缩小,并根据需要使用滚动条。我还没有添加水平滚动条,但它不是水平或垂直缩放,而是固定保持在任意大小。Tkinter,Canvas拒绝展开或缩小窗口大小

我有2帧的原因是因为内框滚动水平,因为我有几个画布必须滚动在一起,只有其中一个也滚动垂直。

root = Tk() 
maxtick = 1000 

frame = ttk.Frame(root)  # , padding="3 3 12 12") 
frame.grid(column=0, row=0, sticky=(N, W, E, S)) 
frame.columnconfigure(0, weight=1) 
frame.rowconfigure(0, weight=1) 

inner_frame = ttk.Frame(frame) 
inner_frame.grid(column=0, row=0, sticky=(N, W, E, S)) 
inner_frame.columnconfigure(0, weight=1) 
inner_frame.rowconfigure(0, weight=1) 

# Primary canvas (inner_frame) 
canvas = Canvas(inner_frame, bg='#FFF', width=maxtick, 
       scrollregion=(0, 0, maxtick, 16 * (128 + 1 + 1))) 
canvas.grid(column=0, row=0, sticky=(N, W, E, S)) 

for y in range(1, 128 + 1 + 1): 
    canvas.create_line(0, 16 * y - 1, maxtick, 16 * y - 1) 

# Vertical scrollbar 
vbar = ttk.Scrollbar(frame, orient=VERTICAL, command=canvas.yview) 
vbar.grid(column=1, row=0, sticky=(N, W, E, S)) 
canvas.configure(yscrollcommand=vbar.set) 

# canvas.create_line(10, 10, 200, 50) 

root.mainloop() 

您还需要配置最外层的网格布局。

... 
root = Tk() 
root.columnconfigure(0, weight=1) 
root.rowconfigure(0, weight=1) 
... 

BTW,如何使用packexpand=1, fill=BOTH

root = Tk() 
frame = ttk.Frame(root) 
frame.pack(expand=1, fill=BOTH) 

maxtick = 1000 

inner_frame = ttk.Frame(frame) 
inner_frame.pack(expand=1, fill=BOTH, side=LEFT) 

# Primary canvas (inner_frame) 
canvas = Canvas(inner_frame, bg='#FFF', width=maxtick, 
       scrollregion=(0, 0, maxtick, 16 * (128 + 1 + 1))) 
canvas.pack(expand=1, fill=BOTH) 

for y in range(1, 128 + 1 + 1): 
    canvas.create_line(0, 16 * y - 1, maxtick, 16 * y - 1) 

# Vertical scrollbar 
vbar = ttk.Scrollbar(frame, orient=VERTICAL, command=canvas.yview) 
vbar.pack(fill=Y, side=LEFT) 
canvas.configure(yscrollcommand=vbar.set) 

root.mainloop() 
+0

会有多个帆布垂直叠放,还是合适的包? – jimbo1qaz 2014-10-18 01:50:11

+0

@ jimbo1qaz,是的,这是因为你已经使用过帧。 – falsetru 2014-10-18 01:52:11

+0

@ jimbo1qaz:如果您在一个框架内垂直或水平堆叠小部件,pack往往是最佳选择。网格工作得很好,但它需要几行代码才能使用包。 – 2014-10-18 15:02:23