【发布时间】:2022-01-21 16:12:00
【问题描述】:
背景:所以我正计划在假期期间为我的家人举办一场密室逃脱游戏。难题的一部分是他们应该在房间里找到一个隐藏的彩票号码,需要将其输入计算机。当输入正确的数字后,他们将收到下一条线索。
我是制作 GUI 的新手,所以我在如何去做时遇到了一些困难。我目前的第一个问题是我无法检索用户在输入字段中输入的信息,然后应该将其与正确的数字进行比较。
到目前为止的代码:
from tkinter import *
import random
Lottery = Tk()
Lottery.geometry('800x360')
Lottery.resizable(0, 0)
Lottery.title("Lottery")
def draw_numbers():
random_numbers = random.sample(range(1, 31), 6)
random_numbers.sort()
text.config(text = random_numbers)
##COMPUTER INPUT
var = StringVar()
var.set("Lottery numbers")
frame1 = Frame(Lottery)
frame1.pack(side=TOP)
label = Label(frame1, textvariable=var, font =("Arial", 24), width=20)
label.pack(side=TOP)
##COMPUTER NUMBERS
button = Button(frame1, text = "Draw numbers", width = 25, command = draw_numbers)
button.pack(padx = 1, pady = 1)
text = Label(frame1, text = random.sample(range(1, 31), 6))
text.pack(padx = 0, pady = 1)
##USER INPUT
frame2 = Frame(Lottery)
var = StringVar()
var.set("Choose 6 numbers between 1 - 30.")
frame2 = Frame(Lottery)
frame2.pack(side=TOP)
label = Label(frame1, textvariable=var, font
=("Arial", 24), width=70)
label.pack(side=TOP)
#USER NUMBERS
frame2.pack(side=TOP)
txtDisplay = Entry(frame2, bd=20, insertwidth=1, font=("Arial", 24), justify='center', width=4)
txtDisplay.pack(side=LEFT)
txtDisplay = Entry(frame2, bd=20, insertwidth=1, font=("Arial", 24), justify='center', width=4)
txtDisplay.pack(side=LEFT)
txtDisplay = Entry(frame2, bd=20, insertwidth=1, font=("Arial", 24), justify='center', width=4)
txtDisplay.pack(side=LEFT)
txtDisplay = Entry(frame2, bd=20, insertwidth=1, font=("Arial", 24), justify='center', width=4)
txtDisplay.pack(side=LEFT)
txtDisplay = Entry(frame2, bd=20, insertwidth=1, font=("Arial", 24), justify='center', width=4)
txtDisplay.pack(side=LEFT)
txtDisplay = Entry(frame2, bd=20, insertwidth=1, font=("Arial", 24), justify='center', width=4)
txtDisplay.pack(side=LEFT)
Lottery.mainloop()
问题:
- 除非您单击框架,否则不会显示用户可以输入其数字的文本字段。
- 如何检索在文本字段中输入的信息,以便将其与正确的数字进行比较?
替代方案:如果我无法在 GUI 中创建程序,我想我会求助于使其成为可以在终端中运行的程序,例如:
import time
import random
while True:
random_numbers = random.sample(range(1, 31), 6)
random_numbers.sort()
correct_numbers = [1,3,5,13,16]
print("Choose 6 numbers between 1-30")
num1 = int(input("Enter your first number: "))
num2 = int(input("Enter your second number: "))
num3 = int(input("Enter your third number: "))
num4 = int(input("Enter your fourth number is: "))
num5 = int(input("Enter your fifth number: "))
print()
input("Press enter to draw numbers: ")
print("…")
guessed_numbers = [num1, num2, num3, num4, num5]
guessed_numbers.sort()
if guessed_numbers == correct_numbers:
print("Your numbers are: " + str(guessed_numbers))
print("The drawn numbers are…")
time.sleep(2)
print(correct_numbers)
print("Congratulations, all numbers are correct! Your next clue is..")
break
else:
print("Your numbers are: " + str(guessed_numbers))
print("The drawn numbers are…")
time.sleep(2)
print(random_numbers)
print("Sorry! Better luck next time..")
到目前为止,在我的代码中,我使用了以下来源的帮助: https://pretagteam.com/question/cant-get-the-code-to-work-for-this-random-number-generator-in-tkinter https://github.com/manjurulhoque/python-lottery-number-generator/blob/master/lottery_number_generator.py
【问题讨论】:
-
使用
focus_set()设置输入焦点,也许您需要定义如何在条目之间切换,例如TAB 键或绑定Return 键,以及在输入完成时验证。选项validatecommand的条目检查每个输入。设置选项textvariable=variablewherevariable = tk.StringVar(),通过variable.get()或widget.get()获取内容。 -
感谢您的回复!问题 1 以某种方式自行解决,问题 2 使用 variable.get() 解决。我并不真正了解这些其他功能的作用或如何使用它们,但我会尝试检查它们以了解更多信息。
标签: python user-interface tkinter