Я создаю опцию выбора дня и времени для пользователя. Для этого я пытаюсь создать кнопку, которая only перемещается на следующий экран (при нажатии), когда все счетчики имеют выбранные значения.
Чтобы программа могла определить момент нажатия на счетчики (день, час и минуты), я назначил значение True
для state
в коде .kv для каждого счетчика. Диспетчер экрана переключится с screen_two на screen_three, только если все счетчики имеют state: True
. Я присваиваю True
при нажатии на спиннер (и выбирается опция).
Большая часть кода работает, как и ожидалось, за исключением оператора if
в коде kv, который я показал ниже.
Я удалил большую часть своего кода и сохранил только соответствующие фрагменты.
Файл .kv
<ScreenTwo>:
FloatLayout:
Button:
background_color: 0, 0, 0, 1
size: (400, 130)
size_hint: (None, None)
pos_hint: {'right': 0.6, 'center_y': 0}
on_press:
root.hours_checking() #this function converts the 12hr time to 24hr time
Проверяется состояние каждого из счетчиков (отдельный счетчик)состояния идентифицируются с помощью идентификаторов, которые я назначил).
if day.state == hours.state == minutes.state == AmPm.state == 'True': \
root.manager.current = 'screen_three'
Spinner:
id: day
size_hint: None, None
size: 100, 44
pos_hint: {'center': (.5, .5)}
text: 'Day'
values: 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'
on_text:
root.on_day_select(self.text) #this function sends back the selected day value in the spinner
self.state: 'True'
Spinner:
id: hours
size_hint: None, None
size: 100, 44
pos_hint: {'center': (.1, .5)}
text: 'Hour'
values: '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'
on_text:
root.on_hours_select(self.text) #this function sends back the selected hours value in the spinner
self.state: 'True'
Spinner:
id: minutes
size_hint: None, None
size: 100, 44
pos_hint: {'center': (.3, .5)}
text: 'Minutes'
values: '00', '15', '30', '45'
on_text:
root.on_minutes_select(self.text) #this function sends back the selected minutes value in the spinner
self.state: 'True'
Spinner:
id: AmPm
size_hint: None, None
size: 100, 44
pos_hint: {'center': (.4, .5)}
text: 'AM/PM'
values: 'a.m', 'p.m'
on_text:
root.on_AmPm_select(self.text) #this function sends back the selected day a.m/p.m value in the spinner
self.state: 'True'
Файл Python
class ScreenTwo(Screen):
def on_day_select(self, text): #Function assigns selected day from spinner to a variable
global day
day = str(text)
def on_hours_select(self, text): #Function assigns selected 12-hour from spinner to a variable
global hours
hours = int(text)
def on_minutes_select(self, text): #Function assigns selected minute from spinner to a variable
global minutes
minutes = int(text)
def on_AmPm_select(self,text): #Function assigns selected a.m/p.m from spinner to a variable
global AmPm
AmPm = str(text)
def hours_checking(self): #Function converts 12hr time to 24hr time
global AmPm
global hours
global minutes
global day
try:
if 1 <= hours <= 11 and AmPm == 'a.m':
pass
elif 1 <= hours <= 12 and AmPm == 'p.m':
hours += 12
elif hours == 12 and AmPm == 'a.m':
hours = 0
except:
print('error')
else:
print(day, hours, minutes)
pass
Когда этот код запущен, и я нажимаюкнопка, я получаю 12-часовое время в 24-часовом формате времени. Это означает, что все до тех пор, пока часть screenmanager в файле kv (который показан в блоке кода, выделен в желтой части) работает отличноЯ очень плохо знаком с Киви и ООП, поэтому, пожалуйста, помогите мне понять, где именно я ошибся.