Python Tkinter,帮助noob理解Tk';s环

Python Tkinter,帮助noob理解Tk';s环,python,loops,tkinter,Python,Loops,Tkinter,我是Python3Noob,正在创建一个跳棋游戏,我有很多函数。。。我的游戏循环如下: while EndGame==0: PrintBoard() PrintBoardGui() print("################","\n","Player 1","\n","################","\n") Player=1 PlayerSelectPiece() MovePiece() PrintBoard() Pr

我是Python3Noob,正在创建一个跳棋游戏,我有很多函数。。。我的游戏循环如下:

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窗口保持打开状态(mabye禁用或其他),同时在控制台中输入内容以移动碎片。你能帮我吗?

首先,你想如何与游戏互动

  • 控制台中有文本吗
  • 有纽扣吗
  • 使用键盘/鼠标事件
“after”方法用于在一段时间后刷新屏幕。 它将调用通过参数传递的方法。 你不应该在里面放一个无限循环。但是你必须用一个简单的条件来检查游戏的结束,以显示另一个屏幕


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

首先,您希望如何与游戏交互

  • 控制台中有文本吗
  • 有纽扣吗
  • 使用键盘/鼠标事件
“after”方法用于在一段时间后刷新屏幕。 它将调用通过参数传递的方法。 你不应该在里面放一个无限循环。但是你必须用一个简单的条件来检查游戏的结束,以显示另一个屏幕


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

我不确定您的问题是什么,但是,如果您想永远运行代码(直到您停止它)。您必须像这样使用
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,否则它将是无限的,它会出错。

我不确定你的问题是什么,但是,如果你想永远运行代码(直到你停止它)。您必须像这样使用
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
,否则它将是无限的,并且会出错。

我使用控制台与游戏交互,用户输入要移动的所需棋子的行,然后输入所需棋子的列。我对Tkinter不太在行我有个主意,把纽扣打包而不是“仅仅”在画布上绘制电路板,这样用户就可以直接在Tkinter窗口中选择工件。但我发现这相当困难,当时我正试图显示棋盘的画布,而不是破坏Tkinter窗口以在控制台中输入,而是让窗口保持打开状态,以便用户在控制台中输入时可以看到棋盘。您可以使用画布方法来查找玩家单击的棋子或棋盘。这比冻结gui或使用其他线程获取控制台条目要好。我正在考虑after方法。如果拆分窗口创建和绘图方法,则不必使用after方法,也不必销毁窗口,因为您正在等待控制台获得用户输入。用户输入后,可以使用绘图方法刷新gui。你只需要更好地分割你的程序功能:窗口创建、gui更新、获取用户输入和游戏结束,至少我使用控制台与游戏交互,用户输入所需片段的行,然后输入要移动的列。我对Tkinter不太在行我有个主意,把纽扣打包而不是“仅仅”在画布上绘制电路板,这样用户就可以直接在Tkinter窗口中选择工件。但我发现这相当困难,当时我正试图显示棋盘的画布,而不是破坏Tkinter窗口以在控制台中输入,而是让窗口保持打开状态,以便用户在控制台中输入时可以看到棋盘。您可以使用画布方法来查找玩家单击的棋子或棋盘。这比冻结gui或使用其他线程获取控制台条目要好。我正在考虑after方法。如果拆分窗口创建和绘图方法,则不必使用after方法,也不必销毁窗口,因为您正在等待控制台获得用户输入。用户输入后,可以使用绘图方法刷新gui。您只需要更好地分割程序功能:窗口创建、gui更新、获取用户输入和游戏结束,至少是这样