在widget-Kivy-Python中更改图像

2024-05-19 15:05:28 发布

您现在位置:Python中文网/ 问答频道 /正文

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.graphics import Color, Rectangle
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.image import Image

class Imglayout(FloatLayout):

    def __init__(self,**args):
        super(Imglayout,self).__init__(**args)

        with self.canvas.before:
            Color(0,0,0,0)
            self.rect=Rectangle(size=self.size,pos=self.pos)

        self.bind(size=self.updates,pos=self.updates)
    def updates(self,instance,value):
        self.rect.size=instance.size
        self.rect.pos=instance.pos


class MainTApp(App):

    im=Image(source='img1.jpg')
    def build(self):
        root = BoxLayout(orientation='vertical')
        c = Imglayout()
        root.add_widget(c)


        self.im.keep_ratio= False
        self.im.allow_stretch = True        
        cat=Button(text="Categories",size_hint=(1,.07))
        cat.bind(on_press=self.callback)        
        c.add_widget(self.im)
        root.add_widget(cat);       
        return root

    def callback(self,value):
        self.im=Image(source='img2.jpg')


if __name__ == '__main__':
    MainTApp().run()

我在这里要做的是更改在对象创建过程中首先加载的图像,该图像在应用程序启动时显示,然后在按下按钮cat时更改它。我试着这样做,但没有发生。我最终希望它能用一个轻击手势来改变

我试图建立的是一个幻灯片,这将改变图像在t秒,除非刷,然后当一个新的图像来了计时器重置。 当按下“类别”按钮时,图像将不存在,并且将显示一个类别列表以供选择。当触摸列表中的某个项目时,该列表中的图像将显示在屏幕上。

最后,当一切都完成后,我想让它自动检测类别(基于指定位置的目录),然后所有的图像都可以使用(这并不是明确告诉它有多少图像和什么图像)

但是,我不能做第一件事,所以我真的很想得到一些帮助。或许还有一些关于如何实现其他目标的建议。


Tags: frompos图像imageimportselfsizedef
1条回答
网友
1楼 · 发布于 2024-05-19 15:05:28
def callback(self,value):
    self.im=Image(source='img2.jpg')

你的问题在于回调的定义。使用新源创建一个新的图像,但不做任何操作,比如将其添加到小部件树中。

您真正想做的是修改现有图像的源:

def callback(self, instance, value):
    self.im.source = 'img2.jpg'

这将立即替换现有映像的源,它将立即在您的gui中更新。请注意,我还添加了一个实例参数,该参数将被传递到回调,因此您需要捕获它,否则您将使用错误数量的参数崩溃。

另外,我将在构建中定义您的图像,而不是将其定义为类级变量。我不确定现在的方法是否真的会给你带来麻烦,但在某些情况下可能会。

相关问题 更多 >