pos_hint不会在FloatLayout kivy中移动自定义小部件

时间:2018-01-17 18:01:25

标签: python python-3.x kivy kivy-language

我正在尝试设置日期和月份显示。

planner.kv 文件中,我无法让java.util.Date子窗口小部件与Telldate中的pos_hint一起使用,但似乎工作正常与FloatLayout

我不确定我是否正确设置了Button,或者我是否以错误的方式处理它。

我理解FloatLayoutTelldate内部的自定义窗口小部件和子窗口小部件,除非我错了。 其他一切都按预期工作

main.py

FloatLayout

planner.kv

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
from time import strftime
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label

class Telldate(Widget):
   todayday = ObjectProperty('')

   def __init__(self,*args, **kwargs):
       super().__init__(*args, **kwargs)
       self.todayday= strftime('%A')

class PlannerApp(App):
    pass

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

我正在使用带有IDLE V3.6.2的python V3.6.2和Kivy v1.10.0 谢谢你的耐心等待!

---- EDIT1:---

使用

<Telldate>:
    Button:
        size:(50,50)
        text:self.parent.todayday


FloatLayout:
    Button:
        text: 'ay'
        size_hint:(None,None)    
        pos_hint: { 'x': 0.5, 'y': 0.8}

    Telldate:
        size_hint:(None,None)
        pos_hint: { 'x': 0.5, 'y': 0.8}

而不是

class Telldate(FloatLayout):

允许我设置hint_size,因为我现在继承了FloatLayout属性而不是widget属性,但仍然不允许设置hint_pos。 其余的代码仍然是相同的。

1 个答案:

答案 0 :(得分:0)

所以我学到的是,小部件不会继承布局的属性,这是我的问题始于Telldate(Widget),我在小部件的文档中找到了这个。

使用Telldate(FloatLayout)而调用(不确定是否正确的术语)class Telldate通过<Telldate>进入kivy解决了我的问题。

然后在我想要调用.kv文件中的自定义小部件时创建FloatLayout

planner.kv

<Tellday@Label>:

    size:(50,50)        



<Telldate>:
    FloatLayout:                
        Tellday:
            size_hint:( None,None)              
            text: self.parent.parent.todayday
            pos_hint:{'top': 0.5,'right':0.5}

main.py

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
from time import strftime
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.anchorlayout import AnchorLayout

from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.lang import Builder


class Telldate(FloatLayout):
   todayday= ObjectProperty('')
 #  todaymonth = ObjectProperty('')

   def __init__(self,*args, **kwargs):
       super().__init__(*args, **kwargs)
       self.todayday=strftime('%A')

       self.todayday= strftime('%A')
     #  self.todaymonth= strftime('%b')

class PlannerApp(App):

       def build(self):
         return Telldate()
if __name__ == '__main__':
    PlannerApp().run()

希望这有助于某人!