You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一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缩放策略在高分辨率屏幕上失效,导致界面显示异常。可通过以下步骤解决:

  1. 启用tkinter高DPI支持
    在初始化CustomTkinter前,添加DPI缩放配置:
import tkinter
tkinter.Tk().withdraw()  # 初始化隐藏根窗口以应用缩放设置
tkinter.tk.call('tk', 'scaling', 2.0)  # 3000x2000分辨率建议设为2.0,可根据实际效果微调
  1. 修正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()
  1. 系统层面调整DPI缩放
    若代码调整无效,可在Ubuntu系统设置中操作:
  • 打开「设置」→「显示」
  • 将「缩放」比例调整为200%(适配3000x2000分辨率)
  • 重启程序后生效
  1. 强制CustomTkinter遵循系统缩放
    在代码开头添加环境变量配置,让程序自动读取系统缩放比例:
import os
os.environ["TK_SCALE"] = "system"

内容的提问来源于stack exchange,提问作者Venom453

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 16:46:30