2017-07-21 97 views
0

在Kivy中,我试图在第一页上拉第二页后覆盖另一页。此时,列表中的单词有重叠,因为这些页面看起来很透明,而第二页不包含第一页。我试图改变小部件的背景颜色,但无济于事,甚至尝试在某个阶段添加背景图像。请帮忙,这已经占用了我足够的时间。如果可能的话,我会很感激纯Python代替kv语言的解决方案。例如:Kivy页面布局覆盖另一页以防止重叠

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.pagelayout import PageLayout 
from kivy.uix.button import Button 
from kivy.uix.label import Label 
from kivy.uix.screenmanager import ScreenManager, Screen 
from kivy.core.window import Window 
from kivy.graphics import Color, Rectangle 

# Window.clearcolor = (252, 235, 233, 0) 

class MyScreenManager(ScreenManager): 
    pass 

class PageLayoutScreen(Screen): 
    pass 

class PageLayout1(PageLayout): 
    def __init__(self, **kwargs): 
     super(PageLayout1, self).__init__(**kwargs) 

     myList = ['hello there', 'hello to you too'] 
     t = 0 
     for i in myList: 
      nameWdgt = Label(text="[b]" + myList[t] + "[/b]", markup=True, font_size='15sp') 
      locationWdgt = Label(text="[b]" + myList[t] + "[/b]", markup=True, font_size='15sp') 
      self.add_widget(nameWdgt) 
      self.add_widget(locationWdgt) 

      # below is my attempt to cover the first item in the list "hello there" when we pull the second item in the list over it "hello to you too" 
      with self.canvas.before: 
       Color(0, 1, 0, 1) # green; colors range from 0-1 instead of 0-255 
       self.profile_layout = Rectangle(size=self.size, pos=self.pos) 
      t += 1 

root_widget = Builder.load_string(''' 
#:import NoTransition kivy.uix.screenmanager.NoTransition 
#:import sys sys 
MyScreenManager: 
    transition: NoTransition() 

    PageLayoutScreen: 

<PageLayoutScreen>: 
    name: 'test' 
    PageLayout1 
''') 

class ScreenManagerApp(App): 
    def build(self): 
     return root_widget 

ScreenManagerApp().run() 

回答

0

一个Label是默认透明以外的质地(文字)这就是为什么你看到的重叠。您创建背景的尝试只是绘制了一个带有默认大小的矩形。您需要为每个标签绘制背景以查看发生了什么。

编辑:我不确定你在用ScreenMangerScreen来完成什么,所以我把它们排除了。

下面是一个例子:

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.pagelayout import PageLayout 
from kivy.uix.label import Label 
from kivy.properties import NumericProperty 

Builder.load_string(""" 
<MyLabel>: 
    font_size: "15sp" 
    markup: True 
    canvas.before: 
     Color: 
      rgba: self.bg 
      rgba: [[1, 0, 0, 1], [0, 1, 0, 1], [0, 0, 1, 1], [.5, .5, .5, 1]][self.pg_index] 
     Rectangle: 
      size: self.size 
      pos: self.pos 

""") 


class MyLabel(Label): 
    pg_index = NumericProperty(None) 


class PageLayout1(PageLayout): 
    def __init__(self, *args, **kwargs): 
     super(PageLayout1, self).__init__(*args, **kwargs) 

     myList = ['hello there', 'hello to you too'] 
     pg_index = 0 
     for i in myList: 
      nameWdgt = MyLabel(text="[b]" + myList[0] + "[/b]", pg_index=pg_index) 
      pg_index += 1 

      locationWdgt = MyLabel(text="[b]" + myList[1] + "[/b]", pg_index=pg_index) 

      pg_index += 1 

      self.add_widget(nameWdgt) 
      self.add_widget(locationWdgt) 


class ScreenManagerApp(App): 
    def build(self): 
     return PageLayout1() 


if __name__ == '__main__': 
    ScreenManagerApp().run() 
+0

感谢@Mox您的解决方案的工作,但我发现了一块我失踪了只用蟒蛇与layout.canvas.add(颜色(0,1,0) )和layout.canvas.add(Rectangle(size =(100,100)))。它们在ScrollView中工作效果最好,以防有人在循环播放时遇到问题 – Jeff