如何在 kivy 中的按钮按下事件中打开新的 Window?
How to open new Window on button press event in kivy?
我希望在 kivy 中点击按钮打开新的 window ...
我目前正在尝试的是创建另一个 class 的实例,它继承了 kivy.App
.
class SettingScreen(App):
pass
class Screen(Widget):
btn = ObjectProperty(None)
def btn_touch_up(self):
print("Touch Up ")
SettingScreen().run()
class TouchApp(App):
def build(self):
return Screen()
if __name__ == "__main__":
TouchApp().run()
单击按钮后发生的事情是我的 window 的标题已更改,但是 Window 没有出现 blank.that 我现有的小部件仍在 window
touch.ky
<Screen>:
btn:btn
Label:
id: msg
text: "Hii"
color: 1,0,0,1
pos_hint: {"top":0.8}
Button:
id: btn
size_hint: 0.2,0.2
text: "Touch Me"
on_touch_up: root.btn_touch_up()
不建议在一个Kivy应用或Python脚本中有两个应用class。
我们会将SettingScreen
分离到另一个Kivy应用中,并使用popen启动SettingScreen
。
例子
touch.py
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import Screen
from kivy.properties import ObjectProperty
from kivy.lang import Builder
Builder.load_string("""
<Screen>:
btn:btn
orientation: 'vertical'
Label:
id: msg
text: "Hi"
color: 1,0,0,1
pos_hint: {"top":0.8}
Button:
id: btn
size_hint: 0.2,0.2
text: "Touch Me"
on_release: root.btn_touch_up()
""")
class Screen(BoxLayout):
btn = ObjectProperty(None)
def btn_touch_up(self):
print("Touch Up ")
from subprocess import Popen, PIPE
process = Popen(['python3', 'settings.py'], stdout=PIPE, stderr=PIPE)
class TouchApp(App):
def build(self):
return Screen()
if __name__ == "__main__":
TouchApp().run()
settings.py
from kivy.app import App
from kivy.lang import Builder
kv = Builder.load_string("""
Screen:
BoxLayout:
orientation: 'vertical'
Label:
text: 'Setting Screen'
Button:
text: 'Exit'
on_release: app.stop()
""")
class SettingScreen(App):
def build(self):
return kv
if __name__ == "__main__":
SettingScreen().run()
输出
我希望在 kivy 中点击按钮打开新的 window ...
我目前正在尝试的是创建另一个 class 的实例,它继承了 kivy.App
.
class SettingScreen(App):
pass
class Screen(Widget):
btn = ObjectProperty(None)
def btn_touch_up(self):
print("Touch Up ")
SettingScreen().run()
class TouchApp(App):
def build(self):
return Screen()
if __name__ == "__main__":
TouchApp().run()
单击按钮后发生的事情是我的 window 的标题已更改,但是 Window 没有出现 blank.that 我现有的小部件仍在 window
touch.ky
<Screen>:
btn:btn
Label:
id: msg
text: "Hii"
color: 1,0,0,1
pos_hint: {"top":0.8}
Button:
id: btn
size_hint: 0.2,0.2
text: "Touch Me"
on_touch_up: root.btn_touch_up()
不建议在一个Kivy应用或Python脚本中有两个应用class。
我们会将SettingScreen
分离到另一个Kivy应用中,并使用popen启动SettingScreen
。
例子
touch.py
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import Screen
from kivy.properties import ObjectProperty
from kivy.lang import Builder
Builder.load_string("""
<Screen>:
btn:btn
orientation: 'vertical'
Label:
id: msg
text: "Hi"
color: 1,0,0,1
pos_hint: {"top":0.8}
Button:
id: btn
size_hint: 0.2,0.2
text: "Touch Me"
on_release: root.btn_touch_up()
""")
class Screen(BoxLayout):
btn = ObjectProperty(None)
def btn_touch_up(self):
print("Touch Up ")
from subprocess import Popen, PIPE
process = Popen(['python3', 'settings.py'], stdout=PIPE, stderr=PIPE)
class TouchApp(App):
def build(self):
return Screen()
if __name__ == "__main__":
TouchApp().run()
settings.py
from kivy.app import App
from kivy.lang import Builder
kv = Builder.load_string("""
Screen:
BoxLayout:
orientation: 'vertical'
Label:
text: 'Setting Screen'
Button:
text: 'Exit'
on_release: app.stop()
""")
class SettingScreen(App):
def build(self):
return kv
if __name__ == "__main__":
SettingScreen().run()