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

Tkinter跨类调用Combobox值报错:'int'对象无对应属性

问题分析与解决方法

嘿,我来帮你理清这个问题的根源,以及怎么修复它~

核心错误原因

你遇到的 'int' object has no attribute 'comboBoxDiamUnitString' 错误,主要来自两个关键问题:

1. GPIO回调函数的参数误解

GPIO的add_event_detect方法触发回调时,默认会把触发事件的引脚编号(整数类型)作为参数传入回调函数。但你在interrupt函数里把这个参数命名为controller,导致你实际操作的是一个整数(引脚号),而不是App类的实例,自然会报错“int对象没有xxx属性”。

2. 跨页面变量访问的方式错误

即使回调参数正确,你也不能直接通过controller.comboBoxMetroVueltaString访问StartPage的Combobox值——因为controller是App类的实例,而comboBoxDiamUnitString是StartPage类实例的属性。你需要通过App类中存储所有页面实例的frames字典,来获取StartPage的实例,再访问它的变量。

另外,你的PageOne类的__init__方法还遗漏了调用父类Frame的初始化方法,这会导致Frame的基础功能异常,必须补上。

修复后的代码示例

下面是调整后的关键代码部分:

修复PageOne类

class PageOne(Frame):
    def __init__(self, parent, controller):
        # 必须调用父类Frame的初始化方法,完成Frame基础配置
        Frame.__init__(self, parent)
        self.controller = controller  # 保存controller引用,方便后续跨页面访问
        self.i = 10
        GPIO.setmode(GPIO.BOARD)
        GPIO.setup(13,GPIO.IN,pull_up_down=GPIO.PUD_UP)
        # 回调函数无需手动传controller,我们已在__init__中保存了引用
        GPIO.add_event_detect(13, GPIO.FALLING, callback=self.interrupt, bouncetime=300)
    
    def interrupt(self, pin):  # 参数pin是触发的引脚号,保留参数位置即可
        # 通过controller的frames字典,获取StartPage的实例
        start_page = self.controller.frames[StartPage]
        # 获取Combobox的选中值
        selected_unit = start_page.comboBoxDiamUnitString.get()
        
        # 根据选中值执行打印逻辑
        if selected_unit == "AWG":
            print("当前选中单位:AWG")
        elif selected_unit == "mm":
            print("当前选中单位:mm")

补充说明

  1. 在PageOne的__init__中,先调用Frame.__init__(self, parent)完成Frame的初始化,这是Tkinter子类必须做的步骤。
  2. 把controller保存为self.controller,这样在回调函数里就能直接访问App实例的属性了。
  3. 回调函数interrupt的参数改为pin(对应GPIO传入的引脚号),如果不需要用到引脚号,可以保留参数位置但不使用它。
  4. 通过self.controller.frames[StartPage]拿到StartPage的实例后,就能正常访问comboBoxDiamUnitString这个StringVar对象,调用get()获取选中值。

这样调整后,你就能在PageOne中正确获取StartPage里Combobox的选中值,并执行对应的打印逻辑了。

内容的提问来源于stack exchange,提问作者Vitoco.lr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:07:36