canvas 和框架的宽度不起作用。 Canvas 框架内的滚动条不起作用。整个框架不可见

Width of canvas and of frame is not working. Canvas with a scrollbar inside a frame is not working. The whole frame is not visible

我想要 window 左侧的 width=320 框架和 canvas ,我必须在其中显示文件中的数据。 canvas 上会有许多小部件(数据),所以我也想在其中使用滚动条。 当我使用 pack() 时,window 上没有显示任何内容——甚至 bg="天蓝色" 的框架也不可见。请告诉我怎么了。我已经尝试了 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,width=320,bg='sky blue',scrollregion=(30,0,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),bg='sky blue',fg='black')
canvas.create_window(10,175, window=FirstName)

MiddleName = Label(canvas, text="Middle name: ",font=(12),bg='sky blue',fg='black')
canvas.create_window(10,195, window=MiddleName)

LastName = Label(canvas, text="Last name: ",font=(12),bg='sky blue',fg='black')
canvas.create_window(10,215, window=LastName)

NickName = Label(canvas, text="Nick name: ",font=(12),bg='sky blue',fg='black')
canvas.create_window(10,235, window=NickName)

Note = Label(canvas, text="Note: ",font=(12),bg='sky blue',fg='black')
canvas.create_window(10,855, window=Note)


root.mainloop()

尝试为框架指定高度,canvas 这可能对你有用 请注意,frame 和 canvas 的单位不同,这意味着 宽度为 320 的框架小于宽度为 320 的 canvas 由于单位不同。类似的,height

也是这样

tkinter的笔记可以访问:

https://mycodenotein.netlify.app

当您将滚动条装入 canvas 时,canvas 将缩小以适合滚动条。几乎没有理由将滚动条放在 canvas 内,因为它会覆盖边缘上的任何对象。在大多数情况下,canvas 和滚动条需要有一个共同的父级。

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

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