让Tkinter等待直到按钮被按下

2024-04-20Python开发问题
3

本文介绍了让Tkinter等待直到按钮被按下的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我有一个游戏,当一个按钮被创建时,我需要我的程序只显示这个屏幕,直到他们按下‘下一级’,所有这些代码都在一个While循环中,所以在一个控制游戏的大While循环中。

.

if game.playerDistance >= game.lowerBound() and game.playerDistance <= game.upperBound():
        game.level += 1

        showLevelResults(game)

        #NextLevelButton
        btnNextLevel = Button(root,
                    #Random Config
                    command = nextLevel,
                    )
        btnNextLevel.place(x=1003, y=492, anchor=NW,  width=247, height=78)

        updateMainScreen()

        while nextLev == False:
            #What Do I put in here to force a wait
    else:

.

nextLev = False
def nextLevel():
    nextLev = True

.

目前,这会使其处于WHILE循环中,当按下按钮时,我使用的时间没有任何变化。睡眠(1)使其保持等待,并使其打印等待BTN按下,但是这会给控制台带来垃圾邮件,并且当按下按钮时仍不会更改屏幕。

def showGameSurvival():

game = gamemode_normal()

while game.health != 0:
    game.next = False 
    clearScreen()
    changeBackground("Survival")

    #Placing Labels on the screen for game.....

    #... Health
    root.update()

    lblCountDownLeft = Label(root, bg="White", fg="Green", font=XXLARGE_BUTTON_FONT)
    lblCountDownLeft.place(x=169, y=350, anchor=CENTER)
    lblCountDownRight = Label(root, bg="White", fg="Green", font=XXLARGE_BUTTON_FONT)
    lblCountDownRight.place(x=1111, y=350, anchor=CENTER)
    #CountDown
    count = 7
    while count > 0:                
        lblCountDownLeft['text'] = count
        lblCountDownRight['text'] = count
        root.update()
        count -= 1
        time.sleep(1)

    lblCountDownLeft.destroy()
    lblCountDownRight.destroy()
    root.update()
    #Num on left x=169, right, x=1111 y=360

    game.measureDistance()
    if game.playerDistance >= game.lowerBound() and game.playerDistance <= game.upperBound():
        game.level += 1
        clearScreen()
        changeBackground("Survival")
        graphicalDisplay(game)

        #NextLevelButton
        btnNextLevel = Button(root,
                    bg= lbBlue,
                    fg="white",
                    text="Level" + str(game.level),
                    font=SMALL_BUTTON_FONT,
                    activebackground="white",
                    activeforeground= lbBlue,
                    command= lambda: nextLevel(game),
                    bd=0)
        btnNextLevel.place(x=1003, y=492, anchor=NW,  width=247, height=78)
        root.update()
        while game.next == False:
            print(game.next)
    else:
        game.health -= 1

    if game.allowance > 4:
        game.allowance = int(game.allowance*0.9)

#when game is over delete the shit        
if game.health == 0:
    del game

"下一步"按钮现在调用此函数:def nextLevel(game): game.next = True

推荐答案

让tkinter等待某个事件的最简单方法是调用一个"等待"函数,例如wait_variable、wait_window或wait_visibility。

在您的示例中,您希望等待按钮单击,因此可以使用wait_variable,然后让按钮设置变量。当您单击该按钮时,将设置变量,并且当设置变量时,将返回对wait_variable的调用。

例如:

import tkinter as tk
root = tk.Tk()
...
var = tk.IntVar()
button = tk.Button(root, text="Click Me", command=lambda: var.set(1))
button.place(relx=.5, rely=.5, anchor="c")

print("waiting...")
button.wait_variable(var)
print("done waiting.")
注意:您不必使用IntVar--任何特殊的Tkinter变量都可以。此外,您将其设置为什么并不重要,该方法将一直等到其更改。

这篇关于让Tkinter等待直到按钮被按下的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

在xarray中按单个维度的多个坐标分组
groupby multiple coords along a single dimension in xarray(在xarray中按单个维度的多个坐标分组)...
2024-08-22 Python开发问题
15

Pandas中的GROUP BY AND SUM不丢失列
Group by and Sum in Pandas without losing columns(Pandas中的GROUP BY AND SUM不丢失列)...
2024-08-22 Python开发问题
17

GROUP BY+新列+基于条件的前一行抓取值
Group by + New Column + Grab value former row based on conditionals(GROUP BY+新列+基于条件的前一行抓取值)...
2024-08-22 Python开发问题
18

PANDA中的Groupby算法和插值算法
Groupby and interpolate in Pandas(PANDA中的Groupby算法和插值算法)...
2024-08-22 Python开发问题
11

PANAS-基于列对行进行分组,并将NaN替换为非空值
Pandas - Group Rows based on a column and replace NaN with non-null values(PANAS-基于列对行进行分组,并将NaN替换为非空值)...
2024-08-22 Python开发问题
10

按10分钟间隔对 pandas 数据帧进行分组
Grouping pandas DataFrame by 10 minute intervals(按10分钟间隔对 pandas 数据帧进行分组)...
2024-08-22 Python开发问题
11