kivy无法将float转换为kivy.properties.Property

时间:2017-11-23 19:40:51

标签: python-3.x kivy

我正在尝试使用一个按钮,可以单击该按钮在最近添加的按钮下面添加两个按钮。我正在使用一个从{9开始的浮点height并从那里开始递减。我收到错误TypeError:无法将float转换为kivy.properties.Property。

class TasksWindow(FloatLayout):
    height = .9

    def __init__(self, **kwargs):
        super(TasksWindow, self).__init__(**kwargs)
        addBtn = Button(
            text="+", pos_hint={'x': .9, 'top': 1}, size_hint=(.1, .1))
        self.add_widget(addBtn)
        addBtn.bind(on_press=self.clkAdd)

    def clkAdd(self, obj):
        height = obj.height
        editBtn = Button(text="Tap to Edit", pos_hint={
            'x': 0.0, 'top': height}, size_hint=(.9, .1))
        delBtn = Button(text="X", pos_hint={
                        'x': .9, 'top': height}, size_hint=(.1, .1))
        height -= .1
        self.add_widget(editBtn)
        self.add_widget(delBtn)


class TasksApp(App):
    def build(self): 
        window = TasksWindow() 
        return window


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

2 个答案:

答案 0 :(得分:0)

使用kivy.properties.NumericProperty。确保不要覆盖属性名称。 FloatLayout有一个高度属性。

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import NumericProperty


class TasksWindow(FloatLayout):
    btn_height = NumericProperty(0.9)

    def __init__(self, **kwargs):
        super(TasksWindow, self).__init__(**kwargs)
        add_btn = Button(text="+", pos_hint={'x': .9, 'top': 1}, size_hint=(.1, .1))
        self.add_widget(add_btn)
        add_btn.bind(on_press=self.click_add)

    def click_add(self, obj):
        height = self.btn_height
        edit_btn = Button(text="Tap to Edit", pos_hint={
            'x': 0.0, 'top': height}, size_hint=(.9, .1))
        del_btn = Button(text="X", pos_hint={
                        'x': .9, 'top': height}, size_hint=(.1, .1))
        self.btn_height -= .1
        self.add_widget(edit_btn)
        self.add_widget(del_btn)


class TasksApp(App):
    def build(self): 
        return TasksWindow() 


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

答案 1 :(得分:0)

您遇到以下错误,因为您使用的是Kivy关键字,身高

  

TypeError:无法将float转换为kivy.properties.Property

替换:

height = .9

使用:

parent_height = NumericProperty(.9)    # 90% height of its parent layout

实施例

main.py

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.button import Button
from kivy.properties import NumericProperty


class TasksWindow(FloatLayout):
    parent_height = NumericProperty(.9)    # 90% height of its parent layout

    def __init__(self, **kwargs):
        super(TasksWindow, self).__init__(**kwargs)
        addBtn = Button(
            text="+", pos_hint={'x': .9, 'top': 1}, size_hint=(.1, .1))
        self.add_widget(addBtn)
        addBtn.bind(on_press=self.clkAdd)

    def clkAdd(self, obj):
        editBtn = Button(text="Tap to Edit", pos_hint={
            'x': 0.0, 'top': self.parent_height}, size_hint=(.9, .1))
        delBtn = Button(text="X", pos_hint={
                        'x': .9, 'top': self.parent_height}, size_hint=(.1, .1))
        self.parent_height -= .1
        self.add_widget(editBtn)
        self.add_widget(delBtn)


class TasksApp(App):
    def build(self):
        window = TasksWindow()
        return window


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

输出

Figure 1 - App Startup Figure 2 - Clicked "+" & Buttons Edit & Del Added Figure 3 - Clicked "+" & Buttons Edit & Del Added