Как получить целое число в качестве пользовательского ввода, который впоследствии будет использоваться в качестве параметра в Kivy? - PullRequest
0 голосов
/ 19 апреля 2020

Я новичок ie в Киви, и я делаю список тренировок. Я собираю количество наборов, которое хочет пользователь, и в следующем окне я хочу, чтобы пользователь ввел количество повторений в каждом наборе. Чтобы получить пользовательский ввод, я использовал этот

Python код:

    ActiveExerciseSet = None
    class AddWorkoutWidget(Screen):
        exercise_set = ObjectProperty("0")

        def AddExercise(self):
        ActiveExerciseSet = self.exercise_set.text

код Kivy:

<AddWorkoutWidget>
    exercise_set : exercise_set
            Label:
                text: "Number of sets "

            TextInput:
                id: exercise_set
                input_filter: 'int'
                multiline: False

            Button:
                text: 'Number of reps'
                on_press:root.AddExercise()

Теперь я хочу использовать количество наборов как все oop параметр

class AddSetWidget(GridLayout,Screen):
    def __init__(self, **kwargs):
        super(AddSetWidget, self).__init__(**kwargs)  # call grid layout parameters
        self.cols = int(ActiveExerciseSet)
        for I in self.col:
            pass

но я продолжаю получать TypeError: аргумент int () должен быть строкой, байтовоподобным объектом или числом, а не NoneType

есть ли способ превратить это в целое число?

Спасибо

1 Ответ

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

Я думаю, что есть логическая ошибка. Вот в чем дело

ActiveExerciseSet = None # this is a global variable
class AddWorkoutWidget(Screen):
    exercise_set = ObjectProperty("0")

    def AddExercise(self):
        ActiveExerciseSet = self.exercise_set.text #this creates a local variable within this function

, поэтому, когда вы запускаете эту функцию, глобальная переменная по-прежнему None, где вы думали, что ей присвоено значение

class AddSetWidget(GridLayout,Screen):
    def __init__(self, **kwargs):
        super(AddSetWidget, self).__init__(**kwargs)  # call grid layout parameters
        self.cols = int(ActiveExerciseSet)
        #this is looking for a local variable
        #and not the global variable
        for I in self.col:
            pass

Следовательно, вы получаете ошибку что это NoneType - что правильно, поскольку вашей глобальной переменной присвоено значение None

Решение Чтобы использовать / назначить значение для global variable, вы нужно использовать ключевое слово global

def AddExercise(self):
    global ActiveExerciseSet#reference to global variable
    ActiveExerciseSet = self.exercise_set.text


class AddSetWidget(GridLayout,Screen):
    def __init__(self, **kwargs):
        super(AddSetWidget, self).__init__(**kwargs)  # call grid layout parameters
        global ActiveExerciseSet #reference to global variable
        self.cols = int(ActiveExerciseSet)
        for I in self.col:
            pass
...