Kivy从弹出窗口获取值并在屏幕上使用

嗨,我是新手,刚开始编程。因此,我想做的是,一旦在弹出窗口中输入了有效日期/时间的用户密钥,弹出窗口就会关闭,并转到屏幕并创建按钮。我可以知道如何传递从getDay()获得的值,该值是dayoutput,popupwindow的timeoutput并在另一个其他类中进行传递?并可以在VariesTimeScreen中使用?

感谢您抽出宝贵的时间来帮助:)

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()andset_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
             self.dismiss()
             return dayoutput,timeoutput
          except ValueError:
            wrongtime.text = "[color=#FF0000]Please enter a valid 
                             datetime.[/color]"

      else:
         wrongtime.text = "[color=#FF0000]Please enter a valid 
         date[/color]"


class VariesTimeScreen(Screen):

  def __init__(self,**kwargs):
    super(VariesTimeScreen,self).__init__(**kwargs)

    a = '_icons_/mcdonald.png'
    b = '_icons_/kfc.png'
    c = '_icons_/subway.png'

    Outlet_Store = [a,b,c]
    layout = GridLayout(rows=1,spacing=100,size_hint_y=None,pos_hint ={"top":.6,"x":0.2})
    layout.bind(minimum_height=layout.setter('height'))

            #Before the for loop there will be an if statement which is 
            the Day and Time i get from getDay() values. This part i'm 
            unsure how to retrieve the values from the SetDateTime Class

            for image in Outlet_Store: 
               food_image = ImageButton(size_hint=(None,None),size= 
                            (100,100),source=image)

               layout.add_widget(food_image)
            self.add_widget(layout)
csl6868926 回答:Kivy从弹出窗口获取值并在屏幕上使用

设计的一个问题是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中设置timeVariesTimeScreen,并实际切换到VariesTimeScreen。不必在那里切换到VariesTimeScreen,一旦设置了daytime,无论何时on_enter()方法成为当前的{{ 1}}。

本文链接:https://www.f2er.com/3145346.html

大家都在问