在socket服务器上运行Kivy应用时黑屏



我想更新自我。每次套接字对象从客户端套接字接收数据时,屏幕都保持黑色。为什么会发生这种情况?

from kivy.app import App
from kivy.uix.label import Label
from kivy.core.window import Window
from kivy.clock import Clock
import socket
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from kivy.properties import ObjectProperty
import time

# Basic class Float Layout
class MyWidget(GridLayout):
string = ObjectProperty('')
def __init__(self, **kwargs):
super(MyWidget, self).__init__(**kwargs)

self.register_event_type('on_custom_event')
self.cols = 1
self.string = Label(text = 'Server Started')

def dispatch_event(self,*args):
self.dispatch('on_custom_event', "test_message")
def on_custom_event(self, *args):
# Get data from serial port
c, addr = s.accept()
value = c.recv(1024) 
if value != []:
value = value.decode('utf-8')  
print("value",value)

text = "Bienvenido {0}"
data = text.format(value)
self.string.text = data
return self.string
def callback(*args):
print('Bienvenido {}', args)
# Main App class
class MyApp(App):
def __init__(self, **kwargs):
super(MyApp, self).__init__(**kwargs)

def build(self):
w = MyWidget()
w.bind(on_custom_event = callback)
refresh_time = 5
Clock.schedule_interval(w.dispatch_event, refresh_time)
return w
# Main program
if __name__ == '__main__':
# Connect to serial port first
host = 'Localhost' 
port = XXX
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
try:
s.bind((host, port)) 
print("socket binded to port", port)
s.listen(5) 
except:
print('Failed to connect') 
exit()

MyApp().run()
c.close() 

每次套接字服务器从客户端接收数据时,都应该创建一个新事件。这个事件应该创建一个具有相同数据的新字符串,并且对象字符串应该在key窗口中更新。

在您的MyWidget类中,__init__()方法创建了Label,但从未将其添加到MyWidget。要解决这个问题,只需添加Label:

def __init__(self, **kwargs):
super(MyWidget, self).__init__(**kwargs)

self.register_event_type('on_custom_event')
self.cols = 1
self.string = Label(text = 'Server Started')
self.add_widget(self.string)  # add the Label to MyWidget

相关内容

最新更新