在Kivy

时间:2016-12-20 02:58:33

标签: python button kivy

当执行某些操作时,我需要在当前GridLayout的右侧显示几个按钮。

我在整个屏幕上尝试了FloatLayout,但我不能让它以相对位置向左移动(因为我将使用多个屏幕分辨率)。 我没有代码,但我必须从.py开始,因为它遵循一定的逻辑出现。 我在.kv中试过这个:

    FloatLayout:
    Button:
        size_hint: 0.4, 0.2
        pos: root.width, root.height / 2
    GridLayout: 

将pos更改为pos_hinthalign: 'right',但无法正常工作

在.py代码中我尝试将其添加到on_touch_down方法,因此每次都会显示一个Button boton = Button(text='caca', pos=self.width - root.x, root.height / 2)  但它不是

欢迎任何帮助!

1 个答案:

答案 0 :(得分:0)

您的数学计算不正确,您需要将按钮的宽度减去x位置,将其高度的一半减去y位置。

pos: root.width-self.width, root.height / 2 - self.height / 2

这是一个完整的工作示例。

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.lang import Builder

Builder.load_string('''
<Base>:
    FloatLayout:
        Button:
            size_hint: 0.4, 0.2
            pos: root.width-self.width, root.height / 2 - self.height / 2
            text: 'hola'
    GridLayout:
        cols: 2
        Label:
            text: 'A'
        Label:
            text: 'B'
''')    

class Base(FloatLayout):
    pass

class BaseApp(App):
    def build(self):
        return Base()

BaseApp().run()

使用pos_hint

更容易实现
pos_hint: {'right': 1, 'center_y': .5}

所以,就像这样:

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout

from kivy.lang import Builder


Builder.load_string('''
<Base>:
    FloatLayout:
        Button:
            size_hint: 0.4, 0.2
            pos_hint: {'right': 1, 'center_y': .5}
            text: 'hola'
    GridLayout:
        cols: 2
        Label:
            text: 'A'
        Label:
            text: 'B'
''')    

class Base(FloatLayout):
    pass

class BaseApp(App):
    def build(self):
        return Base()

BaseApp().run()