我退休了,正在尝试掌握 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/