2013-09-24 11 views

Odpowiedz

10

Odnośnie do pytania nr 2.

Sposób działania Kivy polega na osadzeniu instancji Widget. Ponieważ Image i Button są podklasami Widget, wszystko co musisz zrobić, to osadzić obraz wewnątrz przycisku. Zauważ, że pozycjonowanie wewnątrz widgetu zostało naprawione. Musisz podać wyraźne współrzędne.

To powiedziawszy, zawsze można osadzić kod Layout, aby uporządkować elementy, które wkładasz do przycisku.

Oto prostego 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: Przykład jak względny układ może być osadzony wewnątrz przycisku

W tym przypadku używam StackLayout zorganizować Image i Label w środku. Jak już wspomniałem, Button to Widget, a Kivy obsługuje widżety osadzania wewnątrz widżetów. Nie ma znaczenia, czy są to etykiety, przyciski czy układy.

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

Dzięki, tico. Jednak przypisanie pozycji obrazu względem rodzica wydaje się rodzić problem. Powiedzmy, że tekst twojego przycisku jest generowany dynamicznie (tzn. O zmiennej długości) i chcesz, aby obraz zawsze pojawiał się na szerokość 10 pikseli po lewej stronie tekstu - aby określić położenie obrazu, czy musisz napisać funkcję, która przyjmuje jako dane wejściowe liczbę znaków w tekście przycisku i określa odpowiednio wartość x? –

+0

W takim przypadku należy dodać 'Etykieta' i' Obraz' w innym "Układzie". Powiedziałbym "BoxLayout" i "orientation: horizontal". Myślę, że łatwiej jest podać inny przykład. –

Powiązane problemy