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

Python Tkinter多Combobox取值相加显示问题及完整实现代码

问题根因
  • 作用域错误:click函数是全局函数,无法直接访问main函数内定义的combo_impact、combo_likelihood、数值映射字典等局部变量,会触发变量未定义报错
  • 取值逻辑错误:combo.get()获取到的是下拉框选中的文本描述(比如Catstrophic、Almost Certain),不是对应的评分数值,直接调用int()转换会抛出类型异常
  • 变量初始化错误:totalvalues是main内的局部变量,全局global声明无效,首次触发点击如果条件不满足,直接拼接字符串会触发未定义报错
修复后完整代码(已汉化界面)
import tkinter as tk
from tkinter import ttk

def main():
    # 影响程度对应分值映射
    impactDict = {'灾难性': 5, '严重': 4, '较大': 3, '中等': 2, '轻微':1}
    # 发生概率对应分值映射
    likelihoodDict = {'几乎确定': 5, '很可能': 4, '可能': 3, '不太可能': 2, '罕见':1}

    root = tk.Tk()
    root.title("风险评分工具")
    root.configure(bg='Dodgerblue4')

    # 影响程度选择区域
    tk.Label(root, text='法律风险影响程度', bd=3, bg='Dodgerblue4', fg='white').grid(row=0, column=0)
    var_impact = tk.StringVar()
    combo_impact = ttk.Combobox(root, values=list(impactDict.keys()), justify="center", textvariable=var_impact)
    combo_impact.bind('<<ComboboxSelected>>', lambda event: impact_level.config(text=impactDict[var_impact.get()]))
    combo_impact.grid(row=0, column=1)
    combo_impact.current(0)

    impact_level = tk.Label(root, text="", bg='Dodgerblue4', fg='white')
    impact_level.grid(row=0, column=2, padx=10)

    # 发生概率选择区域
    tk.Label(root, text='法律风险发生概率', bd=3, bg='Dodgerblue4', fg='white').grid(row=1, column=0)
    var_likelihood = tk.StringVar()
    combo_likelihood = ttk.Combobox(root, values=list(likelihoodDict.keys()), justify="center", textvariable=var_likelihood)
    combo_likelihood.bind('<<ComboboxSelected>>', lambda event: likelihood_level.config(text=likelihoodDict[var_likelihood.get()]))
    combo_likelihood.grid(row=1, column=1)
    combo_likelihood.current(0)

    likelihood_level = tk.Label(root, text="未选择", bg='Dodgerblue4', fg='white')
    likelihood_level.grid(row=1, column=2, padx=10)

    # 评分结果展示区域
    total = tk.Label(root,text = "", bg='Dodgerblue4', fg='white' )
    total.grid(row=2, column = 2, padx=20, pady=10)

    # 计算逻辑内置到main函数中,可直接复用局部作用域变量
    def click():
        if var_impact.get() and var_likelihood.get():
            impact_val = impactDict[var_impact.get()]
            likelihood_val = likelihoodDict[var_likelihood.get()]
            totalvalues = impact_val + likelihood_val
            total.configure(text="风险评分:" + str(totalvalues))
        else:
            total.configure(text="风险评分:请完成全部选择")

    tk.Button(root,text='计算评分', command=click).grid(column=3,row=3)

    root.mainloop()

if __name__ == '__main__':
    main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:15:03