2013-09-24 16 views

Antwort

10

In Bezug auf Frage # 2.

Die Art, wie Kivy funktioniert, ist die Einbettung von Widget Instanzen. Da Image und Button Unterklassen von Widget sind, müssen Sie nur ein Bild in einen Button einbetten. Beachten Sie, dass die Positionierung in einem Widget behoben ist. Sie müssen explizite Koordinaten angeben.

Das gesagt, Sie können immer ein Layout einbetten, um die Sachen zu organisieren, die Sie innerhalb des Knopfes setzen. Hier

ist die einfache ex

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.lang import Builder 

Builder.load_string(""" 
<ButtonsApp>: 
    orientation: "vertical" 
    Button: 
     text: "B1" 
     Image: 
      source: 'kivy.png' 
      y: self.parent.y + self.parent.height - 200 
      x: self.parent.x 
    Label: 
     text: "A label" 
""") 

class ButtonsApp(App, BoxLayout): 
    def build(self): 
     return self 

if __name__ == "__main__": 
    ButtonsApp().run() 

EDIT: Ein Beispiel, wie ein relatives Layout kann innerhalb eines Knopfes

In diesem Fall eingebettet ich eine StackLayout bin mit einem Image zu organisieren und a Label innen. Wie gesagt, Button ist ein Widget und Kivy arbeitet Widgets in Widgets einbetten. Es spielt keine Rolle, ob es sich um Beschriftungen, Schaltflächen oder Layouts handelt.

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.lang import Builder 

Builder.load_string(""" 
<ButtonsApp>: 
    orientation: "vertical" 
    Button: 
     StackLayout: 
      pos: self.parent.pos 
      size: self.parent.size 
      orientation: 'lr-tb' 
      Image: 
       source: 'kivy.png' 
       size_hint_x: None 
       width: 74 
      Label: 
       size_hint_x: None 
       width: 100 
       text: "The text" 
    Label: 
     text: "A label" 
""") 

class ButtonsApp(App, BoxLayout): 
    def build(self): 
     return self 

if __name__ == "__main__": 
    ButtonsApp().run() 
+0

Danke, tico. Das Zuweisen der Bildposition relativ zu dem übergeordneten Element scheint jedoch ein Problem zu verursachen. Nehmen wir an, der Text Ihrer Schaltfläche wird dynamisch generiert (dh mit variabler Länge) und Sie möchten, dass das Bild immer die Breite von 10 Pixeln links vom Text aufweist. Um die Bildposition zu bestimmen, müssen Sie eine Funktion schreiben nimmt als Eingabe die Anzahl der Zeichen im Text der Schaltfläche und bestimmt den x-Wert entsprechend? –

+0

In diesem Fall fügen Sie ein 'Label' und ein' Image' in einem anderen 'Layout' hinzu. Ich würde sagen "BoxLayout" und "Orientierung: horizontal". Ich schätze, es ist einfacher, Ihnen ein anderes Beispiel zu geben. –

Verwandte Themen