• <small id='DuJqE'></small><noframes id='DuJqE'>

    1. <i id='DuJqE'><tr id='DuJqE'><dt id='DuJqE'><q id='DuJqE'><span id='DuJqE'><b id='DuJqE'><form id='DuJqE'><ins id='DuJqE'></ins><ul id='DuJqE'></ul><sub id='DuJqE'></sub></form><legend id='DuJqE'></legend><bdo id='DuJqE'><pre id='DuJqE'><center id='DuJqE'></center></pre></bdo></b><th id='DuJqE'></th></span></q></dt></tr></i><div id='DuJqE'><tfoot id='DuJqE'></tfoot><dl id='DuJqE'><fieldset id='DuJqE'></fieldset></dl></div>

        <bdo id='DuJqE'></bdo><ul id='DuJqE'></ul>

      1. <tfoot id='DuJqE'></tfoot>
        <legend id='DuJqE'><style id='DuJqE'><dir id='DuJqE'><q id='DuJqE'></q></dir></style></legend>
      2. Kivy 时钟和弹出窗口

        时间:2023-10-10
        <legend id='Emg09'><style id='Emg09'><dir id='Emg09'><q id='Emg09'></q></dir></style></legend>

          <small id='Emg09'></small><noframes id='Emg09'>

              <tbody id='Emg09'></tbody>
          • <tfoot id='Emg09'></tfoot>

              <i id='Emg09'><tr id='Emg09'><dt id='Emg09'><q id='Emg09'><span id='Emg09'><b id='Emg09'><form id='Emg09'><ins id='Emg09'></ins><ul id='Emg09'></ul><sub id='Emg09'></sub></form><legend id='Emg09'></legend><bdo id='Emg09'><pre id='Emg09'><center id='Emg09'></center></pre></bdo></b><th id='Emg09'></th></span></q></dt></tr></i><div id='Emg09'><tfoot id='Emg09'></tfoot><dl id='Emg09'><fieldset id='Emg09'></fieldset></dl></div>
                  <bdo id='Emg09'></bdo><ul id='Emg09'></ul>
                  本文介绍了Kivy 时钟和弹出窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  如何正确地为 switch_id 和 switch_id_popup 创建活动属性,以便可以使用 kivy 时钟在 timer_loop 内创建条件语句?

                  How do I properly create active properties for switch_id and switch_id_popup so I can create a conditional statement inside of timer_loop with kivy clock?

                  我在一个类似问题上得到了很好的反馈(再次感谢 eyllanesc),但由于涉及到弹出窗口,我无法采纳建议.

                  I got great feedback on a similar question(thanks again eyllanesc), but I am unable to incorporate advice now that popup is involved.

                  下面是说明我的问题的草图.我已经用箭头标识了所有有问题的区域.预先感谢您的任何帮助.

                  Below is a sketch that illustrates my issue. I have identified all of the areas in question with arrows. Thank you in advance for any help.

                  from kivy.app import App
                  from kivy.lang import Builder
                  from kivy.clock import Clock
                  import time
                  from kivy.uix.popup import Popup
                  
                  theRoot = Builder.load_string('''
                  
                  <CustomPopup1>:
                  
                      StackLayout:
                          active2: switch_id_popup.active #<---- switch_id_popup declared here(active2)
                  
                  
                          Switch:                         #<---- This switch (switch_id_popup)
                              id: switch_id_popup
                              size_hint: .5, .5
                              active: switch_id_popup.active
                  
                          Button:
                              text: 'Close'
                              on_release: root.dismiss()
                              size_hint: .5, .5
                  
                  
                  
                  StackLayout:
                      active1: switch_id.active           #<---- switch_id declared here(active1)
                      orientation: 'lr-tb'
                      padding: 10
                      spacing: 5
                  
                  
                      Label:
                          text: "Zone 1 Valve"
                          size_hint: .25, .1
                  
                      Switch:                             #<---- This switch (switch_id)
                          id: switch_id
                          size_hint: .25, .1
                          active: switch_id.active
                  
                  
                      Button:
                          text: "Program 1"
                          on_press: app.open_popup1()
                          size_hint: .5,.1
                  
                  ''')
                  
                  
                  class CustomPopup1(Popup):
                      pass
                  
                  class theApp(App):
                  
                  
                      def build(self):
                          Clock.schedule_interval(self.timer_loop, 2)
                          return theRoot
                  
                  
                      def timer_loop(self, dt):  
                  
                          if theRoot.active1 and theRoot.active2: #<---- How do I make this work if switch_id_popup is within a popup?
                              print("Do something")
                          else:
                              print("Do nothing")
                  
                      def open_popup1(self):
                          the_popup = CustomPopup1()
                          the_popup.open()
                  
                  
                  if __name__ == '__main__':
                      theApp().run()
                  

                  推荐答案

                  正如我在我之前的解决方案中提到的,你应该将每个类视为一个黑盒,并公开允许您获取和建立值的属性.对于 Popup,active 属性必须是类的一部分,而不是内部 StackLayout.另一方面,在 open_popup 方法中,您总是在创建一个新的 Popup,当您关闭它时将删除它,使该属性不可访问,因此我们推断必须有一个具有更大范围的 Popup 对象,因为它必须在外部创建App 类的成员或成为它的成员.最后,active2 不是 theRoot 的属性.

                  As I mentioned in my previous solution, you should consider each class as a black box and expose properties that allow you to obtain and establish values. In the case of Popup, the active property must be part of the class and not the internal StackLayout. On the other hand in the open_popup method you are always creating a new Popup that will be deleted when you close it making the property is not accessible, so we deduce that there must be a Popup object with a larger scope for it must be created outside of theApp class or be a member of it. Lastly, active2 is not a property of theRoot.

                  综合以上,得到如下解决方案:

                  Considering the above, the following solution is obtained:

                  from kivy.app import App
                  from kivy.lang import Builder
                  from kivy.clock import Clock
                  import time
                  from kivy.uix.popup import Popup
                  
                  theRoot = Builder.load_string('''
                  <CustomPopup>:
                      active: switch_id_popup.active
                      StackLayout:
                          Switch:
                              id: switch_id_popup
                              size_hint: .5, .5
                          Button:
                              text: 'Close'
                              on_release: root.dismiss()
                              size_hint: .5, .5
                  
                  StackLayout:
                      active: switch_id.active
                      orientation: 'lr-tb'
                      padding: 10
                      spacing: 5
                      Label:
                          text: "Zone 1 Valve"
                          size_hint: .25, .1
                      Switch:
                          id: switch_id
                          size_hint: .25, .1
                      Button:
                          text: "Program 1"
                          on_press: app.open_popup()
                          size_hint: .5,.1
                  
                  ''')
                  
                  class CustomPopup(Popup):
                      pass
                  
                  
                  class TheApp(App):
                      def build(self):
                          self.the_popup = CustomPopup()
                          Clock.schedule_interval(self.timer_loop, 2)
                          return theRoot
                  
                      def timer_loop(self, dt):  
                          if self.root.active and self.the_popup.active:
                              print("Do something")
                          else:
                              print("Do nothing")
                  
                      def open_popup(self):
                          self.the_popup.open()
                  
                  
                  if __name__ == '__main__':
                      TheApp().run()
                  

                  这篇关于Kivy 时钟和弹出窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:Kivy-python:运行 Hello World 时出错 下一篇:如何在 Kivy 中有更新时间

                  相关文章

                  最新文章

                  <small id='icpR0'></small><noframes id='icpR0'>

                • <tfoot id='icpR0'></tfoot>

                    <legend id='icpR0'><style id='icpR0'><dir id='icpR0'><q id='icpR0'></q></dir></style></legend>

                    1. <i id='icpR0'><tr id='icpR0'><dt id='icpR0'><q id='icpR0'><span id='icpR0'><b id='icpR0'><form id='icpR0'><ins id='icpR0'></ins><ul id='icpR0'></ul><sub id='icpR0'></sub></form><legend id='icpR0'></legend><bdo id='icpR0'><pre id='icpR0'><center id='icpR0'></center></pre></bdo></b><th id='icpR0'></th></span></q></dt></tr></i><div id='icpR0'><tfoot id='icpR0'></tfoot><dl id='icpR0'><fieldset id='icpR0'></fieldset></dl></div>
                        <bdo id='icpR0'></bdo><ul id='icpR0'></ul>