2014-10-30 102 views
8

我想知道如何使用Python更改使用Kivy语言制作的标签文本。 像我将如何从python的用户输入作为kivy中的标签的文本。 (顺便说一句,我的格式在实际程序中是正确的,但我把它粘贴到了stackoverflow) 说如果我想让代码中的标签文本成为一个用python生成的随机数字,我该怎么去关于这样做?如何使用python更改kivy语言中的标签文本

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.screenmanager import ScreenManager, Screen 
from kivy.graphics import Color, Rectangle 
from kivy.properties import ObjectProperty 

# Create both screens. Please note the root.manager.current: this is how 
# you can control the ScreenManager from kv. Each screen has by default a 
# property manager that gives you the instance of the ScreenManager used. 


Builder.load_string(""" 
<[email protected]+AsyncImage> 
<[email protected]+AsyncImage> 
<MenuScreen>: 
GridLayout: 
    cols: 4 
    row_force_default: True 
    col_default_width: 175 
    row_default_height: 150 
    padding: 15 
    spacing: 15 
    canvas.before: 
     BorderImage: 
      # BorderImage behaves like the CSS BorderImage 
      border: 10, 10, 10, 10 
      source: '/Users/clayhigh/Desktop/kivy/aot.png' 
      pos: self.pos 
      size: self.size 
    Button: 
     text: 'Goto settings' 
     background_color: 1,0,0,0.5 
     on_press: root.manager.current = 'settings' 
    ButImage: 
     on_press: root.manager.current = 'UBW' 
     id: but 
     size_hint: .5, .5 
     opacity: 1 if self.state == 'normal' else .5 
     allow_stretch: True 
     keep_ratio: False 
     source: 'http://s3.amazonaws.com/rapgenius/1361742626_beautiful-ocean-beautiful-pictures-27115524-1440-900.jpg' 
     Label: 
      center: but.center 
      text: "UBW" 
      color: 0.78,0.145,0.016,2 
    ButImage: 
     id: lh 
     size_hint: .5, .5 
     opacity: 1 if self.state == 'normal' else .5 
     allow_stretch: True 
     keep_ratio: False 
     source: 'http://s3.amazonaws.com/rapgenius/1361742626_beautiful-ocean-beautiful-pictures-27115524-1440-900.jpg' 
     Label: 
      center: lh.center 
      text: "LH 2" 
      color: 0,0,0,1 
    ButImage: 
     id: ttl 
     size_hint: .5, .5 
     opacity: 1 if self.state == 'normal' else .5 
     allow_stretch: True 
     keep_ratio: False 
     source: 'http://s3.amazonaws.com/rapgenius/1361742626_beautiful-ocean-beautiful-pictures-27115524-1440-900.jpg' 
     Label: 
      center: ttl.center 
      text: "TwTl" 
      color: 0,0,0,1 
    ButImage: 
     id: gris 
     size_hint: .5, .5 
     opacity: 1 if self.state == 'normal' else .5 
     allow_stretch: True 
     keep_ratio: False 
     source: 'http://s3.amazonaws.com/rapgenius/1361742626_beautiful-ocean-beautiful-pictures-27115524-1440-900.jpg' 
     Label: 
      center: gris.center 
      text: "Gris" 
      color: 0,0,0,1 
    ButImage: 
     id: shig 
     size_hint: .5, .5 
     opacity: 1 if self.state == 'normal' else .5 
     allow_stretch: True 
     keep_ratio: False 
     source: 'http://s3.amazonaws.com/rapgenius/1361742626_beautiful-ocean-beautiful-pictures-27115524-1440-900.jpg' 
     Label: 
      center: shig.center 
      text: "Shig" 
      color: 0,0,0,1 
    Button: 
     text: 'Test3' 
     background_color: 1,0,0,0.5 
    Button: 
     text: 'Test4' 
     background_color: 1,0,0,0.5 
    Button: 
     text: 'Quit' 
     background_color: 1,0,0,0.5 
     on_press: App.on_stop 

<SettingsScreen>: 
GridLayout: 
    row_force_default: True 
    row_default_height: 100 
    cols: 2 
    canvas.before: 
     BorderImage: 
      # BorderImage behaves like the CSS BorderImage 
      border: 10, 10, 10, 10 
      source: '/Users/clayhigh/Desktop/kivy/ato.jpeg' 
      pos: self.pos 
      size: self.size 
    Button: 
     text: 'Button' 
     color: 0,0,.5 
     background_color: 1,0,0,1 
    Button: 
     text: 'Back to menu' 
     background_color: 1,0,0,1 
     on_press: root.manager.current = 'menu' 
<UBW>: 
GridLayout: 
    row_force_default: True 
    row_default_height: 100 
    cols: 2 
    canvas.before: 
     Color: 
      rgb: .5, .5, .5 
     Rectangle: 
      pos: self.pos 
      size: self.size 
     Color: 
      rgb: 1, 1, 1 
     BorderImage: 
      # BorderImage behaves like the CSS BorderImage 
      border: 10, 10, 10, 10 
      source: '/Users/clayhigh/Desktop/kivy/fsn.jpg' 
      pos: self.pos 
      size: self.size 
    Button: 
     text: 'Back to menu' 
     color: 0,0,.5 
     on_press: root.manager.current = 'menu' 
     background_color: 1,0,0,1 
    Label: 
     id: AName 
     text: "F S/N: UBW" 
     font_size: '24sp' 
""") 

# Declare both screens 


class MenuScreen(Screen): 
pass 


class SettingsScreen(Screen): 
pass 


class UBW(Screen): 
pass 

# Create the screen manager 
sm = ScreenManager() 
sm.add_widget(MenuScreen(name='menu')) 
sm.add_widget(SettingsScreen(name='settings')) 
sm.add_widget(UBW(name='UBW')) 


class TestApp(App): 

def build(self): 
    return sm 

if __name__ == '__main__': 
TestApp().run() 

回答

6

文本标签的可以是kivy属性,以后可以改变,因为它是一个kivy属性会自动同步更新。这里是你的.py

from kivy.app import App 
from kivy.uix.widget import Widget 
from kivy.properties import StringProperty 
import random 

class YourWidget(Widget): 
    random_number = StringProperty() 

    def __init__(self, **kwargs): 
     super(YourWidget, self).__init__(**kwargs) 
     self.random_number = str(random.randint(1, 100)) 

    def change_text(self): 
     self.random_number = str(random.randint(1, 100)) 

class YourApp(App): 
    def build(self): 
     return YourWidget() 

if __name__ == '__main__': 
    YourApp().run() 

和你.kv的例子

<YourWidget>: 
    BoxLayout: 
     size: root.size 
     Button: 
      id: button1 
      text: "Change text" 
      on_release: root.change_text() 
     Label: 
      id: label1 
      text: root.random_number 

当您单击该按钮,它会调用change_text()功能,它会随机标签的文字更改为随机整数在1和100之间。

+1

感谢您的回应,但是有可能在kivy语言之外调用该函数吗?假设我想将标签的文本从列表中更改为字符串,我可以这样做,而无需按下按钮来调用该函数吗? 谢谢 – user2896775 2014-10-31 20:57:11

+1

是的,你可以像往常一样在'YourClass'行'self.change_text()'中的任何地方。你不必调用任何函数,你唯一需要做的就是给一个新的字符串(在本例中)指定'random_number'。 – Tatarkow 2014-10-31 23:03:35