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