首页 > 解决方案 > Python:这个简单的计算有什么问题

问题描述

我不明白如何解决计算中发生的事情。

我的代码中有一个变量val_var。我希望 的值val_var等于其他两个变量的总和:

imp_var = StringVar(value=0)man_var = StringVar(value=0)

(请注意,在完整代码中,用户选择了不同的值,0 只是在进行任何选择之前的默认值)

在 gui 中,用户定义了一项任务和一些值(“影响”和“可管理性”)。我想要这些值的总和。

我已经定义val_var = str(imp_var)+str(man_var)了最终打印00 并且还尝试val_var = (imp_var)+(man_var)了也打印00

编辑:

我已经定义了,但是当我尝试打印它时val_var = int(imp_var.get())+ int(man_var.get())它仍然打印0

在代码中打印: 第 26 行

代码中的 imp_var: 第 49 行

代码中的 man_var: 第 54 行

代码中的 val_var: 第 65 行

完整代码:

import tkinter.messagebox # Import the messagebox module



task_list = []
task_types = ['Sparetime', 'School', 'Work']

class Task:
    def __init__(self, n, i, m, h, v): 
        self.name = n
        self.impact = i
        self.manageability = m
        self.hours = h
        self.value = v


def show_tasks():
    task = task_list[-1]
    #print(
        #'Task:'+task.name + '\n' +
        #'Impact:' + task.impact + '\n' +
        #'Manageability:' + task.manageability + '\n' +
        #'Hours:' + task.hours + '\n'
        #'Value:' + task.value +'\n'
        #)
    print('Task:')
    print(task.name)
    print('Impact:')
    print(task.impact)
    print('manageability:')
    print(task.manageability)
    print('Hours')
    print(task.hours)
    print('Value:')
    print(task.value)

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)

    #VALUE
    val_var = int(imp_var.get())+ int(man_var.get())
        
    def add_task():
        if name_entry.get() != '': # If textbox inputfield is NOT empty do this:
            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")
    
def sort_tasks():
    pass
def delete_task():
    try:
        task_index = listbox_tasks.curselection()[0]
        listbox_tasks.delete(task_index)
    except:
        tkinter.messagebox.showwarning(title='Error', message='You must select a task to delete')

def save_tasks():
    pass

    


    
    
    
    

root = Tk()








task_frame = Frame()
# Create UI
your_tasks_label = Label(root, text='THESE ARE YOUR TASKS:', font=('Roboto',10, 'bold'), justify='center')
your_tasks_label.pack()


scrollbar_tasks = tkinter.Scrollbar(root)
scrollbar_tasks.pack(side=tkinter.RIGHT, fill=tkinter.Y)

listbox_tasks = tkinter.Listbox(root, height=10, width=50, font=('Roboto',10), justify='center') # tkinter.Listbox(where it should go, height=x, width=xx)
listbox_tasks.pack()

listbox_tasks.config(yscrollcommand=scrollbar_tasks.set)
scrollbar_tasks.config(command=listbox_tasks.yview)


#BUTTONS
Add_Button = Button(root, text='Add New', width=42, command=open_add_task)
Add_Button.pack()

button_delete_task = Button(root, text='Delete task', width=42, command=delete_task)
button_delete_task.pack()


button_save_tasks = Button(root, text='Save tasks', width=42, command=save_tasks)
button_save_tasks.pack()

root.mainloop()

标签: python-3.xtkintercalculationtkinter-entry

解决方案


运算符在+应用于字符串时是字符串连接(连接)。当应用于数字时,它是加法。

所以"4" + "2""42"4 + 26

所以,如果你想加法,你需要把你的字符串变成数字。Python 有一个函数可以为你做到这一点,例如:

num1 = "4"
num2 = "2"
print(num1 + num2)           # outputs 42.
print(int(num1) + int(num2)) # outputs 6.

推荐阅读