降低显示器分辨率导致Tkinter窗口右侧控件被截断
解决CustomTkinter仪表盘在低分辨率下控件被截断的问题
问题根源
你的代码存在两个核心问题导致低分辨率下控件被截断:
- 未给仪表盘窗口的网格列配置权重,窗口缩放时列不会自动分配可用空间;
- 使用固定宽度的空白列和固定尺寸的控件,总宽度超出低分辨率窗口的显示范围。
修复步骤
1. 给窗口列设置自适应权重
在创建dash_tk2后,给所有用到的列添加权重配置,让列随窗口宽度自动调整:
dash_tk2 = customtkinter.CTkToplevel(root_tk) dash_tk2.state("zoomed") dash_tk2.title("Dashboard") dash_tk2.configure(bg='#302E2E') # 配置所有列的权重,实现宽度自适应 for col in range(6): dash_tk2.columnconfigure(col, weight=1)
2. 替换固定宽度空白列,改用间距参数
删除所有blank_col1到blank_col6的创建代码,直接在grid布局时用padx设置控件间距,避免固定宽度占用空间:
# 原空白列布局替换为padx参数 frame_dash1.grid(row=1, column=0, sticky='ns', rowspan=2, padx=(10, 5)) frame_dash2.grid(row=1, column=1, sticky='n', rowspan=2, padx=5) frame_dash3.grid(row=1, column=2, sticky='n', rowspan=2, padx=5) frame_dash4.grid(row=1, column=3, sticky='n', rowspan=2, padx=5) frame_dash5.grid(row=1, column=4, sticky='n', rowspan=2, padx=5) frame_dash6.grid(row=1, column=5, sticky='n', padx=(5, 10))
3. 移除控件的固定宽度限制
删除标签(如lab_massflow2a、lab_dashhead6a)的width参数,让控件根据内容自适应,或用sticky='ew'让控件填充所在列空间:
# 示例:修改流量数值标签 lab_massflow2a = Label(frame_dash2a, text="19,999.999", anchor=CENTER, font='Tahoma 25 bold', fg="black", bg='#FBBDBE') lab_massflow2a.grid(row=0, column=0, pady=20, sticky='ew') # 给子框架列设置权重,让标签填充宽度 frame_dash2a.columnconfigure(0, weight=1)
4. 可选:添加滚动容器
如果调整后内容仍超出窗口,用CTkScrollableFrame包裹所有仪表盘内容,支持滚动查看:
# 创建滚动容器 scroll_frame = customtkinter.CTkScrollableFrame(master=dash_tk2, fg_color='#302E2E') scroll_frame.pack(fill="both", expand=True, padx=10, pady=10) # 将所有frame_dash1~frame_dash6的master改为scroll_frame frame_dash1 = customtkinter.CTkFrame(master=scroll_frame, corner_radius=15, fg_color="white") # 其他frame同理修改master参数
内容的提问来源于stack exchange,提问作者Muhammad Farzan Bashir
相关产品推荐
相关产品推荐

