为了账号安全,请及时绑定邮箱和手机立即绑定

解决在 Python 中使用 GUI 从插入值生成自定义数字的问题

解决在 Python 中使用 GUI 从插入值生成自定义数字的问题

慕的地6264312 2022-12-14 20:36:30
你好我有 python 学习项目。我想在 GUI 中插入两个数字,它们定义程序从中生成随机数的范围。我确实在按下按钮调用函数时遇到问题。并不断出现错误 ValueError: invalid literal for int() with base 10: '',当尝试将字符串从 GUI 中的条目转换为 int,然后将它们插入 random.randint 时。感谢帮助!from tkinter import *import randomroot = Tk()root.title("Generator custom random number")#function that gets number from entry converts string to int and defines target number in stevilodef function():    string_answer1 = prvo_stevilo.get()    int1 = int(string_answer1)    string_answer2 = drugo_stevilo.get()    int2 = int(string_answer2)    stevilo = random.randint(int1, int2)#Defining GUInavodilo = Label(root, text="Choose custom lower and upper number to chose random number from", width=60)navodilo2 = Label(root, text="From", width=20, borderwidth=3)navodilo3 = Label(root, text="To", width=20, borderwidth=3)prvo_stevilo = Entry(root, width=20, borderwidth=3)drugo_stevilo = Entry(root, width=20, borderwidth=3)gumb = Button(root, text="Generate number", width=17, height=2, command=function)praznavrstica = Label(root, text="")izpis = Label(root, text="Random number is: ", width=20)izpis_stevila = Label(root, text="" + stevilo)#Showcase of guinavodilo.grid(row=0, column=0, columnspan=1)navodilo2.grid(row=1, column=0, columnspan=1)navodilo3.grid(row=3, column=0, columnspan=1)prvo_stevilo.grid(row=2, column=0, columnspan=1)drugo_stevilo.grid(row=4, column=0, columnspan=1)praznavrstica.grid(row=5, column=0, columnspan=1)gumb.grid(row=6, column=0, columnspan=1)praznavrstica.grid(row=7, column=0, columnspan=1)izpis.grid(row=8, column=0, columnspan=1)izpis_stevila.grid(row=9, column=0, columnspan=1)#Looproot.mainloop()
查看完整描述

1 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

我注意到您的代码几乎没有问题。我能够在没有太多更改的情况下运行它,尽管这可能不是最好的方法。


首先回答您的问题:您收到此错误,因为您正试图将字符串 -> '' 更改为 int。发生这种情况是因为 function() 在您单击按钮之前正在运行。


另一个问题:


izpis_stevila = Label(root, text="" + stevilo)

在调用 function() 之前,变量 'stevilo' 根本不存在,所以从这里删除它。


我的改变建议:


1)


gumb = Button(root, text="Generate number", width=17, height=2,command = lambda: function())

如果没有 lambda,无论按钮的状态如何,您的函数都会运行。


2)


first = IntVar(root, value=0)

second = IntVar(root, value=1)

prvo_stevilo = Entry(root, width=20, borderwidth=3, textvariable=first)

drugo_stevilo = Entry(root, width=20, borderwidth=3, textvariable=second)

如果您在输入中没有任何值的情况下运行函数,您将收到错误消息。此更改允许您为条目小部件设置默认值。


3)


def function():

if prvo_stevilo.get() == '' or drugo_stevilo.get() =='':

    return

else:

    string_answer1 = prvo_stevilo.get()

    int1 = int(string_answer1)

    string_answer2 = drugo_stevilo.get()

    int2 = int(string_answer2)

    stevilo = random.randint(int1, int2)

    izpis_stevila = Label(root, text=str(stevilo))

    izpis_stevila.grid(row=9, column=0)

首先检查您的条目是否为空。其次更新标签,还记得在此处将 int 更改为字符串 text=str(stevilo)。


查看完整回答
反对 回复 2022-12-14
  • 1 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信