Kivy виджет не может изменить поз - PullRequest
0 голосов
/ 08 марта 2019

Я хотел бы поместить круглую кнопку (buttonBehavior, которую я изменил, чтобы сделать ее кружком) в правом нижнем углу TabbedPanelItem.

Итак, я сделал так: Файл Kivy:

#:kivy 1.0.9

<CircularButton>:
    size: (min(self.width,self.height),min(self.width,self.height)) # force circle
    canvas:
        Color:
            rgba: ((1,1,1,1) if self.state == "normal" else (.5,.5,.5,1))
        Ellipse:
            pos: self.pos
            size: self.size

<MainWindow>:
    tab_pos: 'left_mid'
    size_hint: .5, .5
    pos_hint: {'center_x': .5, 'center_y': .5}
    do_default_tab: False

    TabbedPanelItem:
        addIngre: buttonAdd

        text: 'All'

        CircularButton:
            id: buttonAdd
            size_hint: .1, .1
            pos : 90, 90 #Here it doesn't work

    TabbedPanelItem:
        text: 'first tab'
        Label:
            text: 'First tab content area'


    TabbedPanelItem:
        text: 'tab2'
        BoxLayout:
            Label:
                text: 'Second tab content area'
            Button:
                text: 'Button that does nothing'

Python файл:

from kivy.app import App
from kivy.uix.tabbedpanel import TabbedPanel
from kivy.vector import Vector 
from kivy.uix.behaviors.button import ButtonBehavior
from kivy.uix.widget import Widget
from kivy.properties import NumericProperty, ReferenceListProperty,\
    ObjectProperty

class CircularButton(ButtonBehavior, Widget):
    def __init__(self, **kwargs):
        super(CircularButton, self).__init__(**kwargs)

    def collide_point(self, x, y):
        return Vector(x, y).distance(self.center) <= self.width / 2

    def on_release(self):
        print("Ok")

class MainWindow(TabbedPanel):
    addIngre = ObjectProperty()
    pass

class ListApp(App):
    def build(self):
        return MainWindow()


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

Размер_ подсказка работает.Я считаю, что это дает моему виджету 10% размера вкладки, но pos не меняет положение моего виджета.Я попытался с помощью pos, pos_hint, ... но, похоже, ничего не работает, позиция не применяется к моему виджету

Должен ли я поместить позицию в моем виджете и вызывать эту позицию вместо того, что я 'я здесь делаю?

1 Ответ

1 голос
/ 08 марта 2019

Kivy »TabbedPanel

Виджет TabbedPanel управляет различными виджетами во вкладках, с область заголовка для фактических кнопок вкладки и область содержимого для отображение текущего содержимого вкладки.

Решение

  1. Добавить FloatLayout внутри TabbedPanelItem
  2. Добавьте вашу CircularButton внутри FloatLayout
  3. Использовать pos_hint:

Отрывки

TabbedPanelItem:
    addIngre: buttonAdd
    text: 'All'

    FloatLayout:

        CircularButton:
            id: buttonAdd
            size_hint: .1, .1
            # pos: root.center
            # pos_hint: {'x': 0.9, 'y': 0.9}
            pos_hint: {'x': 0.3, 'y': 0.5}

выход

CircularButton inside TabbedPanelItem

...