Kivy - 下拉列表



Kivy 中的下拉小部件与其他 GUI 工具包中的类似小部件有很大不同。Kivy 的下拉菜单不仅显示标签,还显示其他任何小部件,例如按钮、图像等。

DropDown 类在“kivy.uix.dropdown”模块中定义。

from kivy.uix.dropdown import DropDown
dropdown=DropDown()

构造下拉对象需要以下步骤:

  • 在向此对象添加其他小部件时,我们需要通过禁用 size_hint 手动指定高度,从而下拉菜单计算所需区域。

  • 对于在 DropDown 中添加的每个子小部件,您都需要附加一个回调函数,该函数将在下拉菜单上调用 select() 方法。绑定每个子项并添加到下拉菜单对象中。

  • 将下拉菜单添加到主按钮并将其与下拉菜单类的 open() 方法绑定。

  • 最后,运行应用程序并单击主按钮。您将看到一系列子小部件向下展开。单击其中任何一个以调用其关联的回调函数。

示例

在此示例中,我们将演示 Kivy 中的下拉小部件如何工作。我们将使用 for 循环向下拉菜单添加十个按钮,如下所示:

dropdown = DropDown()

for index in range(1, 11):
   btn = Button(text ='Button '+str(index),
      size_hint_y = None, height = 40)
   btn.bind(on_release = lambda btn: dropdown.select(btn.text))
   dropdown.add_widget(btn)

box.add_widget(dropdown)

我们将主按钮放置在 BoxLayout 中,将下拉菜单对象添加到其中,并将主按钮与下拉菜单对象的 open() 方法绑定。

box = BoxLayout(orientation='vertical')
mainbutton = Button(text ='Drop Down Button', size_hint=(None, None), size =(250, 75), pos_hint ={'center_x':.5, 'top':1})
box.add_widget(mainbutton)
mainbutton.add_widget(dropdown)
mainbutton.bind(on_release = dropdown.open)

最后,我们需要监听下拉列表中的选择并将数据分配给按钮文本。

dropdown.bind(on_select = lambda instance, x: setattr(mainbutton, 'text', x))

以下代码中 App 类中的 build() 方法包含所有这些步骤:

from kivy.app import App
from kivy.uix.dropdown import DropDown
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window

Window.size = (720, 400)

class Drop_down_app(App):
   def build(self):
      box = BoxLayout(orientation='vertical')

      mainbutton = Button(
         text='Drop Down Button', size_hint=(None, None),
         size=(250, 75), pos_hint={'center_x': .5, 'top': 1}
      )
      box.add_widget(mainbutton)
      dropdown = DropDown()
      for index in range(1, 11):
         btn = Button(text='Button ' + str(index),
            size_hint_y=None, height=40)
         btn.bind(on_release=lambda btn: dropdown.select(btn.text))
      dropdown.add_widget(btn)
      box.add_widget(dropdown)
      
      mainbutton.add_widget(dropdown)
      mainbutton.bind(on_release=dropdown.open)

      dropdown.bind(on_select=lambda instance, x: setattr(mainbutton, 'text', x))
      return box
      
Drop_down_app().run()

输出

当我们运行上述代码时,主按钮可见。

Kivy Dropdown List

单击按钮。结果,按钮列表向下展开。当单击列表中的按钮时,主按钮的标题将更改为该按钮的标题。

Kivy Dropdown Button
广告