python - 同时等待屏幕和通讯输入

标签 python python-3.x

我退休了,正在尝试掌握 Python(您可能可以从代码中看出这一点!),并且正在尝试使用笔记本电脑和平板电脑(均在 Windows 8 下运行 Python 3.3.5)编写一个简单的游戏。
我的问题简而言之是这样的:
我有两个简单的工作程序(如下):一个等待按钮点击并更改屏幕颜色,另一个等待来自通信客户端的消息并更改屏幕颜色。
将这些组合到一个正在进行的程序中的最简单方法是什么,所以我们正在等待可能以任何顺序出现的屏幕或通信事件?
我已经尝试了我在这个站点和其他站点上发现的关于线程和等待的各种方法,但似乎没有一个是理想的。我将不胜感激任何帮助!

# PROGRAM 1 - wait for user to click button
from tkinter import *
win1 = Tk()
win1.attributes('-fullscreen', True)

def turnorange():
    win1.configure(bg='orange')
def turnwhite():
    win1.configure(bg='white')

btn1 = Button( win1 , text='Click for orange' , command=turnorange)
btn1.place(x=100,y=100)
btn2 = Button( win1 , text='Click for white' , command=turnwhite)
btn2.place(x=250,y=100)
btn_end = Button( win1 , text='Close' , command=exit)
btn_end.place(x=200,y=200)
win1.mainloop()

# PROGRAM 2 - wait for message from client
from tkinter import *
import socket
win1 = Tk()
win1.attributes('-fullscreen', True)

def changecolour(col): 
    win1.configure(bg=col)
    win1.update()

def startup():
    ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    ss.bind((socket.gethostname(), 8089))
    ss.listen(5)
    while True:
        conn, address = ss.accept()
        colour = conn.recv(64).decode()
        if len(colour) > 0:
            changecolour(colour)
            data = 'whatever'
            conn.send(data.encode())

btn = Button( win1 , text='Click to listen' , command=startup)
btn.place(x=100,y=100)
win1.mainloop()

最佳答案

您当前代码的问题是启动阻塞;您需要找到一种方法来轮询新连接,以便主循环可以继续监视其他事件。

试试这个 socket tutorial了解基础知识,以及this question有关使用非阻塞套接字的一些细节。

为了定期运行套接字检查代码,查看tk's after .

关于python - 同时等待屏幕和通讯输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31141369/

相关文章:

python - 代码从 python 2.7 到 3.5 (unicode)

python - 在 Pandas 中使用 group by 进行转换

python - 如何在 python 中使用 pptx 对表进行格式更改?

python - 处理python脚本的绝对/相对路径时的异常处理

python - 保留在设置 python 测试期间创建的项目

python - 将数据列表添加到 CSV 文件的各个单元格

python - libedit/readline 与 OS X 10.7 Lion 上的 ipython 3.2.2 冲突

python - 用很少的 RAM 优化我的大数据代码

Python 相当于将 POST 负载用单引号括起来

python - filter() 是否在 python 中就地工作?