Jaki jest preferowany sposób łączenia obrazu/ikony z tekstem w przycisku? Na przykład, w jaki sposób utworzysz przycisk z numerem text = 'my button'
i ikoną graficzną po lewej stronie tego tekstu?Łączenie obrazu i tekstu za pomocą przycisku w kivy
6
A
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()
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? –
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. –