如何发现与python turtle或turtle屏幕关联的文件描述符?

2024-06-02 05:24:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我让学生编写一个应用程序,使用多个客户机的套接字,与服务器和彼此进行双向通信。它大致从以下代码开始:

https://www.geeksforgeeks.org/simple-chat-room-using-python/

不幸的是,我没有确切的代码,但可以描述我们正在做什么,以及问题是什么

每个客户机程序实例(与服务器上的客户机线程代理方法相反)也会实例化一个turtle for graphics(TkInter),我们希望将图形的状态传回服务器。这个问题之所以出现,是因为为了让海龟屏幕留在显示屏上,我们必须使用mainloop()方法,该方法是阻塞的。但是我们的聊天工具也在客户端上执行一个运行循环

我们将客户机程序运行循环代码提取到它自己的方法中,并在创建turtle和它的绘图之前在它自己的线程上启动它。我们的海龟(我们封装在它自己单独的类/文件中)想要处理鼠标点击。通过一些欺骗,我们让所有的线程一起玩,让我们的客户端程序运行循环,海龟主循环和点击捕捉器都工作

环境是Ubuntu Linux和Python 3

目前,我能为上市做的最好的事情是:

https://www.geeksforgeeks.org/simple-chat-room-using-python/

客户端能够连接、广播和发送消息。当我们点击turtle屏幕时,客户机运行循环就失控了,我们很难辨别信号的变化。我们已经追踪到了select.select的失踪,我很难弄清楚它是如何工作的。只要单击turtle屏幕,turtle click catcher就会触发并处理单击,但是客户端程序运行循环中的代码也在尝试处理select.select机制中的鼠标单击。它不会抛出异常,但也不会返回。我们用print语句将select.select括起来进行尝试和调试,但在单击鼠标后,代码不会在select.select后面的行上执行。如果我们再次单击,运行循环将再次在select.select之前进行打印,但执行线程似乎再次消失

我想,如果我们能够发现海龟屏幕的文件描述符,我们也许能够阻止它在select.select中被阻塞。我们查看了海龟屏幕上的“python dict”,但没有找到fd


Tags: 方法代码httpsorg服务器客户机屏幕www