這個應用程式顯示了一個帶有視頻、徽標、用戶輸入欄位和提交按鈕的螢屏。它使用 FloatLayout 和 GridLayout。當為用戶輸入提供有效輸入時,如何使用它來切換螢屏?我想匯入 ScreenManager,但看起來 FloatLayout 和 ScreenManager 不太兼容。
'''
from kivy.app import App
from kivy.uix.video import Video
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.image import Image
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.widget import Widget
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
class iaScreen(Screen):
pass
class rtScreen(Screen):
pass
class MZ_Invest(App):
def build(self):
self.root_layout = FloatLayout()
self.window = GridLayout()
self.window.cols = 1
self.window.size_hint = (0.6,0.7)
self.window.pos_hint = {"center_x":0.5, "center_y":0.5}
#add widgets
#Video
video = Video(source='birds.mp4', state='play', volume = 0)
video.allow_stretch = False
video.options = {'eos': 'loop'}
video.opacity = 0.5
#Image
self.window.add_widget(Image(
source="mzi.png",
size_hint = (1.5,1.5)
))
#Label
self.greeting = Label(
text="How much would you like to invest?",
font_size = 18,
color='90EE90'
)
self.window.add_widget(self.greeting)
#User Input
self.user = TextInput(
multiline=False,
padding_y= (20,20),
size_hint = (1, 0.5)
)
self.window.add_widget(self.user)
#Button
self.button = Button(
text="Submit",
size_hint = (1,0.5),
bold = True,
background_color = '90EE90',
)
self.button.bind(on_press=self.callback)
self.window.add_widget(self.button)
self.root_layout.add_widget(video)
self.root_layout.add_widget(self.window)
return self.root_layout
def callback(self, instance):
if self.user.text.isnumeric() and int(self.user.text) >= 10000:
self.greeting.text = "Calculating: $" self.user.text
self.greeting.color = '90EE90'
else:
self.greeting.text = "Invalid"
self.greeting.color = "#FF0000"
if __name__ == "__main__":
MZ_Invest().run()
'''
uj5u.com熱心網友回復:
mz_invest.py:
from kivy.app import App
from kivy.uix.video import Video
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.image import Image
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.widget import Widget
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
class SM(ScreenManager):
def __init__(self, **kwargs):
super(SM, self).__init__(**kwargs)
class Screen1(Screen):
def __init__(self, **kwargs):
super(Screen1, self).__init__(**kwargs)
def callback(self, instance):
entry = self.manager.ids['screen1'].ids.my_input.text
greeting = self.manager.ids['screen1'].ids.my_label
if entry.isnumeric() and int(entry) >= 10000:
greeting.text = "Calculating: $" entry
greeting.color = '90EE90'
self.manager.current = 'screen2'
else:
greeting.text = "Invalid"
greeting.color = "#FF0000"
class Screen2(Screen):
def __init__(self, **kwargs):
super(Screen2, self).__init__(**kwargs)
class MZ_Invest(App):
def build(self):
sm = SM()
return sm
if __name__ == "__main__":
MZ_Invest().run()
mz_invest.kv:
<SM>:
Screen1:
id: screen1
name: 'screen1'
Screen2
id: screen2
name: 'screen2'
<Screen1>:
FloatLayout:
Video:
source: 'birds.mp4'
state: 'play'
volume: 0
allow_stretch: False
options: {'eos': 'loop'}
opacity: 0.5
GridLayout:
cols: 1
size_hint: (0.6,0.7)
pos_hint: {"center_x":0.5, "center_y":0.5}
Image:
size_hint: (1.5,1.5)
Label:
id: my_label
name: 'my_label'
text: "How much would you like to invest?"
font_size: 18
color: '90EE90'
TextInput:
id: my_input
name: 'my_input'
multiline: False
padding_y: (20,20)
size_hint: (1, 0.5)
Button:
text:"Submit"
size_hint: (1,0.5)
bold: True
background_color: '90EE90'
on_press: root.parent.ids['screen1'].callback(self)
<Screen2>:
Label:
text:"Welcome to Screen2"
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/468988.html
