仅当条目中包含文本时,才将Tkinter条目值作为整数进行比较

2024-06-11 18:03:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要对条目执行一些基本的条件逻辑,但我遇到了一个问题

有两个条目,“剂量”和“周”。在这两种情况下,将只输入数字(25、3等)。我有一个“获取信息”按钮,它激活一个函数,该函数将在条目上执行条件逻辑,尽管由于程序运行时条目中没有任何文本,我遇到了一个错误

ValueError: invalid literal for int() with base 10: ''

这是我的密码:

from tkinter import *
import tkinter.font as font

# Window setup
root = Tk()
root.title("Dosage GUI")
root.geometry("330x450")

# Entries
weekEntry = Entry(root)
dosageEntry = Entry(root)

# Labels to describe entries
weekLabel = Label(root, text="Week #")
dosageLabel = Label(root, text="Dosage in mg (enter only a number)")

# Information text
# State = disabled, but when changing text, change to normal, then back to disabled
def setInfoText(textBox, text):
    textBox.config(state="normal")
    textBox.insert(1.0, text)
    textBox.config(state="disabled")

infoTextFont = font.Font(size=8)
infoText = Text(root, height=17, width=30, padx=10,pady=10, state="disabled", font=infoTextFont, bd=5,bg="#e8ebea")

# Get Info button
def getInfo(week, dosage):
    # Check what is possible based on the dosage rules
    if week > 3:
        setInfoText(infoText, "PI may change dosage if needed.")
    if week < 3:
        setInfoText(infoText, "PI cannot change dosage until week 3.")

getInfoFont = font.Font(size=13,weight="bold")
getInfoBut = Button(root, text="Get Info", padx=20,pady=20,bd=10,bg="#7299ed",activebackground="#729ffc", fg="#40e677", command=getInfo(int(weekEntry.get()), int(dosageEntry.get())))
getInfoBut['font'] = getInfoFont

# Grid
weekEntry.grid(row=0,column=5)
dosageEntry.grid(row=0, column=10)

weekLabel.grid(row=5,column=5)
dosageLabel.grid(row=5,column=10)

getInfoBut.place(x=100,y=70)

infoText.place(x=50,y=170)

# mainloop
root.mainloop()


Tags: text条目columnrootgridintrowfont
1条回答
网友
1楼 · 发布于 2024-06-11 18:03:13

command关键字参数需要一个函数作为参数

现在您正在传递getInfo(int(weekEntry.get()), int(dosageEntry.get())),这是getInfo的返回值,它是None(因为该函数中没有返回语句)

相反,您可能希望在lambda中传递一条语句-这样您就可以创建一个函数,每当按下该按钮时,该函数都会被调用:

getInfoBut = Button(root, text="Get Info", padx=20,pady=20,bd=10,bg="#7299ed",activebackground="#729ffc", fg="#40e677", command=lambda: getInfo(int(weekEntry.get()), int(dosageEntry.get())))

出现错误的原因是Python甚至在UI显示之前就尝试计算对getInfo的调用-此时weekEntrydosageEntry字段为空-尝试将空字符串转换为int会导致错误

相关问题 更多 >