【问题标题】:Tkinter, help a noob understand Tk's loopsTkinter,帮助菜鸟理解 Tk 的循环
【发布时间】:2016-08-16 02:16:17
【问题描述】:

我是 Python 3 菜鸟,正在创建一个跳棋游戏,我有一堆函数……我的游戏循环如下:

while EndGame==0:
    PrintBoard()
    PrintBoardGui()
    print("################","\n","Player 1","\n","################","\n")
    Player=1
    PlayerSelectPiece()
    MovePiece()
    PrintBoard()
    PrintBoardGui()
    print("################","\n","Player 2","\n","################","\n")
    Player=2
    if NbrPlayer==2:
        PlayerSelectPiece()
    else:
        AiSelectPiece()
    MovePiece()

PrintBoardGui() 我在每回合开始时运行并创建一个 Tkinter 窗口并在 Tkinter 框架中的新画布上绘制电路板。
之后,我必须关闭窗口才能继续程序。 我知道这是一个次优的解决方案。

我环顾四周试图理解 Tkinter 的循环并阅读了一些关于 after() 函数的信息,但我真的不知道如何在我的代码中实现它。
最后,我希望我的 Tkinter 窗口保持打开状态(可能被禁用或其他),同时我在控制台中输入内容以移动碎片。你能帮帮我吗?

【问题讨论】:

    标签: python loops tkinter


    【解决方案1】:

    首先,您希望如何与您的游戏互动?

    • 控制台中有文本?
    • 带按钮?
    • 有键盘/鼠标事件?

    “after”方法用于在一段时间后刷新屏幕。 它将调用您通过参数传递的方法。 您不必在其中放置无限循环。但是您必须检查游戏结束的简单条件,以显示另一个屏幕。

    如果必须使用控制台入口,对于初学者来说管理 GUI 更新和控制台可能有点困难。

    【讨论】:

    • 我使用控制台与游戏进行交互,用户输入要移动的棋子的行然后是列。我对 Tkinter 不太好我有打包按钮的想法,而不是“仅仅”在画布上绘制板,这样用户可以直接在 Tkinter 窗口中选择该块。但我觉得这很难,我试图然后显示板的 thkinter 画布,而不是破坏 Tkinter 窗口以在控制台中输入,而是保持窗口打开,以便用户在控制台中输入时可以看到板。
    • 您可以使用 Canvas 方法来查找玩家点击了哪个棋子或案例。这比冻结你的 gui 或使用其他线程来获取控制台条目要好。
    • 我在考虑 after 方法。如果将窗口创建和绘图方法分开,则不必使用 after 方法,也不必销毁窗口,因为您正在等待控制台获取用户输入。您可以在用户输入后使用您的 draw 方法来刷新您的 gui。您只需要更好地拆分您的程序功能:窗口创建、gui 更新、获取用户输入和游戏结束,至少
    【解决方案2】:

    我不确定你的问题是什么,但是,如果你想永远运行代码(直到你停止它)。你必须像这样使用while 循环:

    while "thing" == True:
        PrintBoard()
        PrintBoardGui()
        print("################","\n","Player 1","\n","################","\n")
        Player=1
        PlayerSelectPiece()
        MovePiece()
        PrintBoard()
        PrintBoardGui()
        print("################","\n","Player 2","\n","################","\n")
        Player=2
        if NbrPlayer==2:
            PlayerSelectPiece()
        else:
            AiSelectPiece()
        MovePiece()
        thing = False
    

    最后你把东​​西改成False,否则它会是无限的并且会出错。

    【讨论】:

      猜你喜欢
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多