环境:
我有一个主屏幕和两个弹出窗口。单击主屏幕上的按钮时,将弹出第一个弹出窗口。在第一个弹出窗口中选择选项,然后按该弹出窗口的按钮,将关闭第一个弹出窗口并打开第二个弹出窗口。到此为止。
import kivy
kivy.require('1.11.0')
import os
os.environ['KIVY_GL_BACKEND'] = 'gl'
import time
from kivy.app import App
from kivy.core.text import LabelBase
from kivy.uix.button import Button
from kivy.uix.popup import Popup
from kivy.uix.boxlayout import BoxLayout
from kivy.clock import Clock
class MainScreen(BoxLayout):
sw_switch = 'none'
def process_1(self):
print("The process will be running here")
time.sleep(5)
self.sw_switch = 'over'
def setName(self,*args):
FirstPopup().open()
def setName1(self,*args):
self.sw_switch = 'true1'
SecondPopup().open()
#------------------------------------
class FirstPopup(Popup):
def popup1_but(self):
self.dismiss()
class SecondPopup(Popup):
def popup2_but(self):
self.dismiss()
pass
#------------------------------------
class MultPopApp(App):
def build(self):
Clock.schedule_interval(lambda dt: self.update_time(), 1)
return MainScreen()
def update_time(self):
if self.root.sw_switch == 'true':
self.root.process_1()
if self.root.sw_switch == 'over':
x = SecondPopup()
x.popup2_but()
self.root.sw_switch = 'none'
if __name__ == '__main__':
MultPopApp().run()
#: kivy 1.11.0
<MainScreen>:
orientation: 'vertical'
Button:
text: 'Options'
on_release: root.setName(*args)
<FirstPopup>:
title: 'Options Window'
size_hint: None, None
size: 400,370
BoxLayout:
orientation : 'vertical'
Label:
text : "Checkbox options listed here"
Button:
text: "OK"
on_press:
app.root.setName1(*args)
app.root.sw_switch = 'true'
root.popup1_but()
<SecondPopup>:
title: 'Please wait..'
size_hint: None, None
size: 400,370
BoxLayout:
orientation : 'vertical'
size_hint: 1.0,1.0
Label:
text : "Process Initiated"
size_hint: 1.0, 1.0
现在,在第二个弹出窗口旁边启动后台功能之后,我需要第二个弹出窗口来自动关闭。在尝试了其他一些东西之后,我到达了这段代码中的解决方案。任何指导都受到高度赞赏。谢谢。
发布了python和kivy文件
答案 0 :(得分:0)
auto_dismiss: False
默认情况下,auto_dismiss
设置为True
,即在弹出窗口之外的任何点击都将其关闭/关闭。如果您不想这样做,可以将auto_dismiss
设置为False
。
<FirstPopup>:
title: 'Options Window'
auto_dismiss: False
auto_dismiss: True
现在,我需要第二个弹出窗口来在背景后自动关闭 功能在第二个弹出窗口旁边启动。
为了能够访问第二个Popup小部件,请执行以下操作
from kivy.properties import ObjectProperty
ObjectProperty
的类popup2
并初始化为None
SecondPopup()
的实例化分配给self.popup2
self.popup2.open()
SecondPopup()
自动关闭self.popup2.dismiss()
。在启动,完成后台功能或使用Clock安排回调时使用此功能。from kivy.properties import ObjectProperty
class MainScreen(BoxLayout):
popup2 = ObjectProperty(None)
...
def setName1(self, *args):
self.sw_switch = 'true1'
self.popup2 = SecondPopup()
self.popup2.open()
Clock.schedule_once(lambda dt: self.dismiss_popup2(), 5)
def dismiss_popup2(self):
print(f"\ndismiss_popup2: SecondPopup dismissed")
self.popup2.dismiss()
在Kivy应用程序中,您必须避免长/无限循环或 睡觉。
while True: animate_something() time.sleep(.10)
运行此命令时,程序将永远不会退出循环,从而防止 完成所有需要做的其他事情的奇异果。结果是, 您会看到一个黑色的窗口,您将无法进行交互 用。相反,您需要“安排”您的animate_something() 函数被反复调用。