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

时间:2021-04-25 01:51:59

标签: python-3.x tkinter tkinter-canvas tkinter-entry

我正在尝试将滚动条添加到带有条目网格的画布,但我无法让滚动条移动网格。有没有办法像我在这里那样将滚动条连接到画布并让它移动网格?感谢任何帮助,我是 Tkinter 的新手。

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()

1 个答案:

答案 0 :(得分:0)

滚动条命令必须是函数名,不带括号。我还必须将水平滚动条的容器更改为 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')
相关问题