如何使图像“浮动”在按钮上?

问题描述 投票:0回答:1

我开始学习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()

enter image description here

现在,我想将一个png图像添加到一个独立的图层中,该图层随机地“漫游”在这些按钮上。

enter image description here

然后,用户应该点击图像所在的按钮,就像在游戏中一样。

也就是说,图像不应该是可点击的,并且只能在按钮上以可视方式显示,同时,按钮应该完美响应,就像它们上面没有图像一样。这该怎么做?

python-3.x image animation kivy layer
1个回答
1
投票

你可以使用CanvasGridLayoutRectangle中绘制图像。并且可以使用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()

此代码只是以直线移动图像,但您可以改进它。

© www.soinside.com 2019 - 2024. All rights reserved.