如何在TKinter

时间:2015-11-15 23:03:24

标签: python-3.x tkinter

我试图让西蒙说游戏,并且无法收集用户选择与计算机模式进行比较。我使用四个按钮来选择屏幕上闪烁的颜色。我遇到的问题是,即使我的用户还没有选择颜色,我的程序仍在继续调整,尽管我尽最大努力阻止它,我该怎么做才能停止程序?这是我的代码......

    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!')

我打算通过一个检查器传递它并循环它直到出现错误但我需要先通过这个前循环...我知道我的逻辑工作,因为我只使用列表和命令行创建它在移动图形部分之前,我只需要知道如何让程序停止收集用户猜测,特别是当模式的长度变大时。最初我把命令功能包含在后面我构建我的按钮的地方,但这个位置似乎尽可能接近我正在寻找的东西。感谢您的任何帮助

1 个答案:

答案 0 :(得分:0)

您需要重新考虑主程序逻辑。 Tkinter的设计使您永远不会拥有自己的无限循环。 Tkinter已经有了一个无限循环 - 根窗口的mainloop()方法。您无法编写等待用户输入的逻辑。您必须将GUI视为永久等待状态,并且您需要设置处理程序(按钮回调或事件绑定)以对事件做出反应。

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