【发布时间】:2022-01-03 08:36:50
【问题描述】:
我最近学习了一点 Python。我试图在框架小部件上做一个猜数字游戏。按下随机数按钮以生成随机数。然后 Enter 按钮从输入框中获取输入并与生成的随机数进行比较。为了测试它,程序会显示一个显示生成的随机数的标签。当我输入与生成的数字相同的数字时,它说它不相等。唯一一次说它相等是当我输入 0(零)时。我也有一些行告诉我这些值是什么类型,只是为了确保我比较的是相同的类型。
from random import randint
from tkinter import *
root = Tk()
root.title('Guess Number Final')
root.geometry('500x500')
directionFrame = Frame(root, width = 200, height = 200, highlightbackground = 'red',
highlightthickness = 3)
directionFrame.grid(row = 0, column = 0, padx = 20, pady = 20, ipadx = 20, ipady = 20)
randomNum = IntVar()
newguessInt = IntVar()
def randomize():
randomNum = randint(0,10)
randomStr.set(randomNum)
def enterGuess():
newguessInt = int(number_input.get())
newRandom = randomNum.get()
if (newguessInt == newRandom):
guess_var.set('Your guess is right.')
else:
guess_var.set('Your guess is wrong.')
guess_str.set(type(newguessInt))
random_str.set(type(newRandom))
##### Random Button #####
randomBtn = Button(directionFrame, text = 'Random Number', command = randomize)
randomBtn.pack()
##### Random Variable #####
randomStr = StringVar()
randomStr.set('Number')
##### Guess Variable #####
guess_var = StringVar()
guess_var.set('Your guess is...')
##### typeGuessVariable #####
guess_str = StringVar()
guess_str.set('Type')
##### randomNumVariable #####
random_str = StringVar()
random_str.set('Type')
##### Random Label #####
randomLbl = Label(directionFrame, textvariable = randomStr)
randomLbl.pack()
##### Number Entry Box #####
number_input = Entry(directionFrame)
number_input.pack()
##### Enter Button #####
enterBtn = Button(directionFrame, text = 'Enter Guess', command = enterGuess)
enterBtn.pack()
##### Your Guess Label #####
yourGuessLbl = Label(directionFrame, textvariable = guess_var)
yourGuessLbl.pack()
##### GuessInt Label ######
guessIntLbl = Label(directionFrame, textvariable = guess_str)
guessIntLbl.pack()
##### Random Label ######
randomNumLbl = Label(directionFrame, textvariable = random_str)
randomNumLbl.pack()
mainloop()
【问题讨论】:
-
你为什么用
set开头?set是一个单独的数据类型。只需使用等号分配,即a = b。 -
randomNum(全局IntVar,而不是randomize()中的本地)永远不会改变,也不会附加到任何小部件,因此它继续具有默认值0。跨度> -
@LarrytheLlama 这是一种设置持有值 afaik 的方法。
-
你应该简化你的代码,只使用一组 tkinter 变量而不是多组,以减少使用错误变量进行比较的错误。
标签: python python-3.x tkinter tkinter-entry