【发布时间】:2017-12-20 00:02:21
【问题描述】:
我有一个脚本,它不断地接收文本并输出文本(它是一个基于文本的游戏)
我想通过 tkinter GUI 而非控制台运行它
Python : Converting CLI to GUI
这个问题完美回答了如何将“打印”转换为 GUI 插入。
问题是我的游戏显然运行了很多循环,这搞砸了“app.mainloop()”,因为它要么永远不会运行(然后 GUI 永远不会出现),要么你先运行它,然后它不会让其他任何东西运行。
我想我可以尝试并以某种方式错开这些循环,但这似乎很老套。我也可以尝试修改我的整个代码库以在 app.mainloop() 中运行,但我真正认为我需要的是多个线程。问题是,我不知道如何做到这一点。
还有一些其他问题,但它们要么不起作用,要么没有多大意义: Tkinter with multiple threads
Run process with realtime output to a Tkinter GUI
谢谢。
编辑:极其简化的代码:
def moveNorth():
print('You have moved north')
def interpreter(command):
if command == 'go north':
moveNorth()
else:
print('invalid command')
def listener():
playerchoice = sys.stdin.readline().strip()
return playerchoice
if __name__ == '__main__':
print('Welcome')
while playing:
interpreter(listener())
【问题讨论】:
-
while 循环是指
while bad_answer: ask_question()? -
是的,主要的是我的翻译。它基本上不断地倾听玩家的输入,然后根据它做事。现在我想起来了,这可能是唯一导致问题的循环,因为它是唯一的无限循环。不过我的代码很长,所以我可能忘记了一些东西。
-
发布你的一些代码,或者至少是一个Minimal, Complete, and Verifiable example。尝试尽可能多地删除代码,同时保持 bug 完整
-
我真的没有任何错误,因为我不知道如何开始。但是我添加了一个非常(!)简化的代码版本。
标签: python multithreading python-3.x tkinter