2014-10-30 16 views
8

Zastanawiam się, jak mogę zmienić tekst etykiety wykonanej wewnątrz języka Kivy przy użyciu Pythona. W jaki sposób miałbym wprowadzić dane użytkownika z Pythona jako tekst etykiety w kivy. (Przy okazji mam poprawne formatowanie w aktualnym programie, ale wkręciłem wklejanie do stackoverflow) Powiedz, czy chciałem, aby tekst etykiety z kodu był losową liczbą wygenerowaną w python, jak bym poszła o tym?Jak zmienić tekst etykiety w języku kivy za pomocą pythona

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() 

Odpowiedz

6

Tekst etykiety może być nieruchomość kivy, które mogą być później zmieniane i ponieważ jest to właściwość kivy będzie uaktualniany wszędzie. Oto przykład swojego .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() 

i swojej .kv

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

Po kliknięciu przycisku, to zadzwoń change_text() funkcji, które będą losowo zmienić tekst etykiety do losowej liczby całkowitej od 1 do 100.

+1

Dzięki za odpowiedź, ale czy można wywołać funkcję poza językiem kivy? Powiedzmy, że chciałbym zmienić tekst etykiety na ciąg z listy, czy mógłbym to zrobić bez konieczności naciskania przycisku, aby wywołać funkcję? Dzięki – user2896775

+1

Tak, możesz mieć gdziekolwiek w 'YourClass' linii' self.change_text() ', jak zwykle. Nie musisz wywoływać żadnej funkcji, jedyne co musisz zrobić, to przypisać nowy ciąg do (w tym przypadku) "random_number". – Tatarkow

Powiązane problemy