画布和框架的宽度不起作用框架内具有滚动条的画布不起作用整个框架不可见

问题描述

我想要在窗口左侧有一个宽度= 320的框架,并带有一个画布,其中必须显示文件中的数据。 该画布上将有许多小部件(数据),因此我也想在其中使用滚动条。 当我使用pack()时,窗口上没有任何显示-甚至看不到带有bg =“ sky blue”的框架。请告诉我怎么了。我已经尝试过fill = BOTH,expand = True等的所有组合。等等,但是我无法做到我想要的。


root = Tk()
root.state('zoomed')   #zooms the screen to maxm whenever executed
root.geometry('550x650')
root.minsize(550,650)

#Frame inside root
ContactDetails_frame = Frame(root,width=320,bg='sky blue',bd=2,relief=RIDGE)
ContactDetails_frame.pack(side=LEFT,fill=BOTH)

#Canvas inside the frame
canvas = Canvas(ContactDetails_frame,scrollregion=(30,1000,1000))
canvas.pack(fill=BOTH,expand=True)

#Vertical scrollbar for canvas
scrollbar = Scrollbar(canvas,orient=VERTICAL)
scrollbar.pack(side=RIGHT,fill=Y,expand=True)

#Attach scrollbar to canvas
canvas.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=canvas.yview)

#Here are the widgets
FirstName = Label(canvas,text="First name: ",font=(12),fg='black')
canvas.create_window(10,175,window=FirstName)

MiddleName = Label(canvas,text="Middle name: ",195,window=MiddleName)

LastName = Label(canvas,text="Last name: ",215,window=LastName)

NickName = Label(canvas,text="Nick name: ",235,window=NickName)

Note = Label(canvas,text="Note: ",855,window=Note)


root.mainloop()

解决方法

将滚动条包装在画布中时,画布将收缩以适合滚动条。几乎没有理由将滚动条放在画布内,因为它将覆盖边缘上的所有对象。在大多数情况下,画布和滚动条需要具有共同的父代。

canvas = Canvas(ContactDetails_frame,...)
scrollbar = Scrollbar(ContactDetails_frame,...)

scrollbar.pack(side="right",fill=Y)   
canvas.pack(side="left",fill=BOTH,expand=True)
,

尝试为可能要工作的框架和画布增加高度 请注意,框架和画布的单位不同,这意味着 宽度为320的框架小于宽度为320的画布 由于单位不同。相似,高度也是如此

有关tkinter的笔记,您可以访问:

https://mycodenotein.netlify.app