You need to enable JavaScript to run this app. Python Tkinter中StringVar变量求和结果不符合预期问题排查
优惠活动
大模型
产品
解决方案
定价
更多

Python Tkinter中StringVar变量求和结果不符合预期问题排查

问题修复方案

错误原因

  1. 早期输出00的问题:imp_var和man_var都是StringVar类型对象,没有调用.get()方法的前提下,直接转换为字符串或者相加,操作的是对象本身而非其存储的数值,自然得到错误的拼接结果。
  2. 调用.get()后输出仍为0的问题:你把val_var的计算逻辑放在了添加任务窗口初始化的位置,窗口刚弹出时两个下拉框都是默认值0,此时就已经算出了val_var=0,后续用户修改下拉框的选择时,val_var不会自动更新。

修复方法

把val_var的计算逻辑移动到用户点击「Next」按钮触发的add_task函数内部,提交时再实时读取两个下拉框的最新值计算即可。

修改后的open_add_task函数代码如下:

def open_add_task():
    taskwin = Toplevel(root)
    taskwin.focus_force()
    
    #TITLE
    titlelabel = Label(taskwin, text='Title task concisely:', font=('Roboto',11,'bold')).grid(column=1, row=0)
    name_entry = Entry(taskwin, width=40, justify='center')
    name_entry.grid(column=1, row=1)

    #IMPACT
    impactlabel = Label(taskwin, text='Impact', font=('Roboto',10)).grid(column=0, row=2)
    imp_var = StringVar(value=0)
    OptionMenu(taskwin, imp_var, *range(0, 10+1)).grid(column=0, row=3, sticky='ns')

    #MANAGEABILITY
    manlabel = Label(taskwin, text='Manageability', font=('Roboto',10)).grid(column=1, row=2)
    man_var = StringVar(value=0)
    OptionMenu(taskwin, man_var, *range(0, 10+1)).grid(column=1, row=3, sticky='nsew')

    #HOURS(required)
    hourlabel = Label(taskwin, text='Whole hours \n required', font=('Roboto',10)).grid(column=1, row=16)
    hour_entry = Entry(taskwin, width=4, justify='center')
    hour_entry.grid(column=1, row=17)
        
    def add_task():
        if name_entry.get() != '': # If textbox inputfield is NOT empty do this:
            # 移到此处计算,实时获取用户最新选择的数值
            val_var = int(imp_var.get()) + int(man_var.get())
            task_list.append(Task(name_entry.get(), imp_var.get(), man_var.get(), hour_entry.get(), val_var))
            show_tasks()
            listbox_tasks.insert(tkinter.END, name_entry.get())
            name_entry.delete(0, tkinter.END)
            taskwin.destroy()
        else:
            tkinter.messagebox.showwarning(title='Whoops', message='You must enter a task')

        
    next_button = Button(taskwin, text='Next', font=('Roboto',10), command=add_task).grid(column=2, row=18, sticky="ne")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 20:06:08