2015-04-16 6 views
5

Sto creando un widget BoxLayout (orientamento = 'orizzontale') che contiene tre widget al suo interno, un'etichetta, una casella di testo e una casella di controllo.Kivy CheckBox assomiglia a una scatola nera piena (non una casella di controllo)

thisRow = BoxLayout(orientation='horizontal') 
l = Label(text='Enter plate 1:\n(Plate #)') 
t = TextInput(text = 'this is a text box') 
c = CheckBox() 
thisRow.add_widget(l) 
thisRow.add_widget(t) 
thisRow.add_widget(c) 

Questo produce il seguente widget di (thisRow):

enter image description here

Dopo che la casella è selezionata ...

enter image description here

La scatola nera più a destra è in realtà la casella di controllo e funziona in modo funzionale, tuttavia non è possibile per l'utente sapere che si tratta di una casella di controllo. Mi aspetterei un quadratino vuoto più piccolo nel mezzo, come illustrato nelle immagini here.

Come ottengo l'immagine della casella di controllo tradizionale (scatola quadrata vuota più piccola)? O in generale, come posso rendere più ovvio che la casella sia una casella di controllo e non solo un'etichetta vuota?

Grazie

+0

Penso che il problema è che la casella di controllo viene ridimensionata per riempire l'intera scatola. Quello che vuoi è un altro contenitore che consente alla casella di controllo di mantenere le sue dimensioni naturali e di fluttuare nel mezzo. –

risposta

1

si presenta come la casella di controllo più piccola è nascosto quando il colore di sfondo è nero. Ecco un esempio di uno sfondo rosso.

enter image description here

Non è l'ideale, perché mi piace il fondo nero, ma posso correre con esso per ora. Se qualcuno sa come farlo con uno sfondo nero sarebbe fantastico. Grazie

3

Questa è una domanda davvero interessante e Malonge l'ha provato in un buon modo. In questo momento (1.9.2-dev) c'è ancora una dimensione fissa sul pozzo CheckBox, chiamiamola in sottofondo. È un'immagine che lo Widget prende dall'atlante e cambia se lo stato cambia. Pertanto fino al now non c'era un modo chiaro come farlo. Ecco un esempio. Presto sul master ci sarà l'opzione CheckBox(color=[r,g,b,a]). Grazie;)

from kivy.lang import Builder 
from kivy.base import runTouchApp 
from kivy.uix.boxlayout import BoxLayout 
Builder.load_string(''' 
<CheckBoxBG>: 
    Label: 
    TextInput: 
    CheckBox: 
     canvas.before: 
      Color: 
       rgb: 1,0,0 
      Rectangle: 
       pos:self.center_x-8, self.center_y-8 
       size:[16,16] 
      Color: 
       rgb: 0,0,0 
      Rectangle: 
       pos:self.center_x-7, self.center_y-7 
       size:[14,14] 
''') 
class CheckBoxBG(BoxLayout):pass 
runTouchApp(CheckBoxBG()) 
1

In alternativa, per cambiare la vostra caselle di sfondo, è possibile utilizzare un altro immagine da atlante o creare immagini e poi caricarle:

mycheckbox= CheckBox(
background_checkbox_normal ='tlas://data/images/defaulttheme/button_disabled' 
background_checkbox_down = 'my_checkboxes_checked.png' 
) 

In Kivy 1.9.2. dev0 (e apparentemente dalla versione 1.9.0) è possibile modificare l'immagine di sfondo delle checkbox. Per impostazione predefinita, Kivy utilizza per questi sfondi dall'atlante *.

background_checkbox_normal = StringProperty('atlas://data/images/defaulttheme/checkbox_off') #when the checkbox is not active. 
background_checkbox_down = StringProperty('atlas://data/images/defaulttheme/checkbox_on') # when the checkbox is active. 
background_checkbox_disabled_normal = StringProperty('atlas://data/images/defaulttheme/checkbox_disabled_off') #when the checkbox is disabled and not active. 
background_checkbox_disabled_down = StringProperty('atlas://data/images/defaulttheme/checkbox_disabled_on') #when the checkbox is disabled and active. 

Si può avere uno sguardo here a tutti gli attributi:

* L'atlante è un pacchetto di texture multiple che riduce il numero di immagini caricate e velocizzare il caricamento delle applicazioni. Hai visto un'anteprima dell'atlante in Python Install Folder\Lib\site-packages\kivy\data\images\defaulttheme-0.png

Problemi correlati