繁体   English   中英

尝试猜猜我在 Python 上制作的数字游戏以使用 GUI。 但是程序在运行时没有响应

[英]Attempting to make a Guess the number game i made on Python to use a GUI. but the program not responding when ran

代码应该只显示基本的 GUI 元素,但在运行时它只显示titlelbl并且没有响应。 我怀疑这可能是我拥有循环的方式,但不太确定。 会喜欢洞察力谢谢!

基本上想要一个文本字段来输入猜测,一个峰会按钮,然后有一个 label 来显示,如果你太高或太低,并显示尝试左直到输或赢

import random
from tkinter import *

window = Tk()
window.title("Guess Number")

window.geometry('1000x800')

rand1 = 1
rand2 = 100
randNum = random.randint(rand1,rand2)
gameEnd = False
answer = "a"
allotedTries = 4
tries = 3
while gameEnd == False:
    
#Builds elements of GUI 

    titlelbl = Label(window, text="Guess Number from 1 to 100!", font=("Arial Bold", 50))   
    titlelbl.grid(row=0,column=0,sticky="NW")
    titlelbl.grid_propagate(0)
    titlelbl.update()
    titlelbl.place(x=500, y=125, anchor="center")

    infolbl = Label(window, textvariable = tries, font=("Arial Bold", 25))
    infolbl.place(x=500, y=550, anchor="center")
    
#begining of game logic

    guess = int(input("Guess a number from 1 to 100 " ))
    tries -= 1

    if guess == randNum:
        answer = "Correct"
        gameEnd = True
    elif guess > randNum:
        answer = "High"
    elif guess < randNum:
        answer = "Low"
    if tries == 0 :
        print("Sorry! Ran out of Tries")
        gameEnd = True
        break
            
    #displaying of results 

    if answer == "Correct":
        print("Correct! Winner ")
        break
    elif answer == "High":
        print("Too High; Tries Left: ")
        print(tries)
        infolbl.update()
    elif answer == "Low":
        print("Too Low; Tries Left: ")
        print(tries)
        infolbl.update()
    
window.mainloop()

根据您指定的要求

基本上想要一个文本字段来输入猜测,一个峰会按钮,然后有一个 label 来显示,如果你太高或太低,并显示尝试左直到输或赢

没有必要通过无限循环来实现这一点。 添加您提到的小部件,创建一个 function 来检查输入并相应地更新 label,将其绑定到按钮。 阅读文档并首先尝试自己弄清楚,Stack Overflow 不是编写代码的平台。

关于您的代码的当前问题:

  • 无限的while循环使主线程持续忙碌,导致window无响应。
  • Try 不是IntVar() ,它是用于存储整数的tries变量,可以与textvariable参数一起使用,您需要使用.set()方法为其赋值。 由于这一切都没有完成,您的 label 已放置但没有可显示的内容。

在使用window.mainloop()打开 window 之前,您有一个将永远运行的循环。 所以你应该把while gameEnd == False放到一个线程中,然后调用window.mainloop 因此,您可以调用 function main 并使用threading.thread()在运行 window 时运行 main。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM