python - 在屏幕管理器 (Kivy) 中控制小部件的属性
问题描述
我是新来的基维。我正在尝试制作一个由多个屏幕组成的应用程序。每个屏幕都包含一个布局和一些小部件。我想从我的按钮中获得常用功能,而不仅仅是切换屏幕。例如,我想使用按钮的 on_press 方法更改标签的文本。我怎样才能做到这一点?这是我的 .py 代码:
import kivy
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import ObjectProperty, NumericProperty
from kivy.animation import Animation
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
class ScreenOne(Screen):
flo = ObjectProperty(None)
def b1p(self, instance):
global psss
psss = "1"+psss
print("okok")
print(Manager.__dict__)
print(root.ids.screen_one.ids.label1.text)
## print(ScreenOne.flo.button1.text)
instance.text = "hk"
class ScreenTwo(Screen):
pass
class ScreenThree(Screen):
pass
global psss
psss= ""
class Manager(ScreenManager):
## font_sizte = NumericProperty(20)
screen_one = ObjectProperty(None)
screen_two = ObjectProperty(None)
screen_three = ObjectProperty(None)
def b1p(self):
global psss
psss = "1"+psss
print("okok")
## self.button1.text = "hi"
class ScreensApp(App):
font_size_pssscreen = 30
shx_pssscreen = 0.1
shy_pssscreen = 0.15
def build (self):
return Manager()
if __name__ == "__main__":
ScreensApp().run()
和.kv代码:
#:kivy 1.8.0
<ScreenOne>:
flo : flo
FloatLayout:
id:flo
label1 : label1
button1:button1
button2:button2
button3:button3
button4:button4
button5:button5
button6:button6
button7:button7
button8:button8
button9:button9
Button:
font_size :app.font_size_pssscreen
color:0.3,0.6,0.7,1
size_hint:app.shx_pssscreen,app.shy_pssscreen
id:button1
pos_hint:{"x":.3,"top":.75}
back_color:.1,.3,.6,1
text:"1"
on_press:root.b1p(root.manager)
#on_press: self.text +=root
Button:
id:button2
font_size :app.font_size_pssscreen
color:0.3,0.6,0.7,1
size_hint:app.shx_pssscreen,app.shy_pssscreen
pos_hint:{"x":0.45,"top":.75}
text:"2"
on_press:button2.text:"jio"
Button:
id:button3
font_size :app.font_size_pssscreen
color:0.3,0.6,0.7,1
size_hint:app.shx_pssscreen,app.shy_pssscreen
pos_hint:{"x":0.6,"top":.75}
text:"3"
Button:
id:button4
font_size :app.font_size_pssscreen
color:0.3,0.6,0.7,1
size_hint:app.shx_pssscreen,app.shy_pssscreen
pos_hint:{"x":0.3,"top":.55}
text:"4"
on_press:root.manager.current = 'screen2'
Button:
id:button5
font_size :app.font_size_pssscreen
color:0.3,0.6,0.7,1
size_hint:app.shx_pssscreen,app.shy_pssscreen
pos_hint:{"x":0.45,"top":.55}
text:"5"
Button:
id:button6
font_size :app.font_size_pssscreen
color:0.3,0.6,0.7,1
size_hint:app.shx_pssscreen,app.shy_pssscreen
pos_hint:{"x":0.6,"top":.55}
text:"6"
Button:
id:button7
font_size :app.font_size_pssscreen
color:0.3,0.6,0.7,1
size_hint:app.shx_pssscreen,app.shy_pssscreen
pos_hint:{"x":0.3,"top":.35}
text:"7"
Button:
id:button8
font_size :app.font_size_pssscreen
color:0.3,0.6,0.7,1
size_hint:app.shx_pssscreen,app.shy_pssscreen
pos_hint:{"x":0.45,"top":.35}
text:"8"
Button:
id:button9
font_size :app.font_size_pssscreen
color:0.3,0.6,0.7,1
size_hint:app.shx_pssscreen,app.shy_pssscreen
pos_hint:{"x":0.6,"top":.35}
text:"9"
Label:
id:label1
font_size :app.font_size_pssscreen
color:0.3,0.6,0.7,1
size_hint:app.shx_pssscreen,app.shy_pssscreen
pos_hint:{"x":0.0,"top":1.3}
text:"w"
<ScreenTwo>:
Button:
text:"hi"
<ScreenThree>:
Button:
text:"hi"
<Manager>:
id: screen_manager
screen_one: screen_one
screen_two:screen_two
screen_three:screen_three
ScreenOne:
id:screen_one
name: 'screen1'
manager:screen_manager
ScreenTwo:
id:screen_two
name: 'screen2'
manager:screen_manager
ScreenThree:
id:screen_three
name: 'screen3'
manager:screen_manager
解决方案
在您的b1p()
方法中ScreenOne
,只需添加一个更改文本的调用:
class ScreenOne(Screen):
flo = ObjectProperty(None)
def b1p(self, instance):
global psss
psss = "1"+psss
print("okok")
# next line changes the text of label1
self.ids.label1.text = 'Changed Text'
推荐阅读
- maven - 为 Gradle IntelliJ 插件项目添加存储库插件
- ubuntu - 如何在 ubuntu 20.04 焦点上下载 dotnet-sdk-2.2?
- express - 为什么某些 HTTP 标头需要在 express 中明确允许?
- python - 包含括号的表达式出现错误
- firebase - Firebase 托管重写为 html 路由文件
- reactjs - 盖茨比 - 下载的文件总是损坏
- javascript - 获取无法读取 javascript 中未定义错误的属性“样式”
- x86 - cs register 如何在保护模式下工作?
- c++ - 检查泛型 lambda 参数的类型
- java - 从 Spring 在 React 中捕获异常时遇到问题