自定义 属性 仅适用于 KV 中的自定义小部件 - kivy
Custom property for custom widget in KV lang - kivy
我正在尝试制作一个自定义小部件,它有一个 属性 名称 "MaxHeight",属性 工作正常,但不在 KV 文件中。
我的自定义小部件 KV 代码是:
<ComboBox>
displaybox:displaybox
DropDown:
id: displaybox
height: root.height
和Python代码是:
class ComboBox(Button):
displaybox = ObjectProperty(None)
#displaybox = DropDown
Items = dict()
MaxHeight = NumericProperty(None)
def __init__(self, **kwargs):
super(ComboBox,self).__init__(**kwargs)
self.bind(MaxHeight=self.setter("MaxHeight"))
#self.displaybox.height=self.MaxHeight
#self.bind(self.displaybox.height=self.setter("MaxHeight"))
def AddItem(self,Title,Value):
if Value not in self.Items:
self.Items[Value] = Title
tmp = ComboBoxItem(text=Title,Tag=Value,
size_hint_y=None,height=32)
tmp.bind(on_release=lambda tmp: self.UpdateSelected(tmp.text, tmp.Tag))
self.displaybox.add_widget(tmp)
def UpdateSelected(self,Text, Value):
self.displaybox.select(Text)
self.text=Text
def on_release(self, *args, **kwargs):
self.displaybox.open(self)
def Dismiss(self):
self.displaybox.dismiss(self)
Code of how it is used:
Label:
text: 'Branch'
font_size: FS_B
text_size: self.size
ComboBox:
id: clientsdropdown
MaxHeight: 20
Button:
应用程序启动时,错误显示为:
kivy.lang.ParserException: Parser: File "E:\OS Support\workspace\TestApp\startapp.kv", line 57:
...
55: ComboBox:
56: id: clientsdropdown
>> 57: MaxHeight: 20
58:
59: Button:
- 请问advice/correct我如何用 KV 语言定义自定义属性。
- 我正在尝试访问此 maxheight 并将其设置为 ComboBox 中的 DropDown 控件,有没有办法将(组合框的)父控件高度访问到 DropDown 控件。
编辑:
在上面的代码中,我将所有 "MaxHeight" 重命名为 "listheight",代码现在可以工作了,但是,当我添加以下代码时,下拉高度没有更新,请你纠正我去哪里错误的。
代码:
def on_listheight(self,instance,value):
self.displaybox.height=value
我按照建议使用 root.parent.height 达到了高度,但想了解为什么它没有使用上面的 属性 更改代码进行更新,并且 Combobox Init 部分中的以下代码也会引发错误,说“ AttributeError:'NoneType' object has no attribute 'dismiss'”,我怎样才能实现组合框在应用程序启动时被关闭,目前它在应用程序启动时显示为打开状态。谢谢你。
self.displaybox.dismiss()
要在 kv 语言中使用的属性应以小写字母开头,因为 kv 使用它来区分它们与小部件。
is there a way to access the parent widget (of combobox) height to DropDown control.
我不完全理解这个问题,但通常你可以通过 self.parent 访问父级。
我正在尝试制作一个自定义小部件,它有一个 属性 名称 "MaxHeight",属性 工作正常,但不在 KV 文件中。
我的自定义小部件 KV 代码是:
<ComboBox>
displaybox:displaybox
DropDown:
id: displaybox
height: root.height
和Python代码是:
class ComboBox(Button):
displaybox = ObjectProperty(None)
#displaybox = DropDown
Items = dict()
MaxHeight = NumericProperty(None)
def __init__(self, **kwargs):
super(ComboBox,self).__init__(**kwargs)
self.bind(MaxHeight=self.setter("MaxHeight"))
#self.displaybox.height=self.MaxHeight
#self.bind(self.displaybox.height=self.setter("MaxHeight"))
def AddItem(self,Title,Value):
if Value not in self.Items:
self.Items[Value] = Title
tmp = ComboBoxItem(text=Title,Tag=Value,
size_hint_y=None,height=32)
tmp.bind(on_release=lambda tmp: self.UpdateSelected(tmp.text, tmp.Tag))
self.displaybox.add_widget(tmp)
def UpdateSelected(self,Text, Value):
self.displaybox.select(Text)
self.text=Text
def on_release(self, *args, **kwargs):
self.displaybox.open(self)
def Dismiss(self):
self.displaybox.dismiss(self)
Code of how it is used:
Label:
text: 'Branch'
font_size: FS_B
text_size: self.size
ComboBox:
id: clientsdropdown
MaxHeight: 20
Button:
应用程序启动时,错误显示为:
kivy.lang.ParserException: Parser: File "E:\OS Support\workspace\TestApp\startapp.kv", line 57:
...
55: ComboBox:
56: id: clientsdropdown
>> 57: MaxHeight: 20
58:
59: Button:
- 请问advice/correct我如何用 KV 语言定义自定义属性。
- 我正在尝试访问此 maxheight 并将其设置为 ComboBox 中的 DropDown 控件,有没有办法将(组合框的)父控件高度访问到 DropDown 控件。
编辑: 在上面的代码中,我将所有 "MaxHeight" 重命名为 "listheight",代码现在可以工作了,但是,当我添加以下代码时,下拉高度没有更新,请你纠正我去哪里错误的。 代码:
def on_listheight(self,instance,value):
self.displaybox.height=value
我按照建议使用 root.parent.height 达到了高度,但想了解为什么它没有使用上面的 属性 更改代码进行更新,并且 Combobox Init 部分中的以下代码也会引发错误,说“ AttributeError:'NoneType' object has no attribute 'dismiss'”,我怎样才能实现组合框在应用程序启动时被关闭,目前它在应用程序启动时显示为打开状态。谢谢你。
self.displaybox.dismiss()
要在 kv 语言中使用的属性应以小写字母开头,因为 kv 使用它来区分它们与小部件。
is there a way to access the parent widget (of combobox) height to DropDown control.
我不完全理解这个问题,但通常你可以通过 self.parent 访问父级。