Python 在Kivy中为on_touch_down等指定自定义方法
我正在用Kivy编写最终将成为一款手机游戏应用程序的东西。考虑到框架的功能(能够分离形式和功能),我试图使用Kivy语言在.kv文件中完成GUI的大部分(如果不是全部的话)设计。就制作布局而言,这非常有效,但要让touch事件处理程序正常工作却非常具有挑战性。我想做的是: Python:Python 在Kivy中为on_touch_down等指定自定义方法,python,kivy,kivy-language,Python,Kivy,Kivy Language,我正在用Kivy编写最终将成为一款手机游戏应用程序的东西。考虑到框架的功能(能够分离形式和功能),我试图使用Kivy语言在.kv文件中完成GUI的大部分(如果不是全部的话)设计。就制作布局而言,这非常有效,但要让touch事件处理程序正常工作却非常具有挑战性。我想做的是: Python: from kivy import require from kivy.app import App from kivy.uix.floatlayout import FloatLayout from kivy.
from kivy import require
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.image import Image
from kivy.uix.boxlayout import BoxLayout
require("1.9.1")
class gameScreen(FloatLayout):
def move_scatter(self, sender):
self.ids.moveArea.x = sender.text
def pc_move(self, touch, *args, **kwargs):
print('Goodbye')
# self.ids.protagonist.pos = (self.x + )
class GameApp(App):
def __init__(self, **kwargs):
super(GameApp, self).__init__(**kwargs)
def build(self):
return gameScreen()
class MoveBox(BoxLayout):
pass
class Pc(Image):
pass
if __name__ == '__main__':
GameApp().run()
Kivy代码:
<gameScreen>:
orientation: 'vertical'
padding: 20
canvas.before:
Rectangle:
size: (root.width, root.height)
source: 'bliss.jpg'
Pc:
id: protagonist
TextInput:
id: debugOut
size_hint: None, None
size: 200, 50
text: 'Hello'
BoxLayout:
id: moveArea
size_hint: None, None
size: 200, 200
on_touch_down: root.pc_move()
canvas:
Color:
rgba: .2, .2, .2, .5
Rectangle:
pos: (self.x + root.width - self.width, self.y)
size: self.size
<Pc>
source:'voolf.png'
pos_hint: {'top': .9}
size_hint: None, None
size: 300, 300
这显然是有道理的,因为我调用pc_move()方法时没有传递参数。我知道解决这个问题最简单的方法就是在Python代码中创建BoxLayout,并在那里定义on_touch_down方法,但是如上所述,我试图将GUI和功能分开
问题是,如何像在Python代码中创建小部件那样传递“touch”参数?或者,我只是在追逐白鲸吗?事件处理是否必须在Python代码中创建的小部件中完成?我承认我从未使用过Kivy,但指示它接收到一个
touch
参数
在on_;callbacks中提供了thatargs
关键字
将这两者结合在一起,您应该能够通过以下方式将touch参数传递给python:
on_touch_down: root.pc_move(args[1])
[我不确定它是否会成为
args[]
中的#1元素,但一些示例似乎表明]很抱歉,这个应用程序相当粗糙。这里有很多调试功能,因为这是我第一次涉足移动开发。请关注问题的细节,尽量忽略这个应用在当前状态下基本上没有任何作用。这是我很长时间以来收到的最快、最有帮助的回复。这很好地解决了我的问题。非常感谢您的参与。
on_touch_down: root.pc_move(args[1])