Python kivy 在 kivy 中重写 python 的问题
Python kivy Problems with rewriting python in kivy
我在用 kivy 格式重写 python 代码时遇到了一些问题
这里是class“设置”,它有改变屏幕的方法。
class SettingsMenu(Screen):
def on_touch_down(self, touch):
if touch.button == 'right':
self.parent.transition.direction = "right"
self.parent.transition.duration = 0.6
self.parent.current = "MainMenu"
我想用这种方式(或类似的方式)用 kivy 重写它:
<SettingsMenu>
name: "SettingsMenu"
on_touch_down:
if button == "right":
root.parent.transition.direction = "right"
root.parent.transition.duration = 0.6
root.parent.current = "MainMenu"
如何正确操作?
(编辑)这是完整的代码。我只是创建了两个屏幕,当我们在 SettingsMenu 屏幕上时,我想用 鼠标右键
切换回 MainMenu 屏幕
(在 SettingsMenu python class 中评论 on_touch_down 工作正常,但是当我尝试以 kivy 方式制作它时,我用任何鼠标按钮切换屏幕,但需要的是鼠标右键)
Python:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.config import Config
Config.set('input', 'mouse', 'mouse,multitouch_on_demand')
class MainMenu(Screen):
pass
class SettingsMenu(Screen):
pass
# def on_touch_down(self, touch):
# if touch.button == 'right':
# self.parent.transition.direction = "right"
# self.parent.transition.duration = 0.6
# self.parent.current = "MainMenu"
class MenuManager(ScreenManager):
pass
main_kv = Builder.load_file("test.kv")
class THEApp(App):
def build(self):
return main_kv
THEApp().run()
这是 Kivy 文件(在复制粘贴过程中缩进可能会被破坏,但语法没有问题):
MenuManager:
MainMenu:
SettingsMenu:
<MainMenu>
name: "MainMenu"
FloatLayout:
size: root.width, root.height
Button:
text: "Button 1 on Main Menu Screen"
on_release:
root.manager.transition.direction = 'left'
root.manager.transition.duration = 0.6
root.manager.current = "SettingsMenu"
<SettingsMenu>
name: "SettingsMenu"
button: "right"
on_touch_down:
if root.button == "right": \
root.parent.transition.direction = "right"; \
root.parent.transition.duration = 0.6; \
root.parent.current = "MainMenu"
FloatLayout:
size: root.width, root.height
Label:
text: "Label 1 on SettingsMenu"
您可以对 kv
文件中的 on_touch_down:
属性执行 python code/logic,但这有点愚蠢。我认为您的 kv
文件将像这样工作:
<SettingsMenu>
name: "SettingsMenu"
on_touch_down:
if args[1].button == "right": \
root.parent.transition.direction = "right"; \
root.parent.transition.duration = 0.6; \
root.parent.current = "MainMenu"
在 kivy
语言中,您可以访问 on_<action>
方法的 args
(参见 documentation)。所以上面的代码检查 touch
参数的 button
属性。
注意 kv
文件中的 if
语句必须在一行上。这就是 \
字符(转义尾行)和 ;
(分隔代码行)的原因。
我在用 kivy 格式重写 python 代码时遇到了一些问题
这里是class“设置”,它有改变屏幕的方法。
class SettingsMenu(Screen):
def on_touch_down(self, touch):
if touch.button == 'right':
self.parent.transition.direction = "right"
self.parent.transition.duration = 0.6
self.parent.current = "MainMenu"
我想用这种方式(或类似的方式)用 kivy 重写它:
<SettingsMenu>
name: "SettingsMenu"
on_touch_down:
if button == "right":
root.parent.transition.direction = "right"
root.parent.transition.duration = 0.6
root.parent.current = "MainMenu"
如何正确操作?
(编辑)这是完整的代码。我只是创建了两个屏幕,当我们在 SettingsMenu 屏幕上时,我想用 鼠标右键
切换回 MainMenu 屏幕(在 SettingsMenu python class 中评论 on_touch_down 工作正常,但是当我尝试以 kivy 方式制作它时,我用任何鼠标按钮切换屏幕,但需要的是鼠标右键)
Python:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.config import Config
Config.set('input', 'mouse', 'mouse,multitouch_on_demand')
class MainMenu(Screen):
pass
class SettingsMenu(Screen):
pass
# def on_touch_down(self, touch):
# if touch.button == 'right':
# self.parent.transition.direction = "right"
# self.parent.transition.duration = 0.6
# self.parent.current = "MainMenu"
class MenuManager(ScreenManager):
pass
main_kv = Builder.load_file("test.kv")
class THEApp(App):
def build(self):
return main_kv
THEApp().run()
这是 Kivy 文件(在复制粘贴过程中缩进可能会被破坏,但语法没有问题):
MenuManager:
MainMenu:
SettingsMenu:
<MainMenu>
name: "MainMenu"
FloatLayout:
size: root.width, root.height
Button:
text: "Button 1 on Main Menu Screen"
on_release:
root.manager.transition.direction = 'left'
root.manager.transition.duration = 0.6
root.manager.current = "SettingsMenu"
<SettingsMenu>
name: "SettingsMenu"
button: "right"
on_touch_down:
if root.button == "right": \
root.parent.transition.direction = "right"; \
root.parent.transition.duration = 0.6; \
root.parent.current = "MainMenu"
FloatLayout:
size: root.width, root.height
Label:
text: "Label 1 on SettingsMenu"
您可以对 kv
文件中的 on_touch_down:
属性执行 python code/logic,但这有点愚蠢。我认为您的 kv
文件将像这样工作:
<SettingsMenu>
name: "SettingsMenu"
on_touch_down:
if args[1].button == "right": \
root.parent.transition.direction = "right"; \
root.parent.transition.duration = 0.6; \
root.parent.current = "MainMenu"
在 kivy
语言中,您可以访问 on_<action>
方法的 args
(参见 documentation)。所以上面的代码检查 touch
参数的 button
属性。
注意 kv
文件中的 if
语句必须在一行上。这就是 \
字符(转义尾行)和 ;
(分隔代码行)的原因。