Python 3.x 如何在TKinter中创建按钮侦听器

Python 3.x 如何在TKinter中创建按钮侦听器,python-3.x,tkinter,Python 3.x,Tkinter,我正在尝试制作一个simon says游戏,但在收集用户选择与计算机模式进行比较时遇到了困难。我用四个按钮来选择屏幕上闪烁的颜色。我遇到的问题是,即使我的用户还没有选择颜色,我的程序仍在继续运行,尽管我尽了最大努力阻止它,但我能做些什么来停止程序?这是我的密码 Sequence[] PosColors = ["Yellow","Red","Blue","Green"] PlayerChoice[] Score = 0 def Game(Sequence,

我正在尝试制作一个simon says游戏,但在收集用户选择与计算机模式进行比较时遇到了困难。我用四个按钮来选择屏幕上闪烁的颜色。我遇到的问题是,即使我的用户还没有选择颜色,我的程序仍在继续运行,尽管我尽了最大努力阻止它,但我能做些什么来停止程序?这是我的密码

    Sequence[]
    PosColors = ["Yellow","Red","Blue","Green"]
    PlayerChoice[]
    Score = 0

    def Game(Sequence, PlayerChoice,Score):
        Score += 1
        PlayerChoice = []
        Number = randint(0,3)
        Sequence.append(PosColors[Number])

        for i in Sequence:
            RunTime = Score * 1000
            Gui.after(1000, blink, rect, SquareCanvas , i)
            RunTime = (Score + 1) * 1000
            Gui.after(2000, blink, rect, SquareCanvas , White)

        X = len(Sequence)
        Index = 0
        Color = " "

        while Color != " ":
            BlueButton.config(command = partial(setSelection,NeonBlue)) 
            RedButton.config(command = partial(setSelection,NeonRed)) 
            YellowButton.config(command = partial(setSelection,NeonYellow))
            GreenButton.config(command = partial(setSelection,NeonGreen))
            Color = getSelection()

        print(Color)

        while Color != " ":
            PlayerTurn(Sequence,PlayerChoice,Score,Index)
            X -= 1
            Index +=1

    def setSelection(Color):
        if Color == NeonBlue:
            return "NeonBlue"
        elif Color == NeonRed:
            return "NeonRed"
        elif Color == NeonGreen:
            return "NeonGreen"
        elif Color == NeonYellow:
            return "NeonYellow"


    def getSelection():
        return TheColor

    def PlayerTurn(Sequence, PlayerChoice,Score,Index):
        PlayerChoice.append(Color)
        print(PlayerChoice)
        Label1.config(text = 'Well done! \nYou advance to the next round!')

我计划通过一个检查器,并循环它,直到有一个错误,但我需要通过这个前循环第一。。。我知道我的逻辑是有效的,因为我只使用列表和命令行来创建它,在继续图形部分之前,我只需要知道如何让程序停止以收集用户猜测,特别是当模式的长度变大时。最初我有命令功能,包括后来我建立我的按钮,但这个位置似乎得到尽可能接近我所寻找的。非常感谢您的帮助,谢谢您需要重新考虑您的主要程序逻辑。Tkinter的设计使您永远不会拥有自己的无限循环。Tkinter已经有一个无限循环——根窗口的mainloop方法。不能编写等待用户输入的逻辑。您必须将GUI视为处于永久等待状态,并且需要设置处理程序按钮回调或事件绑定以对事件作出反应


您还需要了解按钮命令不能返回任何内容。不能有点强,因为它显然可以,但没有什么等待结果-没有地方可以返回。您需要设计按钮函数,以便它设置全局变量或实例变量

这是我的代码段需要获得用户输入,我可以张贴所有的代码,如果你愿意…非常感谢你的输入。。。如果我添加了一个event handler=False,然后当Color变量不相等时将其设置为True,这是否可行。那么,真实事件是否允许程序进入PlayerTurn序列?@Schneemanch:不,我不这么认为。我认为没有简单的解决办法。就像我说的,你需要重新思考主要的逻辑。您必须删除所有while循环,并在将按钮配置为调用它们需要调用的任何函数后,在对mainloop的一次调用中全部替换它们。