2017-07-21 11 views
0

Kivyでは、最初のページで2ページ目を引っ張った後、最初のページをカバーしています。現時点では、ページが透明に見え、第2ページが最初のページをカバーしないため、リストからの単語の重複があります。私はウィジェットの背景色を変えようとしましたが、無駄に、何らかの段階で背景画像を追加しようとしました。これが私の時間を十分に費やしたのを助けてください。可能であれば、kv言語の代わりに純粋なpythonのソリューションを感謝します。例:Kivyのページレイアウトは、オーバーラップを防ぐために1ページ上にカバーします。

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を使用して達成しようとしていたかどうかはわかりません。 、あなたのソリューション@Mox

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

おかげで動作しますが、私はlayout.canvas.addでちょうどのpythonを使用して行方不明になった作品(色(0を発見した1、0):ここで

は一例です)およびlayout.canvas.add(Rectangle(size =(100、100)))を使用して、それらは、誰かがループしているときに問題がある場合に備えて、ScrollViewの内部で最も効果的です – Jeff

関連する問題