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

Python Tkinter:传递控制器至CTkFrame子类的参数错误解决问询

解决CTkFrame子类传递控制器时的参数顺序问题

问题根源:ctk.CTkFrame的__init__方法第一个参数是父容器(parent),第二个参数是可选的width(数值类型)。你之前将控制器实例放在了第二个参数位置,被当成width解析,而控制器对象的字符串表示不是合法的尺寸值,因此触发"bad screen distance"错误。

以下是两种正确实现控制器传递的方案:

方案一:使用关键字参数传递自定义参数

通过将控制器作为自定义参数放在父类参数之后,并用**kwargs接收CTkFrame的其他可选参数,确保父类初始化时参数顺序正确:

import customtkinter as ctk

# 定义HomePage子类
class HomePage(ctk.CTkFrame):
    def __init__(self, parent, controller, **kwargs):
        # 先调用父类初始化,仅传递parent和CTkFrame所需的关键字参数
        super().__init__(parent, **kwargs)
        # 保存控制器实例,供页面内方法调用
        self.controller = controller
        
        # 示例:调用控制器的方法
        # self.controller.some_method()

# App主类示例
class App:
    def __init__(self):
        # 实例化4个控制器
        self.filesystem_controller = FilesystemController()
        self.controller2 = Controller2()
        self.controller3 = Controller3()
        self.controller4 = Controller4()
        
        self.root = ctk.CTk()
        self.start_from_home_page()

    def start_from_home_page(self):
        # 实例化HomePage时,按顺序传递parent、controller,可附加CTkFrame的配置参数
        self.home_page = HomePage(
            parent=self.root,
            controller=self.filesystem_controller,
            width=800,
            height=600,
            corner_radius=10
        )
        self.home_page.pack(fill="both", expand=True)
        self.root.mainloop()

方案二:明确声明父类参数,将控制器放在末尾

如果不想使用**kwargs,可以明确列出CTkFrame的核心参数,将自定义的controller参数放在最后:

class HomePage(ctk.CTkFrame):
    def __init__(self, parent, width=200, height=200, controller=None, **kwargs):
        # 明确指定父类的width、height参数,避免顺序混淆
        super().__init__(parent, width=width, height=height, **kwargs)
        self.controller = controller

调用时通过关键字指定controller:

self.home_page = HomePage(
    self.root,
    width=800,
    height=600,
    controller=self.filesystem_controller
)

核心原则:确保传递给super().__init__的参数完全匹配CTkFrame的参数定义,自定义参数(如controller)要么放在父类参数之后,要么通过关键字形式传递,避免覆盖父类的必填/可选参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:20:07