Одна проблема с вашим дизайном заключается в том, что VariesTimeScreen
создается очень рано в App
прогоне, как при создании GUI
. Итак, день и время от SetDateTime
Popup
пока недоступны. Одним из способов справиться с этим является добавление метода on_enter()
к VariesTimeScreen
для внесения каких-либо изменений в Screen
в это время. Для этого я добавил Properties
к VariesTimeScreen
:
class VariesTimeScreen(Screen):
day = StringProperty('None')
time = NumericProperty(0)
и добавил метод on_enter()
к классу VariesTimeScreen
:
def on_enter(self, *args):
print('day:', self.day, ', time:', self.time)
# make changes to the Screen
И затем изменилкласс SetDateTime
немного:
class SetDateTime(Popup):
def getDay(self):
set_day = (self.ids.dayofmonth).text
set_month = (self.ids.month).text
set_year = (self.ids.year).text
set_hour = (self.ids.houroftime).text
set_minutes = (self.ids.minuteoftime).text
wrongtime = self.ids.wronginput_time
# Calculate Date and Time only when user input a valid number
if set_day.isdigit() and set_month.isdigit() and set_year.isdigit() and set_hour.isdigit() and set_minutes.isdigit():
try:
set_date = datetime.date(int(set_year),
int(set_month), int(set_day))
set_time = datetime.time(int(set_hour), int(set_minutes))
if not (set_date >= counttime.todaydate()):
wrongtime.text = "[color=#FF0000]Date is out of range[ / color]"
if not (set_time >= counttime.todaytime()):
wrongtime.text = "[color=#FF0000]Time is out of range[ / color]"
dayoutput = counttime.calculatedate(set_date)
timeoutput = set_hour + set_minutes
# get the VariesTimeScreen
varies_time = App.get_running_app().root.ids.screen_manager.get_screen('variestime_screen')
# set the day and time for the VariesTimeScreen
varies_time.day = dayoutput
varies_time.time = timeoutput
# switch to the VariesTimeScreen
App.get_running_app().change_screen('variestime_screen')
# dismiss Popup
self.dismiss()
except ValueError:
wrongtime.text = "[color=#FF0000]Please enter a valid datetime.[ / color]"
else:
wrongtime.text = "[color=#FF0000]Please enter a valid date[ / color]"
Единственными изменениями являются установка day
и time
в VariesTimeScreen
и фактическое переключение на VariesTimeScreen
. Переключение на VariesTimeScreen
не должно происходить там, после установки day
и time
метод on_enter()
будет вызываться всякий раз, когда он становится текущим Screen
.