2013-03-11 19 views
10

Próbuję opracować aplikację e-mail w Kivy, w zasadzie po prostu jako ćwiczenie do nauki w i poza ramami ... Próbuję stworzyć początkowe okno i osiągnąłem trochę potknięcie się! Chodzi o to, że po prostu wyświetli listę e-maili w Odebranych, podobnie jak każda podstawowa aplikacja e-mail na urządzeniu mobilnym.Problem wyrównania tekstu przycisku Kivy

Problem polega na tym, że nie wiem, w jaki sposób uzyskać tekst każdego elementu listy (który jest po prostu przyciskiem), aby poprawnie wyrównać. Użycie przycisku "halign =" left "" w moim przycisku spowoduje wyrównanie tekstu w lewo, ale tylko względem każdego przycisku; nadal znajduje się w środku każdego przycisku.

Moja aktualna aplikacja jest trochę za duża, aby opublikować, więc jest to szybki i brudny przykład, który zrobiłem z przykładowego Kivy. (Zdaję sobie sprawę, że ten kod nie jest doskonały ... jak mówiłem szybko i brudno dla przykładów sake ... to działa!) Jak widać, dwa rzędy tekstu na każdym przycisku wyrównują się ze sobą, ale nie wszystkie są ogólnie dopasowane. Czy ktoś może zasugerować, co powinienem zrobić, aby wyrównać cały tekst, powiedzmy, 10 pikseli po lewej stronie każdego przycisku? Znalazłem jeden względnie brzmiącą rzecz na StackOverflow, ale tak naprawdę nie odpowiedział na pytanie, na przykład, wydawało się, że chodzi bardziej o użycie obrazów na przyciskach. Jestem nowy w Kivy, ale przeczytałem samouczki i dokumentację, a także obszernie przeszukałem Google - więc każda pomoc będzie bardzo ceniona!

import kivy 
kivy.require('1.0.8') 

from kivy.app import App 
from kivy.core.window import Window 
from kivy.uix.button import Button 
from kivy.uix.scrollview import ScrollView 
from kivy.uix.gridlayout import GridLayout 

import random 


class ScrollViewApp(App): 

    def build(self): 
     # create a default grid layout with custom width/height 
     layout = GridLayout(cols=1, spacing=10, size_hint=(None, None), 
          width=Window.width) 

     # when we add children to the grid layout, its size doesn't change at 
     # all. we need to ensure that the height will be the minimum required to 
     # contain all the childs. (otherwise, we'll child outside the bounding 
     # box of the childs) 
     layout.bind(minimum_height=layout.setter('height')) 

     # add button into that grid 
     for i in range(30): 
      btn = Button(text=str(i * random.random()) + '\n' + str(i * random.random()), 
         size=(300, 40), 
         size_hint=(None, None), 
         halign='left') 
      layout.add_widget(btn) 

     # create a scroll view, with a size < size of the grid 
     root = ScrollView(size_hint=(None, None)) 
     root.size = (Window.width, Window.height) 
     root.center = Window.center 
     root.add_widget(layout) 

     return root 

if __name__ == '__main__': 

    ScrollViewApp().run() 

Odpowiedz

24

dokumentacji Button rozpoczyna się "przycisk jest Label". Nawet w przypadku Widgets, które nie zawierają wyraźnego wzmianki o ich pochodzeniu, należy zanotować drugi wiersz w danym widżecie w postaci . W tym przypadku "Bazy: kivy.uix.label.Label".

To ustala, że ​​przycisk dziedziczy z etykiety. (Mówię o tym wyraźnie, ponieważ ta część oglądania odziedziczonych właściwości Klasy podstawowej czasami nie jest intuicyjna dla wszystkich).

Jeśli spojrzeć na Docs na etykiecie, w szczególności własność halign, to prosi, aby wykorzystać text_size osiągnąć prawidłowe wyrównanie tekstu. Oznacza to, że tekst jest wyrównany wewnątrz obwiedni ustawionej przez właściwość text_size. Ta właściwość może być ustawiona na:

a) Wielkość widgetu.

b) Mniej niż rozmiar wielkości widget (co szukasz)

c) Unconstrained na jednym z boków

d) lub zarówno

e) lub Ograniczony do innego Widget

Oto przykład wszystkich powyższych możliwości.

Made using Kivy catalog Demo present in examples http://wstaw.org/m/2013/03/11/plasma-desktopsL1945.png

Powodem korzystania text_size jest dać większą kontrolę użytkownikowi. Należy również spojrzeć na textalign example

6

Musisz ustawić text_size własność, coś takiego:

btn.text_size = (290, 40) 
+0

Ponadto, mając do obejrzenia text_align przykład pomoże. – Tshirtman

0

Jeśli chcesz uniknąć numery text.size, a następnie spróbuj tego:

text_size: self.size

Powiązane problemy