Python Tkinter Scrollbar 在使用 Scrollbar 时向上而不是向下平移也有对齐问题
Python Tkinter Scrollbar panning upwards instead of downwards also alignment issue while using Scrollbar
我正在使用 TKinter 为我的 python 应用程序构建 GUI。
我想在主屏幕上添加一个滚动条,因为我有很多数据要显示但很少space。
目前我使用这些行:
root=Tk()
root.state("zoomed")
#...rest of the code... (Relevant parts mentioned below:)
root.mainloop()
最大限度地利用可用的屏幕space,但即使这样对我来说也不行。
这是我用来添加滚动条的 John Elder(Codemy.com 的首席执行官)的 code:
# Create A Main Frame
main_frame = Frame(root)
main_frame.pack(fill=BOTH, expand=1)
# Create A Canvas
my_canvas = Canvas(main_frame)
my_canvas.pack(side=LEFT, fill=BOTH, expand=1)
# Add A Scrollbar To The Canvas
my_scrollbar = ttk.Scrollbar(main_frame, orient=VERTICAL, command=my_canvas.yview)
my_scrollbar.pack(side=RIGHT, fill=Y)
# Configure The Canvas
my_canvas.configure(yscrollcommand=my_scrollbar.set)
my_canvas.bind('<Configure>', lambda e: my_canvas.configure(scrollregion = my_canvas.bbox("all")))
def _on_mouse_wheel(event):
my_canvas.yview_scroll(-1 * int((event.delta / 100)), "units")
my_canvas.bind_all("<MouseWheel>", _on_mouse_wheel)
# Create ANOTHER Frame INSIDE the Canvas
encompasser = Frame(my_canvas, bg=mainbg)
# Add that New frame To a Window In The Canvas
my_canvas.create_window((0,0), window=encompasser, anchor="n")
#Adding the scroll bar part ends here...
encompasser=Frame(my_canvas,bg=mainbg, borderwidth=0)
encompasser.pack(fill=BOTH, expand=1)
#second_frame = LabelFrame(my_canvas, borderwidth=0, bg=mainbg).pack()
header=LabelFrame(encompasser,bg=mainbg, borderwidth=0)
header.pack()
greet=Label(header,font="Arial 20",text="Prescription Generator V4.0.0", bg=mainbg, fg="black").pack(pady=10)
utilitiesF=LabelFrame(header,bg=mainbg, borderwidth=0)
utilitiesF.pack()
settingLF=LabelFrame(utilitiesF,bg=mainbg, borderwidth=0)
megaF=LabelFrame(encompasser,bg=mainbg, borderwidth=0)
megaF.pack()
dateF=LabelFrame(utilitiesF, padx=10, pady=10, bg=mainbg, borderwidth=0)
dateF.grid(row=0, column=1)
date=Label(dateF,font="Arial 14",text="Date:", bg=mainbg).grid(row=0,column=0, sticky=E)
edate=Entry(dateF, width=9,borderwidth=0, font="Arial 14")
edate.insert(0,today)
edate.grid(row=0, column=1, padx=5)
my_tree_frame=LabelFrame(header, padx=10, pady=10, bg=subbg, borderwidth=0)
my_tree_frame.pack()
Dormant scrollbar added
将滚动条添加到 canvas 并在框架中打开 canvas 后,我将东西添加到名为“encompasser”的框架中。
问题:当我单击按钮时:显示数据库,打开以下树视图:
Treeview opens up, moving the rest of my project down
当我的项目的其余部分向下移动时,滚动条只是不向下滚动。
Scroll Bar stuck and not working on moving it up or down
我在这里做错了什么?
我知道一种解决方案是将树视图小部件作为 Toplevel() 打开,但我希望它在同一页面内打开。请回答我的问题,谢谢!
还有一件事:当我尝试将包含我所有小部件的框架打包到 encompasser 中时,整个对齐方式变得一团糟。整个项目向左移动,从美学上看并不好看。
Showing what happened when I removed the frame called "encompasser"
首先,您使用相同的变量名称创建了另一个框架 encompasser
:
encompasser=Frame(my_canvas,bg=mainbg, borderwidth=0)
encompasser.pack(fill=BOTH, expand=1)
应删除以上两行。
其次,您应该在调整内部框架 encompasser
大小时更新 scrollregion
,而不是 my_canvas
。
删除行:
my_canvas.bind('<Configure>', lambda e: my_canvas.configure(scrollregion = my_canvas.bbox("all")))
并在创建 encompasser
后添加以下行:
encompasser.bind('<Configure>', lambda e: my_canvas.configure(scrollregion=my_canvas.bbox("all")))
我正在使用 TKinter 为我的 python 应用程序构建 GUI。
我想在主屏幕上添加一个滚动条,因为我有很多数据要显示但很少space。 目前我使用这些行:
root=Tk()
root.state("zoomed")
#...rest of the code... (Relevant parts mentioned below:)
root.mainloop()
最大限度地利用可用的屏幕space,但即使这样对我来说也不行。
这是我用来添加滚动条的 John Elder(Codemy.com 的首席执行官)的 code:
# Create A Main Frame
main_frame = Frame(root)
main_frame.pack(fill=BOTH, expand=1)
# Create A Canvas
my_canvas = Canvas(main_frame)
my_canvas.pack(side=LEFT, fill=BOTH, expand=1)
# Add A Scrollbar To The Canvas
my_scrollbar = ttk.Scrollbar(main_frame, orient=VERTICAL, command=my_canvas.yview)
my_scrollbar.pack(side=RIGHT, fill=Y)
# Configure The Canvas
my_canvas.configure(yscrollcommand=my_scrollbar.set)
my_canvas.bind('<Configure>', lambda e: my_canvas.configure(scrollregion = my_canvas.bbox("all")))
def _on_mouse_wheel(event):
my_canvas.yview_scroll(-1 * int((event.delta / 100)), "units")
my_canvas.bind_all("<MouseWheel>", _on_mouse_wheel)
# Create ANOTHER Frame INSIDE the Canvas
encompasser = Frame(my_canvas, bg=mainbg)
# Add that New frame To a Window In The Canvas
my_canvas.create_window((0,0), window=encompasser, anchor="n")
#Adding the scroll bar part ends here...
encompasser=Frame(my_canvas,bg=mainbg, borderwidth=0)
encompasser.pack(fill=BOTH, expand=1)
#second_frame = LabelFrame(my_canvas, borderwidth=0, bg=mainbg).pack()
header=LabelFrame(encompasser,bg=mainbg, borderwidth=0)
header.pack()
greet=Label(header,font="Arial 20",text="Prescription Generator V4.0.0", bg=mainbg, fg="black").pack(pady=10)
utilitiesF=LabelFrame(header,bg=mainbg, borderwidth=0)
utilitiesF.pack()
settingLF=LabelFrame(utilitiesF,bg=mainbg, borderwidth=0)
megaF=LabelFrame(encompasser,bg=mainbg, borderwidth=0)
megaF.pack()
dateF=LabelFrame(utilitiesF, padx=10, pady=10, bg=mainbg, borderwidth=0)
dateF.grid(row=0, column=1)
date=Label(dateF,font="Arial 14",text="Date:", bg=mainbg).grid(row=0,column=0, sticky=E)
edate=Entry(dateF, width=9,borderwidth=0, font="Arial 14")
edate.insert(0,today)
edate.grid(row=0, column=1, padx=5)
my_tree_frame=LabelFrame(header, padx=10, pady=10, bg=subbg, borderwidth=0)
my_tree_frame.pack()
Dormant scrollbar added
将滚动条添加到 canvas 并在框架中打开 canvas 后,我将东西添加到名为“encompasser”的框架中。
问题:当我单击按钮时:显示数据库,打开以下树视图: Treeview opens up, moving the rest of my project down
当我的项目的其余部分向下移动时,滚动条只是不向下滚动。 Scroll Bar stuck and not working on moving it up or down 我在这里做错了什么? 我知道一种解决方案是将树视图小部件作为 Toplevel() 打开,但我希望它在同一页面内打开。请回答我的问题,谢谢!
还有一件事:当我尝试将包含我所有小部件的框架打包到 encompasser 中时,整个对齐方式变得一团糟。整个项目向左移动,从美学上看并不好看。
Showing what happened when I removed the frame called "encompasser"
首先,您使用相同的变量名称创建了另一个框架 encompasser
:
encompasser=Frame(my_canvas,bg=mainbg, borderwidth=0)
encompasser.pack(fill=BOTH, expand=1)
应删除以上两行。
其次,您应该在调整内部框架 encompasser
大小时更新 scrollregion
,而不是 my_canvas
。
删除行:
my_canvas.bind('<Configure>', lambda e: my_canvas.configure(scrollregion = my_canvas.bbox("all")))
并在创建 encompasser
后添加以下行:
encompasser.bind('<Configure>', lambda e: my_canvas.configure(scrollregion=my_canvas.bbox("all")))