猿问

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

你好我有 python 学习项目。我想在 GUI 中插入两个数字,它们定义程序从中生成随机数的范围。


我确实在按下按钮调用函数时遇到问题。并不断出现错误 ValueError: invalid literal for int() with base 10: '',当尝试将字符串从 GUI 中的条目转换为 int,然后将它们插入 random.randint 时。


感谢帮助!


from tkinter import *

import random


root = Tk()

root.title("Generator custom random number")


#function that gets number from entry converts string to int and defines target number in stevilo

def 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 GUI

navodilo = 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 gui

navodilo.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)



#Loop

root.mainloop()


慕的地6264312
浏览 116回答 1
1回答

杨魅力

我注意到您的代码几乎没有问题。我能够在没有太多更改的情况下运行它,尽管这可能不是最好的方法。首先回答您的问题:您收到此错误,因为您正试图将字符串 -> '' 更改为 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() =='':    returnelse:    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)。
随时随地看视频慕课网APP

相关分类

Python
我要回答