python - 如何从 Python GUI 中的用户输入中获取 base 10 错误?
问题描述
我正在尝试使用带有 Python 的 GUI 来创建一个带有整数输入的简单函数。
我对 GUI 概念真的很陌生,所以我不知道还能做什么。
from tkinter import *
root = Tk()
peopleText = Label(root, text="How many people are in your household? ")
wageText = Label(root, text="How much do you make a month before deductions? ")
peopleInput = Entry(root)
wageInput = Entry(root)
runButton = Button(root, text="Run")
peopleText.grid(row=1, column=0)
wageText.grid(row=2, column=0)
peopleInput.grid(row=1, column=1)
wageInput.grid(row=2, column=1)
def runProcess():
incomeSNAP = int(peopleInput.get()) - 1
incomeHousing = int(peopleInput.get()) - 1
if int(wageInput.get()) <= incomeSNAP:
print("Yes")
else:
print("No")
if int(wageInput.get()) <= incomeHousing:
print("Yes")
else:
print("No")
runButton = Button(root, text="Run")
runButton.bind('<Button_1>', runProcess())
runButton.pack()
root.mainloop()
我希望会弹出一个窗口,但出现此错误:
File "/Users/noahpark/PycharmProjects/pythonProject/gui.py", line 21, in runProcess
incomeSNAP = int(peopleInput.get()) - 1
ValueError: invalid literal for int() with base 10: ''
解决方案
发现的问题是,如果您注释掉'<Button_1>' and .pack()
您的代码,然后添加command=runProcess
到它应该运行的按钮。
from tkinter import *
root = Tk()
peopleText = Label(root, text="How many people are in your household? ")
wageText = Label(root, text="How much do you make a month before deductions? ")
peopleInput = Entry(root)
wageInput = Entry(root)
runButton = Button(root, text="Run")
peopleText.grid(row=1, column=0)
wageText.grid(row=2, column=0)
peopleInput.grid(row=1, column=1)
wageInput.grid(row=2, column=1)
def runProcess():
incomeSNAP = int(peopleInput.get()) - 1
incomeHousing = int(peopleInput.get()) - 1
if int(wageInput.get()) <= incomeSNAP:
print("Yes")
else:
print("No")
if int(wageInput.get()) <= incomeHousing:
print("Yes")
else:
print("No")
runButton = Button(root, text="Run", command=runProcess)
runButton.grid(row=3, column=0)
#runButton.bind('<Button_1>', runProcess())
#runButton.pack()
root.mainloop()
除此之外,如果用户输入了错误的变量,例如“字符串”,您可以捕获值错误
from tkinter import *
root = Tk()
peopleText = Label(root, text="How many people are in your household? ")
wageText = Label(root, text="How much do you make a month before deductions? ")
peopleInput = Entry(root)
wageInput = Entry(root)
runButton = Button(root, text="Run")
peopleText.grid(row=1, column=0)
wageText.grid(row=2, column=0)
peopleInput.grid(row=1, column=1)
wageInput.grid(row=2, column=1)
def runProcess():
try:
peopleValue = int(peopleInput.get())
wageValue = int(peopleInput.get())
except ValueError:
peopleValue = None
wageValue = None
print("Pls input integer")
return
incomeSNAP = int(peopleInput.get()) - 1
incomeHousing = int(peopleInput.get()) - 1
if int(wageInput.get()) <= incomeSNAP:
print("Yes")
else:
print("No")
if int(wageInput.get()) <= incomeHousing:
print("Yes")
else:
print("No")
runButton = Button(root, text="Run", command=runProcess)
runButton.grid(row=3, column=0)
root.mainloop()
希望有帮助
推荐阅读
- linq - 什么是 dotnet core 中的动态 Linq 查询?
- dataframe - TramineR 图例位置和轴
- android - 我对 step Counter Google fit API 有一些问题
- html - 在 iOS 中保存和更新 HTML 表单
- android - 避免回收 Recyclerview 中的物品
- javascript - NextJS 部署到特定的 URL 路径
- windows - 如何在 Windows 命令提示符中以 dd-mm-yyyy hh:mm:ss 格式获取日期和时间戳
- c++ - 为什么结果是 1?
- python - 根据列的排序更改熊猫数据框中切片的值
- docker - 如何从另一个 docker 容器运行 psql?