Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 程序的主循环可以移出GUI吗?_Python_Design Patterns_User Interface_Tkinter - Fatal编程技术网

Python 程序的主循环可以移出GUI吗?

Python 程序的主循环可以移出GUI吗?,python,design-patterns,user-interface,tkinter,Python,Design Patterns,User Interface,Tkinter,如果有必要的话,我正在使用python 3/tkinter 在查看代码示例时,我注意到主循环通常位于代码的GUI部分,代码的其余部分提供回调,以便GUI在需要时调用 但我的模拟运行独立于用户交互;UI提供了一个视图,可以随时查看仿真中发生的事情,但它不能控制仿真中发生的事情。因此,我希望主循环与模拟有关,而不是与UI有关。我该怎么做呢?编写自己的主循环,调用检查和处理GUI事件的函数。为什么不将逻辑和表示分离呢。编写sim后端以响应单个基于文本的protcol以接收CMD并发回结果,然后通过un

如果有必要的话,我正在使用python 3/tkinter

在查看代码示例时,我注意到主循环通常位于代码的GUI部分,代码的其余部分提供回调,以便GUI在需要时调用


但我的模拟运行独立于用户交互;UI提供了一个视图,可以随时查看仿真中发生的事情,但它不能控制仿真中发生的事情。因此,我希望主循环与模拟有关,而不是与UI有关。我该怎么做呢?

编写自己的主循环,调用检查和处理GUI事件的函数。

为什么不将逻辑和表示分离呢。编写sim后端以响应单个基于文本的protcol以接收CMD并发回结果,然后通过unix套接字等gui程序与之通信。

在这种情况下,您应该在单独的线程中执行处理,然后让gui线程向该线程发送和接收消息


但是,不要试图从处理线程直接更新GUI。相反,您可以使用消息队列向GUI发送消息,类似于。重要的是
队列。get_nowait()
:如果队列中没有任何内容,您可以在GUI中定期运行此程序,而不阻塞其他线程。

如果这样做,有什么我应该知道的吗?我只是在学习tk/tkinter,但我的GUI需求相对简单。只是你不处理GUI消息的每一秒都是你的GUI没有响应的另一秒。tkinter是用于此特定目的的合理工具吗?还有,GUI功能通常不分为自己的线程有什么原因吗?对不起,我很困惑:你是说有一种方法可以使用tkinter而不调用其主循环,只要我愿意编写一些额外的代码?这基本上就是它的要点,是的。我指的是一个单独的线程。但是,只有队列需要在GUI和处理线程之间共享。我不知道python/tkinter,但例如,Qt允许多个事件循环,以及非UI线程中的事件循环。是否有一个GUI工具包,它甚至不需要mainloop类型构造,只公开一个可以调用其方法来显示内容的对象?(我知道这会很不寻常,我只是好奇)