是否pos_hint与Kivy的DragBehaviour不兼容?

时间:2017-02-01 12:43:55

标签: python kivy kivy-language

文档提供了an example如何使用DragBehaviour,只要我使用pos来指示小部件的位置,就可以使用它,但是如果我使用pos_hint则不行。

from kivy.uix.label import Label
from kivy.app import App
from kivy.uix.behaviors import DragBehavior
from kivy.lang import Builder

kv = '''
<DragLabel>:
    # Define the properties for the DragLabel
    drag_rectangle: self.x, self.y, self.width, self.height
    drag_timeout: 10000000
    drag_distance: 0

FloatLayout:
    DragLabel:

        ##################################
        ##### Comment this line and works!
        pos_hint: {'x': 0.5, 'y':0.5}


        size_hint: 0.25, 0.2
        text: 'Drag me'
'''

class DragLabel(DragBehavior, Label):
    pass
class TestApp(App):
    def build(self):
        return Builder.load_string(kv)
TestApp().run()

如何将pos_hintDragBehaviour一起使用?由于Kivy绑定属性的方式,它们是不兼容的吗?

1 个答案:

答案 0 :(得分:0)

根据&#34;在Kivy中创建应用程序&#34;作者:Dusty Phillips:

  

布局根据pos设置pos_hint;它们不是严格独立的价值观。对于size_hint也可以这样说,这就是为什么布局需要您明确将size_hint设置为None,如果您想直接操作size

换句话说,FloatLayoutDragBehavior都要设置小部件的pos,并且由于布局最后一次,它最终会获奖。但FloatLayout根据pos设置pos_hint,如果后者未初始化,则不会尝试设置size。同样,如果您尝试设置FloatLayoutsize_hint会使用默认(1,1) size_hint来否决您,除非您首先明确设置(None,None)<div class="inner"><h2>Old heading</h2></div>