【发布时间】:2021-05-13 13:43:09
【问题描述】:
我不明白如何解决计算中发生的问题。
我的代码中有一个变量val_var。我希望val_var 的值等于其他 2 个变量的总和:
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()
【问题讨论】:
-
你试过用
int()代替str()吗? -
是的,它返回错误
TypeError: can only concatenate str (not "int") to str
标签: python-3.x tkinter calculation tkinter-entry