我正在尝试使用一个按钮,可以单击该按钮在最近添加的按钮下面添加两个按钮。我正在使用一个从{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()
答案 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
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()