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

Solving problem to generate custom number from inserted values with GUI in Python

你好我有 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()

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

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

另一个问题:

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

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

我的修改建议:

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