首页 > 解决方案 > 为 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()

标签: pythonpython-3.xtkinter

解决方案


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)

推荐阅读