正在尝试将滚动条添加到条目网格中



我正试图将滚动条添加到带有条目网格的画布中,但我无法使用滚动条来移动网格。有没有一种方法可以像我在这里一样将滚动条连接到画布上,并让它移动网格?感谢您的帮助,我是特金特的新手。

preview = tk.Tk()
preview.title('Preview CSV')
preview.geometry('800x700')
# create the main frame
main_frame = tk.Frame(preview)
main_frame.pack(fill='both', expand=1)
# create the canvas
my_canvas = tk.Canvas(main_frame)
my_canvas.pack(side='left', fill='both', expand=1)
# add a vertical scrollbar to the canvas
vsb = ttk.Scrollbar(main_frame, orient='vertical', command=my_canvas.yview())
vsb.pack(side='right', fill='y')
# add a horizontal scrollbar to the canvas
hsb = ttk.Scrollbar(main_frame, orient='horizontal', command=my_canvas.xview())
hsb.pack(side='bottom', fill='x')
# configure the canvas
my_canvas.configure(yscrollcommand=vsb.set, xscrollcommand=hsb.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 / 120)), "units")
my_canvas.bind_all("<MouseWheel>", _on_mouse_wheel)
# create inner frame inner canvas
inner_frame = tk.Frame(my_canvas)
# add that new frame to a window in the canvas
my_canvas.create_window((0, 0), window=inner_frame, anchor='nw')
# create entry for every element in dataframe
rows, cols = table.shape
# generate table from dataframe
for r in range(rows):
for c in range(cols):
e = tk.Entry(inner_frame)
e.insert(0, table.iloc[r, c])
e.grid(row=r, column=c, pady=5, padx=5)
preview.mainloop()

Scrollbar命令必须是函数名,不带括号。我还必须将水平滚动条的容器更改为preview才能正确显示。

vsb = ttk.Scrollbar(main_frame, orient='vertical', command=my_canvas.yview ) # NOT yview()
vsb.pack(side='right', fill='y')
# added to preview to get the pack geometry to work
hsb = ttk.Scrollbar(preview, orient='horizontal', command=my_canvas.xview ) # NOT xview()
hsb.pack(side='bottom', fill='x')

最新更新