This commit is contained in:
yumoqing 2020-11-23 20:37:09 +08:00
parent 87cd36ffba
commit cb4c5f25ec
2 changed files with 65 additions and 38 deletions

View File

@ -1,3 +1,4 @@
import time
from kivy.uix.video import Video from kivy.uix.video import Video
from kivy.logger import Logger from kivy.logger import Logger
from kivy.core.window import Window from kivy.core.window import Window
@ -49,3 +50,48 @@ class NewVideo(BGColorBehavior, Video):
if video.position is None: if video.position is None:
return return
super()._on_video_frame(*largs) super()._on_video_frame(*largs)
#
# try to fix up the error
def unload(self,try_cnt=0):
"""
Traceback (most recent call last):
File "main.py", line 288, in <module>
myapp.run()
File "C:\Python37\lib\site-packages\kivy\app.py", line 855, in run
runTouchApp()
File "C:\Python37\lib\site-packages\kivy\base.py", line 504, in runTouchApp
EventLoop.window.mainloop()
File "C:\Python37\lib\site-packages\kivy\core\window\window_sdl2.py", line 747, in mainloop
self._mainloop()
File "C:\Python37\lib\site-packages\kivy\core\window\window_sdl2.py", line 479, in _mainloop
EventLoop.idle()
File "C:\Python37\lib\site-packages\kivy\base.py", line 348, in idle
Clock.tick_draw()
File "C:\Python37\lib\site-packages\kivy\clock.py", line 598, in tick_draw
self._process_events_before_frame()
File "kivy\_clock.pyx", line 427, in kivy._clock.CyClockBase._process_events_before_frame
File "kivy\_clock.pyx", line 467, in kivy._clock.CyClockBase._process_events_before_frame
File "kivy\_clock.pyx", line 465, in kivy._clock.CyClockBase._process_events_before_frame
File "kivy\_clock.pyx", line 167, in kivy._clock.ClockEvent.tick
File "C:\Python37\lib\site-packages\kivy\uix\video.py", line 174, in _do_video_load
self.unload()
File "C:\Python37\lib\site-packages\kivy\uix\video.py", line 240, in unload
self._video.stop()
File "C:\Python37\lib\site-packages\kivy\core\video\video_ffpyplayer.py", line 325, in stop
self.unload()
File "C:\Python37\lib\site-packages\kivy\core\video\video_ffpyplayer.py", line 366, in unload
self._thread.join()
File "C:\Python37\lib\threading.py", line 1039, in join
raise RuntimeError("cannot join thread before it is started")
RuntimeError: cannot join thread before it is started
"""
try:
super().unload()
return
except Exception as e:
if try_cnt > 3:
print('video.unload() tried 3 time,still error....',e)
raise e
time.sleep(0.1)
return unload(try_cnt+1)

View File

@ -23,6 +23,8 @@ class OrientationLayout(WidgetReady, SwipeBehavior, FloatLayout):
Clock.schedule_once(self.build_children,0) Clock.schedule_once(self.build_children,0)
self.bind(on_swipe_left=self.toggle_second) self.bind(on_swipe_left=self.toggle_second)
self.bind(on_swipe_right=self.toggle_second) self.bind(on_swipe_right=self.toggle_second)
self.bind(size=self.on_size_changed)
self.bind(pos=self.on_size_changed)
def build_children(self, *args): def build_children(self, *args):
if isinstance(self.main_widget, dict): if isinstance(self.main_widget, dict):
@ -40,26 +42,16 @@ class OrientationLayout(WidgetReady, SwipeBehavior, FloatLayout):
return self.width > self.height return self.width > self.height
def toggle_second(self,*args): def toggle_second(self,*args):
print('toggle_second() called ..')
if self.isLandscape(): if self.isLandscape():
if self.second_flg: if self.second_flg:
print('remove second widget ..')
self.remove_widget(self.widget_second) self.remove_widget(self.widget_second)
self.second_flg = False self.second_flg = False
else: else:
print('add second widget ..',self.widget_second)
self.add_widget(self.widget_second) self.add_widget(self.widget_second)
self.second_flg = True self.second_flg = True
self.on_size(self.size) self.on_size_changed(self.size)
def on_size_changed(self,*args):
def on_ready(self,*args):
Clock.schedule_once(self.two_widget_layout,0)
def on_size(self,*args):
Clock.schedule_once(self.two_widget_layout,0)
def on_pos(self,*args):
Clock.schedule_once(self.two_widget_layout,0) Clock.schedule_once(self.two_widget_layout,0)
def two_widget_layout(self, *args): def two_widget_layout(self, *args):
@ -71,46 +63,35 @@ class OrientationLayout(WidgetReady, SwipeBehavior, FloatLayout):
self.horizontal_layout() self.horizontal_layout()
else: else:
self.vertical_layout() self.vertical_layout()
self.do_layout()
def horizontal_layout(self): def horizontal_layout(self):
self.widget_main.size_hint_x = 1 self.widget_main.size_hint = (None,None)
self.widget_main.size_hint_y = 1
self.widget_main.size = self.size self.widget_main.size = self.size
self.widget_main.pos = self.pos self.widget_main.pos = self.pos
self.widget_second.height = self.height self.widget_second.height = self.height
self.widget_second.size_hint_x = None self.widget_second.size_hint = (None,None)
self.widget_second.size_hint_y = 1
self.widget_second.width = self.width * self.height / self.width self.widget_second.width = self.width * self.height / self.width
self.widget_second.pos = (0,0) self.widget_second.pos = (0,0)
self.widget_second.opacity = 0.6 self.widget_second.opacity = 0.6
if not self.widget_main in self.children: self.clear_widgets()
print('horizontal:main_widget:width=%.02f,height=%.02f,pos=(%.02f,%.02f)' % (self.widget_main.width,self.widget_main.height,*self.widget_main.pos))
self.add_widget(self.widget_main) self.add_widget(self.widget_main)
if self.widget_second in self.children:
self.remove_widget(self.widget_second)
print('horizontal:second_widget:width=%.02f,height=%.02f,pos=(%.02f,%.02f)' % (self.widget_second.width,self.widget_second.height,*self.widget_second.pos))
if self.second_flg: if self.second_flg:
self.add_widget(self.widget_second) self.add_widget(self.widget_second)
def vertical_layout(self): def vertical_layout(self):
self.widget_main.size_hint_x = 1 self.widget_main.size_hint = (None,None)
self.widget_main.size_hint_y = None self.widget_main.size = (self.width, \
self.widget_main.width = self.width self.width / 16 * 10)
self.widget_main.height = self.width / 16 * 10
self.widget_main.pos = (0, self.height - self.widget_main.height) self.widget_main.pos = (0, self.height - self.widget_main.height)
self.widget_second.width = self.width self.widget_second.size_hint = (None, None)
self.widget_second.size_hint_x = 1 self.widget_second.size = (self.width, \
self.widget_second.size_hint_y = None self.height - self.widget_main.height)
self.widget_second.height = self.height - self.widget_main.height
self.widget_second.pos = (0,0) self.widget_second.pos = (0,0)
self.widget_second.opacity = 1 self.widget_second.opacity = 0.6
if not self.widget_main in self.children: self.clear_widgets()
self.add_widget(self.widget_main) self.add_widget(self.widget_main)
print('vertical:main_widget:width=%.02f,height=%.02f,pos=(%.02f,%.02f)' % (self.widget_main.width,self.widget_main.height,*self.widget_main.pos))
if not self.widget_second in self.children:
self.add_widget(self.widget_second) self.add_widget(self.widget_second)
print('vertical:second_widget:width=%.02f,height=%.02f,pos=(%.02f,%.02f)' % (self.widget_second.width,self.widget_second.height,*self.widget_second.pos))
def main_widget_built(self,o,w): def main_widget_built(self,o,w):
print('main_widget_built() called ...') print('main_widget_built() called ...')