python - 为 OptionMenu 选项赋值 Python Tkinter
问题描述
我正在尝试将一个工作工资计算器与每个州的所得税放在一起。到目前为止,我已经为阿拉巴马州做了一个计算,但不断收到“无法将 'str' 转换为 'float'”
我基本上已经尝试了所有我能找到的东西,并且已经关闭了其他几个程序来尝试修复
import tkinter as tk
from tkinter import*
#WINDOW PROPERTIES
GUI = tk.Tk()
GUI.title("Payroll Calculator")
GUI.minsize('305','110')
GUI.maxsize('305','110')
def StatesList(list):
States = ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'District of Columbia', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming']
```
def saying():
("Total weeks pay: ")
hoursWorked = tk.StringVar(GUI)
payRate = tk.StringVar(GUI)
AL2 = tk.StringVar(GUI)
#BUTTON
def calculateAL():
hours = (hoursWorked.get())
rate = (payRate.get())
taxes = (AL)
salary = (ALTax())
tk.Label(GUI, text = "Total Pay: " + "%.2f" % salary).grid(row=4, column=3)
return
def ALTax():
(hoursWorked.get()*payRate.get())-(payRate.get()*AL.get())
AL2.trace("w", ALTax)
AL = 0.035
```
AZ = 0.03565
AK = 1
AR = 0.039
CA = 0.0715
CO = 1
CT = 0.04995
DE = 0.044
FL = 1
GA = 0.035
HI = 0.04825
ID = 4.5
IL = 1
IN = 1
IA = 0.0467
KS = 0.0405
KY = 0.04
LA = 0.04
ME = 0.06475
MD = 0.03875
MA = 1
MI = 1
MN = 0.076
MS = 0.04
MO = 0.0375
MT = 0.0395
NE = 0.0465
NV = 1
NH = 1
NJ = 0.05185
NM = 0.033
NY = 0.0641
NC = 1
ND = 0.02
OH = 0.0275
OK = 0.0275
OR = 0.0745
PA = 1
RI = 0.0487
SC = 0.035
SD = 1
TN = 1
TX = 1
UT = 1
VT = 0.0625
VA = 0.03875
WA = 1
WV = 0.0475
WI = 0.05825
WY = 1
DC = 0.06475
#ENTRY
tk.Label(GUI, text='Pay Rate:', font="110").grid(row=0)
tk.Label(GUI, text='Hours Worked:', font="110").grid(row=1)
e1 = tk.Entry(GUI)
e1 = Text(GUI, height=0.2, width=20)
e2 = tk.Entry(GUI)
e2 = Text(GUI, height=0.2, width=20)
e1.grid(row=0, column=1, sticky=W)
e2.grid(row=1, column=1, sticky=W)
#DROP DOWN MENU
opt = StringVar()
opt.set("Choose a state")
option = OptionMenu(GUI, opt, 'Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'District of Columbia', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming')
option.grid(row=2, column=0)
def show():
print(option.get())
frame = tk.Frame(GUI)
frame.grid()
button = tk.Button(frame, text='Calculate', fg='red', command=calculateAL)
button.grid(row=1, column=0)
#EVENT LOOP
GUI.mainloop()
解决方案
hoursWorked 和 payrate 都是字符串:
hoursWorked = tk.StringVar(GUI)
payRate = tk.StringVar(GUI)
所以你可以做两件事之一:先转换成浮点数,然后再对其进行数学运算
(float(hoursWorked.get())*float(payRate.get()))-(float(payRate.get())*AL.get())
或使用 DoubleVars
hoursWorked = tk.DoubleVar(GUI)
payRate = tk.DoubleVar(GUI)
推荐阅读
- c# - MagickImage StackOverFlowException
- r - 使用 RecordLinkage 对连续存储的数据进行重复数据删除
- php - 自定义帖子类型简码不适用于 WordPress.com 安装
- excel - 关于如何让这个宏更快地完成这些步骤而不标记错误的任何建议?
- c# - C#:有没有办法从属性集中确定我们当前是否处于反序列化模式?
- assembly - 在ARM汇编语言中将位插入二进制数的方法
- c++ - 尝试交换可变参数模板类时如何正确重载 operator=?
- javascript - 为什么 Postman 不发布此请求?
- .net-core - Wexflow 使用 .NET Core 项目创建我的任务
- chisel - 加载和存储到 Rocket Chip 的 L1 缓存中