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

tkinter类中字典存储方法的创建位置与访问问题求助

问题分析与修复方案

核心错误点

  • 局部变量未绑定到实例:indication和mainframe是__init__内的局部变量,format方法无法直接访问,需改为实例属性(添加self.前缀)。
  • 循环变量使用错误:遍历字典时,应直接使用循环得到的key和value,而非self.indication.key这类错误写法。
  • 未定义变量n:创建单选按钮时的row = n+1中,n未初始化,需先定义行号初始值。
  • 方法命名冲突:format是Python内置函数,虽不直接报错,但建议改为语义明确的名称,避免混淆。

修复后的完整代码

import tkinter as tk
from tkinter import ttk
from tkinter import *

class EnoxDoseCalculator:    
    def __init__(self, root):
        root.title('Enoxaparin Dose Calculator')
        # 将indication设为实例属性,供其他方法访问
        self.indication = {'VTE': self.vte,  'Atrial Fibrilation': self.af, 'Mechanical Heart valve': self.mech}
        
        # 将mainframe设为实例属性
        self.mainframe = ttk.Frame(root)
        self.mainframe.grid(column = 0, row = 0, sticky='nsew')
        test_button = ttk.Button(self.mainframe, text= 'Push Mew!!', command = self.create_radiobuttons)
        test_button.grid(row = 0, column = 0)

    def vte(self):
        print("VTE选项触发")

    def af(self):
        print("房颤选项触发")
        
    def mech(self):
        print("机械心脏瓣膜选项触发")

    # 重命名方法,规避与内置函数冲突
    def create_radiobuttons(self):
        self.var3 = tk.StringVar()
        # 初始化行号,从测试按钮的下一行开始
        row_num = 1
        for key, method in self.indication.items():
            ttk.Radiobutton(
                self.mainframe, 
                text=key, 
                variable=self.var3, 
                value=key, 
                command=method
            ).grid(row=row_num, column=0, sticky='nswe')
            row_num += 1

root = Tk()
EnoxDoseCalculator(root)

root.mainloop()

关键修改说明

  1. 给indication和mainframe添加self.前缀,转为实例属性,确保所有方法都能访问。
  2. 循环中直接使用遍历得到的key(单选按钮显示文本)和method(触发的方法),修正变量调用错误。
  3. 新增row_num变量控制单选按钮的行位置,从测试按钮的下一行开始排列。
  4. 将format方法重命名为create_radiobuttons,避免与Python内置函数冲突,提升代码可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:31:02