我开始学习Kivy了。下面的代码生成一个10x10按钮网格:
from kivy.uix.gridlayout import GridLayout
from kivy.app import App
from kivy.uix.button import Button
class MyApp(App):
def build(self):
layout = GridLayout(cols=10)
for i in range (1, 101):
layout.add_widget(Button(text=str(i)))
return layout
MyApp().run()
现在,我想将一个png图像添加到一个独立的图层中,该图层随机地“漫游”在这些按钮上。
然后,用户应该点击图像所在的按钮,就像在游戏中一样。
也就是说,图像不应该是可点击的,并且只能在按钮上以可视方式显示,同时,按钮应该完美响应,就像它们上面没有图像一样。这该怎么做?
你可以使用Canvas
在GridLayout
的Rectangle
中绘制图像。并且可以使用Clock_schedule_interval()
更新位置。像这样:
from kivy.clock import Clock
from kivy.graphics.context_instructions import Color
from kivy.graphics.vertex_instructions import Rectangle
from kivy.uix.gridlayout import GridLayout
from kivy.app import App
from kivy.uix.button import Button
class MyApp(App):
def build(self):
layout = GridLayout(cols=10)
with layout.canvas.after:
Color(1,1,1,0.5) # if you want to see through the image
self.bg = Rectangle(source='KQxab.png') # source is the image
for i in range (1, 101):
layout.add_widget(Button(text=str(i)))
Clock.schedule_interval(self.update_bg, 1.0/24.0) # schedule the image movement
return layout
def update_bg(self, dt):
self.bg.pos = (self.bg.pos[0] + 1, self.bg.pos[1] + 1)
MyApp().run()
此代码只是以直线移动图像,但您可以改进它。