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

基于类的Tkinter/ttkbootstrap窗口尺寸异常及Style报错问题

解决ttkbootstrap类实现中的两个问题:窗口尺寸异常与Style初始化报错

一、继承tk.Tk导致窗口尺寸偏大的问题

原因

tk.Tk默认未处理高DPI屏幕缩放逻辑(你的屏幕设置为150%缩放),而ttkbootstrap的tb.Window已经内置了高DPI适配,所以直接继承tk.Tk会导致窗口被系统强制放大,出现尺寸异常。

解决代码

在继承tk.Tk的类中添加高DPI适配代码,手动设置缩放比例:

import tkinter as tk

class App(tk.Tk):
    def __init__(self):
        super().__init__()
        # 适配150%屏幕缩放,也可以用通用方式自动获取系统缩放比例
        self.tk.call('tk', 'scaling', 1.5)
        # 通用适配写法(自动识别系统缩放):
        # self.tk.call('tk', 'scaling', self.winfo_fpixels('1i')/72)
        self.geometry("1000x1000")

if __name__ == "__main__":
    app = App()
    app.mainloop()

二、继承tb.Window后Style初始化报错的问题

原因

tb.Window在初始化时已经自动创建并绑定了一个Style实例,重复实例化Style会导致内部资源冲突,触发报错。

解决方法

方法1:初始化时直接指定主题

在调用父类构造方法时传入主题参数,无需额外创建Style实例:

import tkinter as tk
import ttkbootstrap as tb

class App(tb.Window):
    def __init__(self):
        super().__init__(themename="terry")
        self.title("Stableford League")
        self.geometry("1000x1000")
        # 直接使用已初始化的self.style对象即可
        # 示例:self.style.configure('TLabel', font=('微软雅黑', 12))

if __name__ == "__main__":
    app = App()
    app.mainloop()

方法2:运行时切换主题

如果需要在程序启动后修改主题,直接使用已存在的self.style对象调用theme_use方法:

import tkinter as tk
import ttkbootstrap as tb

class App(tb.Window):
    def __init__(self):
        super().__init__()
        self.title("Stableford League")
        self.geometry("1000x1000")
        # 使用内置style对象切换主题
        self.style.theme_use("terry")

if __name__ == "__main__":
    app = App()
    app.mainloop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:24:59