我正在尝试创建一个包含两个屏幕的kivy应用程序,一个用于确定要检索的视频网址的选择屏幕,以及一个包含将播放所需视频的视频播放器的屏幕。
我想要发生的是让用户点击选择屏幕上的“加载视频”按钮并将视频播放器的状态更改为“播放”,但我不能为我的生活图如何引用视频播放器以实现更改。
Python文件:
import kivy, datetime,
kivy.require('1.8.0')
from calendar import monthrange
from kivy.app import App
from kivy.properties import ObjectProperty, NumericProperty, ListProperty
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.videoplayer import VideoPlayer
from kivy.uix.spinner import Spinner
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
class SelectionScreen(Screen):
play = ObjectProperty(None)
now = datetime.datetime.now()
videoscreen = ObjectProperty(None)
monthlist = []
for monthnumber in range(1,13):
monthlist.append(str("%02d"%monthnumber))
yearlist = []
for yearnumber in reversed(range(now.year-10,now.year+1)):
yearlist.append(str(yearnumber))
daylist = []
for daynumber in range(1, (monthrange(now.year, now.month)[1]+1)):
daylist.append(str("%02d"%daynumber))
class VideoScreen(Screen):
pass
class RacingReplayApp(App):
def build(self):
sm = ScreenManager(transition=NoTransition())
sm.add_widget(SelectionScreen(name='selectionscr'))
sm.add_widget(VideoScreen(name='videoscr'))
return sm
if __name__ == '__main__':
RacingReplayApp().run()
KV档案:
<SelectionScreen>:
FloatLayout:
size: root.size
pos: root.pos
canvas.before:
Color:
rgb: 1, .2, .3
Rectangle:
pos: self.pos
size: self.size
Spinner:
id: day_spinner
text: 'Day'
values: root.daylist
size_hint: (None, None)
pos_hint: {'center_x': .35, 'center_y': .75}
Spinner:
id: month_spinner
text: 'Month'
values: root.monthlist
size_hint: (None, None)
pos_hint: {'center_x': .5, 'center_y': .75}
Spinner:
id: year_spinner
text: 'Year'
values: root.yearlist
size_hint: (None, None)
pos_hint: {'center_x': .65, 'center_y': .75}
Button:
id: play
text: 'Load Video'
font_size: 16
size_hint: (.2, .1)
pos_hint: {'center_x': .5, 'center_y': .5}
on_press: root.manager.current = 'videoscr'
<VideoScreen>:
FloatLayout:
size: root.size
pos: root.pos
Video:
id: videostream
source: 'URL_GOES_HERE'
fullscreen: True
state: 'stop'
非常感谢任何建议。
编辑
正如sirpercival在下面指出的那样,每个屏幕都附有一个'on_enter'方法。我所做的就是将以下内容添加到kv文件中:
<VideoScreen>:
on_enter: videostream.state = 'play'
FloatLayout:
现在,当点击“加载视频”按钮时,应用程序将进入视频屏幕并触发on_enter方法,导致视频开始播放。
答案 0 :(得分:2)
我看到它的方式,你基本上有两种选择。
如果您只想更改视频播放器的状态,您可以做的是在App级别存储一个属性,然后您可以使用app.my_property
或从py文件从kv文件访问该属性使用my_app = App.get_running_app()
和my_app.my_property
。然后,无论何时需要,您都可以查看酒店。
选项二是将视频播放器屏幕设置为每当您切换到该屏幕时开始播放,这会在您按下加载视频时启动视频播放(因为您当前有on_press: root.manager.current = 'videoscr'
)。为此,您只需为屏幕实施on_enter()
(和/或on_pre_enter()
)方法。