Kivy TextInput CheckBox Communication - PullRequest
       63

Kivy TextInput CheckBox Communication

0 голосов
/ 20 апреля 2020

У меня есть пара TextInputs с флажком рядом с ними. Я хочу просмотреть их (нажмите Tab> go, чтобы перейти к следующему вводу текста без флажка. Введите значение и нажмите Enter> go, чтобы перейти к следующему вводу текста и установите флажок). Все это работает путем настройки этого определения TextInput:

<TextInput>:
    multiline: False
    size_hint_x: None
    padding_y: [self.height / 2.0 - (self.line_height / 2.0) * len(self._lines), 0] #centers middle
    halign: 'center'
    write_tab: False
    input_type: 'number'
    input_filter: 'int'

Кроме того, я сделал некоторые вещи, такие как разрешить только ввод числа и центрирование текста, как вы можете видеть. Мои настоящие CheckBox и TextInputs выглядят так:

            CheckBox:
                id: gre3
                on_active: root.change_gain(*args, gre3Val.text)
            TextInput:
                id: gre3Val
                hint_text: 'Green #4 Gain [%]'
                on_text_validate: 
                    gre3.trigger_action() if self.text != '' else 0
                    red4Val.focus = True if self.text != '' else 0

, из которого я вызываю эту функцию:

    def change_gain(self, *argv):

        checkBox = self.getID(argv[0]) #this simply returns the actual id of the object
        checkBoxValue = argv[1] #True/False
        gainValue = argv[2] #int

        if int(gainValue) >= 100:
            gainValue = 100
            tempObj = checkBox + 'Val'
            self.ids[tempObj].text = '100'
        # if color == 'red':
        #     print('Not yet implemented')
        #     #change_laser(s, )
        print(checkBox)
        print(checkBoxValue)
        print(gainValue)

        if checkBox[0:3] == 'red':
            tempColor = 'Red'
        elif checkBox[0:3] == 'gre':
            tempColor = 'Green'
        else:
            tempColor = 'Blue'

        tempNo = int(checkBox[3])

        if checkBoxValue:
            self.statusText = tempColor + ' #' + str(tempNo+1) + ' enabled ' + '(' + str(gainValue) + ' %)'
        else:
            self.statusText = tempColor + ' #' + str(tempNo+1) + ' disabled'

Функция еще не завершена. Тем не менее, вы можете видеть, что я ограничил ввод до 100. Теперь моя проблема: когда я в поле TextInput, которое связано с уже установленным флажком и обновляет значение, флажок становится не отмеченным , потому что способа я связываю оба виджета (checkboxName.trigger_action ()). Есть ли лучший способ для этого, поэтому я вызываю связанное действие флажка и проверяю его?

...