python-3.x - 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()
解决方案
运算符在+
应用于字符串时是字符串连接(连接)。当应用于数字时,它是加法。
所以"4" + "2"
给"42"
但4 + 2
给6
。
所以,如果你想加法,你需要把你的字符串变成数字。Python 有一个函数可以为你做到这一点,例如:
num1 = "4"
num2 = "2"
print(num1 + num2) # outputs 42.
print(int(num1) + int(num2)) # outputs 6.
推荐阅读
- javascript - 是否可以在 Storybook 反应中使用 SVG Sprite 地图?
- javascript - 使用字符串键和 if 语句保护 API
- angular - Mat-Select 不应用默认设计模式
- reactjs - 从反应组件之外的 auth0provider 访问令牌
- angular - 传递给“selectId”实现的实体返回未定义。您可能应该提供自己的 `selectId` 实现
- python - AttributeError - 网页抓取 - Python - Selenium
- android - Android 设备的 device.mk 文件位于何处?
- php - 根据国家选择从 JSON 文件的下拉列表中添加所有状态
- json - 使用 jq 修改包含特定字符串的对象中的值
- javascript - 如何在 AngularJS 的 sessionStorage 中存储来自 ng-dropdown-multiselect 的值?