KIVY Custom Widget pos_hint - PullRequest
       0

KIVY Custom Widget pos_hint

0 голосов
/ 07 апреля 2020

При использовании пользовательского виджета только параметры 'x' и 'y' оцениваются в параметре pos_hint. Но если я использую другие ключи, такие как center_x, center_y или top, значения ключей не оцениваются. В приведенном ниже примере программы, если я использую pos_hint в качестве center_x и center_y, линия не выравнивается в середине макета. Но если я использую x и y, выравнивание параметров работает.

from kivy.app import App
from kivy.graphics import Line
from kivy.uix.scatter import Scatter
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.scatterlayout import ScatterLayout


class MyPaintWidget(Scatter):

    def __init__(self, **kwargs) :
        super(MyPaintWidget, self).__init__(**kwargs)

    def create_figure(self,  **kwargs):
        self.canvas.add(Line( points=[0, 10, 30, 10]))
        return self

class MyPaintApp(App):

    def build(self):
        parent = RelativeLayout()

        #self.painter = MyPaintWidget(pos_hint={'center_x': 0.5, 'center_y':0.5}) Not working with center_x and center_y alignment
        self.painter = MyPaintWidget(pos_hint={'x': 0.5, 'y':0.5}) #working with x and y parameter

        parent.add_widget(self.painter.create_figure())

        return parent

if __name__ == '__main__':
    MyPaintApp().run()

Даже пробовал с примером файла KV, как упомянуто в разделе комментариев

from kivy.app import App
from kivy.graphics import Line
from kivy.uix.scatter import Scatter
from kivy.uix.relativelayout import RelativeLayout
from kivy.lang import Builder

KV = '''
<LineRectangle>:
    canvas:
        Color:
            rgba: .1, .1, 1, .9
        Line:
            width: 2.
            rectangle: (self.x, self.y, self.width, self.height)
    Label:
        center: root.center
        text: 'Rectangle'
'''

class LineRectangle(Scatter):
      pass

class MyPaintApp(App):

    def build(self):
        Builder.load_string(KV)
        root = RelativeLayout()
        #root.add_widget(LineRectangle(pos_hint={'center_x':0.5, 'center_y':0.5}, size_hint=(0.2, 0.2)))
        root.add_widget(LineRectangle(pos_hint={'center_x':0.5, 'center_y':0.5}, size_hint=(None, None)))
        return root

if __name__ == '__main__':
    MyPaintApp().run()

1 Ответ

1 голос
/ 07 апреля 2020

Свойство pos_hint позволяет установить положение виджета внутри его родительского макета в процентах (аналогично size_hint).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...