我正在使用 kivy 框架和 socket。在回呼函式中,這段代碼conn, addr=s.accept()給 kivy 帶來了問題并停止了它的作業。這意味著當我單擊start server按鈕時,kivy gui 沒有回應。我嘗試創建一個執行緒,我使用了:Thread(target=s.listen()).start()
但是這個執行緒的作業方式與 kivy 不同嗎?
我應該怎么做才能讓 kivy 回應套接字?
代碼:
import kivy
from threading import Thread
import socket
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.clock import Clock
s=socket.socket()
s.bind(('localhost',1234))
Thread(target=s.listen()).start()
print('listen')
class me (App):
def __init__(self):
super().__init__()
self.b=Button(text='start server',on_press=self.callback)
self.g=GridLayout(cols=4)
self.l=Label(text='listening...')
self.t=TextInput(hint_text='Type here your message: ' )
self.g.add_widget(self.b)
self.g.add_widget(self.t)
self.g.add_widget(self.l)
def build(self):
return self.g
def callback(self,click):
conn, addr=s.accept()
m=me()
m.run()
uj5u.com熱心網友回復:
嘗試這個:
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.app import App
import socket
from threading import Thread
class Me(App):
def __init__(self):
super().__init__()
self.b = Button(text='start server', on_press=self.callback)
self.g = GridLayout(cols=4)
self.l = Label(text='listening...')
self.t = TextInput(hint_text='Type here your message: ')
self.g.add_widget(self.b)
self.g.add_widget(self.t)
self.g.add_widget(self.l)
def build(self):
return self.g
def stream(self):
while True:
conn, addr = self.sock.accept()
print(addr)
conn.send(self.t.text.encode())
print(f"{self.t.text} sended!")
conn.close()
def callback(self, click):
self.sock = socket.socket()
self.sock.bind(('localhost', 1234))
self.sock.listen(1000)
Thread(target=self.stream).start()
print("server started")
m = Me()
m.run()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/427546.html
