我有一个我希望是一个相当简单的问题要解决,但我还没有设法让它工作,因为我想与我有限的知识。
我有一个C#脚本管道在字符串(一个单词)我的python代码粘贴在下面.我原来有这个代码显示在一个小OLED显示器上的字符串每次一个新的字符串被接收(我现在已经删除了这个函数的形式代码).我现在想改变这一点,使字符串显示图形使用Tkinter在我的监视器上的窗口.
我下面的努力有一个窗口打开时,一个字符串(message.decode())被接收到的话显示,但它不改变,它只是挂起.有人能建议我需要做什么,使这在同一个窗口中自动更改?
from board import SCL, SDA
import busio
from PIL import Image, ImageDraw, ImageFont
import adafruit_ssd1306
import socket
import sys
import struct
# importing whole module
from tkinter import *
from tkinter.ttk import *
# importing strftime function to
# retrieve system's time
from time import strftime
# Create the I2C interface.
i2c = busio.I2C(SCL, SDA)
# Create a UD socket
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
# Connect the socket to the port where the server is listening
server_address = '/tmp/CoreFxPipe_testpipe'
print('connecting to {}'.format(server_address))
try:
sock.connect(server_address)
except socket.error as msg:
print(msg)
sys.exit(1)
try:
word = ""
while True:
# amount_expected = struct.unpack('I', sock.recv(4))[0]
# print("amount_expected :", amount_expected)
message = sock.recv(128)
if message:
print("Received message : ", message.decode()) # making it a string
class Window(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master = master
self.pack(fill=BOTH, expand=1)
text = Label(self, text=message.decode())
text.place(x=70, y=90)
root = Tk()
app = Window(root)
root.wm_title("tkinter window")
root.geometry("200x200")
root.mainloop()
finally:
print('closing socket...')
sock.close()
1条答案
按热度按时间piv4azn71#
你可以在一个单独的
Thread
中运行socket consumer(接收器),并将它接收到的消息放入Queue
中,然后使用tkinter的after
方法在tkinter事件循环中消费消息。下面是一个例子: