0

少し問題が発生しました。だから私は自分のウィジェットを作成しようとしていますが、そのサイズと位置を正しく設定することを除いて(親と同じになるように)成功しました。

class Story(App):
    def build(self):    
        return MyWidgets().init()

アプリにはホルダーとして GridLayout があり、そこに StoryWidget を渡したい

class MyWidgets(object):

    def init(self):
        root = GridLayout(cols=2,rows=1)
        root.add_widget(StoryWidget())
        root.add_widget(Button())
        return root

ストーリー ウィジェットは次のようになります。

class StoryWidget(Widget):
    def __init__(self,**kwargs):
        super(StoryWidget, self).__init__(**kwargs)
        topLayout=BoxLayout(orientation = "vertical")
        topLayout.add_widget(Button(text="first"))
        topLayout.add_widget(Button(text="second"))
        self.add_widget(topLayout)

背景色を取得しようとすると、正常に機能します。

        with self.canvas.before:
            Color(.9,.9,1)  
            self.Backgroud = Rectangle(pos=self.pos,size=self.size)

        self.bind(pos=self.repaint,size=self.repaint)
        self.bind(pos=self.resize,size=self.resize)

    def repaint(self,*args):
        self.Backgroud.pos = self.pos
        self.Backgroud.size = self.size

ルート (Gridlayout) の最初の列全体が正しく白に再描画されますが、ウィジェットはデフォルトの位置 (0,0) とデフォルトのサイズ (100,100) に基づいています。私が知っていることから、ウィジェットがこれらのことを処理できないためです。レイアウトは何らかの形で自動的に行う必要があります。ご覧のとおり、StoryWidget のルート ウィジェットはレイアウトです。なぜ機能しないのかわかりません。ウィジェットの代わりにレイアウトから継承しようとしましたが、まだ何もありません。何かアドバイス?ありがとう!

4

1 に答える 1

1

わかりました。適切な属性を設定するのを忘れていました。そのため、BoxLayout の代わりに Gridlayout を使用しています。この場合、列と行が必要になるため、次のようになります。

class StoryWidget(GridLayout):
    def __init__(self,**kwargs):
        self.cols=1
        self.rows=1
        super(StoryWidget, self).__init__(**kwargs)
        topLayout=BoxLayout(orientation = "vertical")
        topLayout.add_widget(Button(text="first"))
        topLayout.add_widget(Button(text="second"))
        self.add_widget(topLayout)

    with self.canvas.before:
        Color(.9,.9,1)  
        self.Backgroud = Rectangle(pos=self.pos,size=self.size)

    self.bind(pos=self.repaint,size=self.repaint)
    self.bind(pos=self.resize,size=self.resize)
于 2015-06-06T13:48:47.153 に答える