【发布时间】:2023-04-08 22:39:01
【问题描述】:
我只是在尝试滚动条小部件,但遇到了一些奇怪的事情。我看到了这个关于如何使整个程序可滚动的视频,我只是对其进行了调整以动态更新画布的滚动区域,以便滚动条适应变化。一件奇怪的事情是滚动条在被激活之前可以向上滚动并将内容向下推。如果你点击向上箭头,它会将内容推到一边,我不希望这样。此外,如果您打包几帧,足以激活滚动条,它就不会这样做。我怎样才能解决这个问题?我的代码:
from tkinter import *
from tkinter import ttk
available_row = 1
root = Tk()
root.title("Scrollbar!")
root.geometry("500x320")
my_canvas = Canvas(root)
def add_fr_prg():
global available_row
lbl_fr = LabelFrame(second_frame, text=f"I am in row: {available_row}", padx=5, pady=5)
prg = ttk.Progressbar(lbl_fr, length=300, orient=HORIZONTAL, mode="indeterminate")
prg.pack()
prg.start(9)
lbl_fr.grid(row=available_row, column=0, columnspan=2, padx=5, pady=3)
available_row += 1
def scroll_up_down(event):
my_canvas.yview_scroll(-1 * (int(event.delta / 120)), "units")
my_scrollbar = ttk.Scrollbar(root, orient=VERTICAL, command=my_canvas.yview)
my_canvas.configure(yscrollcommand=my_scrollbar.set)
my_canvas.bind_all("<MouseWheel>", scroll_up_down)
my_canvas.pack(side=LEFT, fill=BOTH, expand=1)
second_frame = Frame(my_canvas)
my_canvas.create_window(0, 0, window=second_frame, anchor='nw')
second_frame.bind('<Configure>', lambda e: my_canvas.configure(scrollregion=my_canvas.bbox('all')))
my_scrollbar.pack(side=RIGHT, fill=Y)
add_btn = ttk.Button(second_frame, text="Add!", width=30, takefocus=False, command=add_fr_prg)
add_btn.grid(row=0, column=0, padx=66)
root.mainloop()
【问题讨论】:
标签: python python-3.x tkinter tkinter-canvas ttk