kivy 在树莓派上的奇怪行为导致屏幕变黑
werid behaviour from kivy on raspery pi causing screen to go blank
我得到了一个带有主 GUI 线程和 RFID 线程的 kivy 应用程序(一个从设备读取并将作业放入 Queue()
的守护线程)。查询 Queue() 以查找任何传入作业的时钟设置了调度间隔。 GUI 在后台有一个图像,每当在队列中找到一个作业时,所有的小部件都会被清除,一个图像被添加到小部件,然后在两秒后被清除,然后循环继续。
class MainScreen(Screen):
background = BACKGROUND
def __init__(self):
super(MainScreen, self).__init__()
# Checking for cart input 30 times per second
self.event = Clock.schedule_interval(self.listen_for_cart_input, EVENT_INTERVAL_RATE)
self.add_widget(Image(source=self.background))
def listen_for_cart_input(self, dt):
try:
code = carts.get(timeout=QUEUE_TIMEOUT)
Clock.unschedule(self.event)
# Do Something
self.handle_transition()
except (Empty, AssertionError):
pass
def handle_transition(self):
trigger_back_to_main = Clock.create_trigger(self.back_to_main, timeout=TRANSITION_TIMEOUT)
self.clear_widgets()
self.add_widget(Image(source=image))
trigger_back_to_main()
def back_to_main(self, dt):
self.clear_widgets()
self.add_widget(Image(source=self.background))
self.event = Clock.schedule_interval(self.listen_for_cart_input, EVENT_INTERVAL_RATE)
它工作完美,但一天几次(每天插入卡约 100 次)插入卡后,屏幕变为空白并引发以下异常。请注意,只有屏幕变黑,应用程序才能正常运行。同样多次插卡后,屏幕再次显示图像。
这是一个错误吗?
我无法弄清楚引发异常的原因
[WARNING ] stderr: Exception in thread Thread-3:
[WARNING ] stderr: File "/usr/local/lib/python3.5/threading.py", line 914, in _bootstrap_inner
[WARNING ] stderr: self.run()
[WARNING ] stderr: File "/usr/local/lib/python3.5/threading.py", line 862, in run
[WARNING ] stderr: self._target(*self._args, **self._kwargs)
[WARNING ] stderr: File "/usr/local/lib/python3.5/site-packages/kivy/input/providers/hidinput.py", line 687, in _thread_run
[WARNING ] stderr: data = fd.read(struct_input_event_sz)
[WARNING ] stderr: OSError: [Errno 19] No such device
问题与将 raspberry pi 连接到液晶显示器的 HDMI 电缆有关。我通过更换电缆修复了它。
我得到了一个带有主 GUI 线程和 RFID 线程的 kivy 应用程序(一个从设备读取并将作业放入 Queue()
的守护线程)。查询 Queue() 以查找任何传入作业的时钟设置了调度间隔。 GUI 在后台有一个图像,每当在队列中找到一个作业时,所有的小部件都会被清除,一个图像被添加到小部件,然后在两秒后被清除,然后循环继续。
class MainScreen(Screen):
background = BACKGROUND
def __init__(self):
super(MainScreen, self).__init__()
# Checking for cart input 30 times per second
self.event = Clock.schedule_interval(self.listen_for_cart_input, EVENT_INTERVAL_RATE)
self.add_widget(Image(source=self.background))
def listen_for_cart_input(self, dt):
try:
code = carts.get(timeout=QUEUE_TIMEOUT)
Clock.unschedule(self.event)
# Do Something
self.handle_transition()
except (Empty, AssertionError):
pass
def handle_transition(self):
trigger_back_to_main = Clock.create_trigger(self.back_to_main, timeout=TRANSITION_TIMEOUT)
self.clear_widgets()
self.add_widget(Image(source=image))
trigger_back_to_main()
def back_to_main(self, dt):
self.clear_widgets()
self.add_widget(Image(source=self.background))
self.event = Clock.schedule_interval(self.listen_for_cart_input, EVENT_INTERVAL_RATE)
它工作完美,但一天几次(每天插入卡约 100 次)插入卡后,屏幕变为空白并引发以下异常。请注意,只有屏幕变黑,应用程序才能正常运行。同样多次插卡后,屏幕再次显示图像。
这是一个错误吗? 我无法弄清楚引发异常的原因
[WARNING ] stderr: Exception in thread Thread-3:
[WARNING ] stderr: File "/usr/local/lib/python3.5/threading.py", line 914, in _bootstrap_inner
[WARNING ] stderr: self.run()
[WARNING ] stderr: File "/usr/local/lib/python3.5/threading.py", line 862, in run
[WARNING ] stderr: self._target(*self._args, **self._kwargs)
[WARNING ] stderr: File "/usr/local/lib/python3.5/site-packages/kivy/input/providers/hidinput.py", line 687, in _thread_run
[WARNING ] stderr: data = fd.read(struct_input_event_sz)
[WARNING ] stderr: OSError: [Errno 19] No such device
问题与将 raspberry pi 连接到液晶显示器的 HDMI 电缆有关。我通过更换电缆修复了它。