同一CustomTkinter GUI脚本在不同电脑显示差异求助
问题
旧笔记本上用CustomTkinter编写的GUI程序,换到新笔记本后界面显示差异极大。两台设备的Python版本、Ubuntu版本、所用库版本完全一致且已更新,旧设备分辨率1920x1080,新设备为3000x2000,调整窗口尺寸无法解决问题。已尝试重装相关库、更换Python解释器,问题仍存在。
附代码片段:
import tkinter from tkinter import ttk import customtkinter from customtkinter import * import datetime as dt from datetime import datetime customtkinter.set_appearance_mode("Dark") customtkinter.set_default_color_theme("dark-blue") class App(customtkinter.CTk): def __init__(self): # Window config root = CTk() root.title("Kassa System") root.geometry(f"{1920}x{1080}") root.resizable(False,False) root.mainloop() if __name__ == "__main__": app = App() app.mainloop()
- 旧设备预期界面:适配1920x1080分辨率的完整正常界面
- 新设备当前界面:元素缩放错乱、布局挤压/显示不全的异常界面
解决方案
这是典型的高DPI显示器适配问题,Ubuntu下tkinter(CustomTkinter基于tkinter)默认DPI缩放策略在高分辨率屏幕上失效,导致界面显示异常。可通过以下步骤解决:
- 启用tkinter高DPI支持
在初始化CustomTkinter前,添加DPI缩放配置:
import tkinter tkinter.Tk().withdraw() # 初始化隐藏根窗口以应用缩放设置 tkinter.tk.call('tk', 'scaling', 2.0) # 3000x2000分辨率建议设为2.0,可根据实际效果微调
- 修正CustomTkinter初始化逻辑
你的代码存在实例重复创建问题,继承customtkinter.CTk后不应再单独创建root = CTk(),正确写法:
class App(customtkinter.CTk): def __init__(self): super().__init__() # 调用父类初始化方法 self.title("Kassa System") self.geometry(f"{1920}x{1080}") self.resizable(False, False) # 后续界面元素代码写在这里,无需单独创建root实例 if __name__ == "__main__": app = App() app.mainloop()
- 系统层面调整DPI缩放
若代码调整无效,可在Ubuntu系统设置中操作:
- 打开「设置」→「显示」
- 将「缩放」比例调整为200%(适配3000x2000分辨率)
- 重启程序后生效
- 强制CustomTkinter遵循系统缩放
在代码开头添加环境变量配置,让程序自动读取系统缩放比例:
import os os.environ["TK_SCALE"] = "system"
内容的提问来源于stack exchange,提问作者Venom453
相关产品推荐
相关产品推荐

