Python Tkinter:滚动条框架窗口区域在调整主窗口大小时垂直展开

时间:2017-11-01 13:57:12

标签: python-2.7 tkinter scrollbar frame

我正在使用此代码来开发仅从此网站获取的项目。但是当调整主窗口大小时,我无法使框架窗口垂直延伸。我尝试过我的选择,但没有运气。框架窗口大小是固定的。我希望它在调整主窗口大小时动态更改。提前谢谢。

from Tkinter import *

def data():
    for i in range(50):
       Label(frame,text=i).grid(row=i,column=0)
       Label(frame,text="my text"+str(i)).grid(row=i,column=1)
       Label(frame,text="..........").grid(row=i,column=2)

def myfunction(event):
    canvas.configure(scrollregion=canvas.bbox("all"),width=200,height=200)

root=Tk()
sizex = 800
sizey = 600
posx  = 100
posy  = 100
root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy))

myframe=Frame(root,relief=GROOVE,width=50,height=100,bd=1)
myframe.place(x=10,y=10)

canvas=Canvas(myframe)
frame=Frame(canvas)
myscrollbar=Scrollbar(myframe,orient="vertical",command=canvas.yview)
canvas.configure(yscrollcommand=myscrollbar.set)

myscrollbar.pack(side="right",fill="y")
canvas.pack(side="left")
canvas.create_window((0,0),window=frame,anchor='nw')
frame.bind("<Configure>",myfunction)
data()
root.mainloop()

1 个答案:

答案 0 :(得分:0)

我并不完全是你所说的&#34;框架窗口&#34; - 这些条款是互相排斥的。框架是窗口中的窗口小部件。我假设您希望框架中的小部件可以扩展。

你有几个问题不利于你。首先,您要将画布放在一个框架中,但您还没有配置框架进行扩展。如果框架没有展开,画布也可以。

您正在使用place,但这是一个糟糕的选择IMO,尤其是当框架是root中唯一的小部件时。更好的选择是pack。由于您将其放置在10,10,我认为这意味着您需要在边缘周围设置10像素的边距。

myframe.pack(side="top", fill="both", expand=True, padx=10, pady=10)

如果您想使用place,则选项会更复杂一些。您可以使用相对宽度和高度使其与主窗口保持同步。如果组合相对宽度和固定宽度,它们是相加的。因此,相对宽度为1.0(100%),宽度为-20表示窗口的全宽减去20个像素。 (每边10个像素,因为你将它放在10,10)

myframe.place(x=10,y=10, relwidth=1.0, relheight=1.0, width=-20, height=-20)

一旦你这样做,就暴露了下一个问题:画布没有展开以适应框架。您正在使用pack这是一个不错的选择,但是您没有告诉画布填充给它的空间。

更改代码,将其添加到框架中,如下所示:

canvas.pack(side="left", fill="both", expand=True)