Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Kivy-在屏幕中添加元素_Python_Python 2.7_Multi Touch_Kivy - Fatal编程技术网

Python Kivy-在屏幕中添加元素

Python Kivy-在屏幕中添加元素,python,python-2.7,multi-touch,kivy,Python,Python 2.7,Multi Touch,Kivy,我从上面的程序中得到一些提示。它表示页面在我的代码和引用的代码中都没有background属性。它有点明显,因为没有背景属性。我想它是从屏幕上继承下来的。我想做一个幻灯片式的东西。但是我找不到任何关于如何设置屏幕背景的信息 如果我用.background注释所有内容并运行应用程序。单击黑色空间,然后我开始在终端上连续出现此错误 import os,sys,random from kivy.app import App from kivy.uix.widget import Widget from

我从上面的程序中得到一些提示。它表示页面在我的代码和引用的代码中都没有background属性。它有点明显,因为没有背景属性。我想它是从屏幕上继承下来的。我想做一个幻灯片式的东西。但是我找不到任何关于如何设置屏幕背景的信息

如果我用.background注释所有内容并运行应用程序。单击黑色空间,然后我开始在终端上连续出现此错误

import os,sys,random
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
from kivy.uix.screenmanager import ScreenManager, Screen , SlideTransition
from kivy.animation import Animation
from kivy.properties import StringProperty

class Page(Screen):
    source = StringProperty()

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.rootpath = os.path.dirname(os.path.realpath(sys.argv[0]))

        self.images=[]

        for img in os.listdir(self.rootpath+'/images'):
            self.images.append(self.rootpath+'/images/'+img)

        self.index=random.randint(0,len(self.images)-1)

        self.im=Image(source=self.images[self.index])
        self.im.keep_ratio= False
        self.im.allow_stretch = True
        #self.add_widget(self.im)

        self.sm = ScreenManager(transition=SlideTransition())

        self.page1=Page(name='page1', source = self.images[self.index])
        self.page2=Page(name='page2', source = self.images[self.index+1])

        self.sm.add_widget(self.page1)
        self.sm.add_widget(self.page2)


        self.bind(size=self.updates,pos=self.updates)

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

    def on_touch_down(self,touch):
            if self.collide_point(*touch.pos):
                if(self.sm.current == 'page1'):
                    next='page2'
                    page=self.page2
                else:
                    next='page1'
                    page=self.page1

                self.index=(self.index+1)%len(self.images)

                page.source = self.images[self.index]
                page.background.scale = 1.0

                self.sm.transition=SlideTransition()
                self.sm.current = next

                anim = Animation(
                    scale=page.background.scale*1.3, 
                    duration=15.0
                )

                anim.start(page.background)

                return True


            return False



class MainTApp(App):


    def build(self):


        root = BoxLayout(orientation='vertical',spacing=10)
        c = Imglayout()
        root.add_widget(c)

        cat=Button(text="Categories",size_hint=(1,.05))
        cat.bind(on_press=self.callback)
        root.add_widget(cat);

        return root

    def callback(self,value):
        print "CALLBACK CAT"


if __name__ == '__main__':
    MainTApp().run()
我仍然没有得到任何应用程序的背景信息(全是黑色的) 如果我在touich函数上打印self.sm.current。然后我发现它总是第1页,从不改变。

说明了如何向小部件添加背景。简单地说,您可以在Python中使用以下绑定到小部件位置和大小的代码来确保背景随小部件移动

[ERROR             ] [OSC         ] Address 127.0.0.1:3333 already in use, retry
 in 2 second 
或者你可以更自然地使用kv语言,例如

with widget_instance.canvas.before:
    Color(0, 1, 0, 1) # green; colors range from 0-1 instead of 0-255
    self.rect = Rectangle(size=layout_instance.size,
                          pos=layout_instance.pos)
widget_instance.bind(size=self._update_rect, pos=self._update_rect)

...
def _update_rect(self, instance, value):
    self.rect.pos = instance.pos
    self.rect.size = instance.size
MyWidget:
    canvas.before:
        Color:
            rgba: 0, 1, 0, 1
        Rectangle:
            # self here refers to the widget i.e screen
            pos: self.pos
            size: self.size