Python tKinter如何实现添加滚动条时控件不向左偏移
Tkinter滚动条区域内容居中解决方案
核心修改点
- 将画布中嵌入的frame锚点从左上角
nw改为顶部居中n,锚点坐标对应frame的顶部中点 - 监听画布尺寸变化事件,动态调整frame的横坐标为画布宽度的1/2,保证始终水平居中
- 同时保留原有的滚动区域更新逻辑,不影响滚动功能
修改后完整代码
import tkinter as tk root = tk.Tk() root.geometry("600x400") my_canvas = tk.Canvas(root) my_canvas.pack(side="left", fill="both", expand=1) my_scrollbar = tk.Scrollbar(root, orient="vertical", command=my_canvas.yview) my_scrollbar.pack(side="right", fill="y") my_canvas.configure(yscrollcommand=my_scrollbar.set) my_frame = tk.Frame(my_canvas) for i in range(100): my_label = tk.Label(my_frame, text="Label") my_label.pack() # 存储嵌入的frame的窗口ID,锚点改为顶部居中n frame_win_id = my_canvas.create_window((0, 0), window=my_frame, anchor="n") def update_canvas(e): # 更新滚动区域 my_canvas.configure(scrollregion=my_canvas.bbox("all")) # 动态设置frame的x坐标为画布宽度的一半,实现水平居中 my_canvas.itemconfig(frame_win_id, x=e.width / 2) # 绑定画布尺寸变化事件 my_canvas.bind("<Configure>", update_canvas) root.mainloop()
内容的提问来源于stack exchange,提问作者javiloz1604
相关产品推荐
相关产品推荐

