Kivy CheckBox 看起来像实心黑框(不是复选框)

2022-01-15 00:00:00 python kivy

问题描述

我正在制作一个 BoxLayout 小部件(orientation = 'horizo​​ntal'),其中包含三个小部件、一个标签、一个文本框和一个复选框.

I am making a BoxLayout widget (orientation = 'horizontal') that contains three widgets inside of it, a label, a text box, and a check box.

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

这会产生以下小部件 (thisRow):

This produces the following widget (thisRow):

勾选后...

最右边的黑框实际上是复选框,并且可以正常工作,但是用户无法知道它实际上是一个复选框.我希望中间有一个较小的空方块,如图 这里的图片所示.

The rightmost black box is actually the checkbox, and works functionally, however there is no way for the user to know that it is in fact a checkbox. I would expect a smaller empty square in the middle, as is depicted in pictures here.

如何获得传统的复选框图像(较小的空方框)?或者一般来说,我怎样才能更明显地表明该框是一个复选框,而不仅仅是一个空标签?

How do i get the traditional checkbox image (smaller empty square box)? Or generally, how can I make it more obvious that the box is a check box and not just an empty label?

谢谢


解决方案

这是一个非常有趣的问题,Malonge 很好地尝试了它.现在(1.9.2-dev) CheckBox 的井上仍然有固定的大小,称之为背景.它是 Widget 从 atlas 中获取的图像,并在状态更改时更改.因此,直到 现在 之前,还没有明确的方法可以做到这一点.这是一个例子.很快在 master 上会有 CheckBox(color=[r,g,b,a]) 选项.谢谢;)

This is really interesting question and Malonge tried it in a good way. Right now(1.9.2-dev) there is still fixed size on CheckBox's well, call it a background. It's an image that Widget takes from atlas and changes if the state changes. Therefore until now there was no clear way how to do it. Here is an example. Soon on master there'll be CheckBox(color=[r,g,b,a]) option. Thanks ;)

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())

相关文章