Kivy - 旋轉器



Kivy 框架中的 Spinner 控制元件是一種更傳統的下拉控制元件型別,不同於 Kivy 的 DropDown 控制元件。與 DropDown 相比,構造和使用 Spinner 控制元件更加簡單方便。

Kivy 的下拉選單和旋轉器控制元件之間的主要區別在於,下拉選單控制元件可以包含任何其他 Kivy 控制元件,例如 Label、Button、Image 等;而旋轉器僅僅是一個字串列表。

Spinner 類定義在 "kivy.uix.spinner" 模組中。

from kivy.uix.spinner import Spinner
spin = Spinner(**kwargs)

Spinner 控制元件顯示一個對應於當前選擇值的文字標題。Spinner 物件可以使用不同的屬性作為關鍵字引數進行構造。但是,這兩個屬性非常重要:

  • text 屬性是一個字串,顯示預設值。

  • values 屬性是一個 ListProperty,包含所有可供選擇的數值。

要構造一個簡單的旋轉器,請使用以下程式碼片段:

from kivy.base import runTouchApp
from kivy.uix.spinner import Spinner

spinner = Spinner(
   text='English',
   values=('English', 'French', 'German', 'Chinese')
)

旋轉器物件的 text 屬性可以繫結到一個回撥函式,以便在每次進行選擇時呼叫相應的操作。

def value_changed(spinner, text):
   print(You selected', text, 'language')
   
spinner.bind(text=show_selected_value)

Spinner 類中的其他屬性如下所示:

  • dropdown_cls - 用於在按下 Spinner 時顯示下拉列表的類。它是一個 ObjectProperty,預設為 DropDown。

  • is_open - 預設情況下,旋轉器未開啟。設定為 True 以開啟它。

  • option_cls - 用於在 Spinner 下顯示的下拉列表中顯示選項的類。該類的 text 屬性將用於表示值。它的 on_release 事件用於在按下/觸控選項時觸發選項。

  • text_autoupdate - 這是一個 BooleanProperty。它指示是否應使用 values 屬性的第一個值自動更新旋轉器的文字。將其設定為 True 將導致旋轉器在每次更改 values 時更新其 text 屬性。

  • values - 使用者可以選擇的值。它必須是一個字串列表。它是一個 ListProperty,預設為 []。

下面的程式碼組裝了一個 Spinner,並關聯了一個標籤,以便在水平框中顯示選定的值。下面的水平框包含一個 TextInput 和一個 Button。目的是在該按鈕上提供一個回撥函式,該函式將文字框中的字串新增到 Spinner 值中。

該程式在 App 類中包含兩個回撥方法。一個用於顯示從旋轉器中選擇的值,另一個用於向旋轉器新增新的語言。

新增新語言的回撥函式:

def addvalue(self, instance):
   self.spin1.values.append(self.t1.text)

我們將把此方法繫結到“新增”按鈕。

在標籤上顯示選定的語言:

def on_spinner_select(self, spinner, text):
   self.spinnerSelection.text = "Selected Language is: %s" %self.spin1.text

我們將把此方法繫結到 Spinner 控制元件的“text”屬性。

示例

將下面的程式碼儲存為“spiinerdemo.py”並執行。

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.spinner import Spinner
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.core.window import Window

Window.size = (720, 400)

class SpinnerExample(App):
   def addvalue(self, instance):
      self.spin1.values.append(self.t1.text)
      
   def build(self):
      layout = BoxLayout(orientation='vertical')
      lo1 = BoxLayout(orientation='horizontal')
      self.spin1 = Spinner(
         text="Python",
         values=("Python", "Java", "C++", "C", "C#", "PHP"),
         background_color=(0.784, 0.443, 0.216, 1),
         size_hint=(.5, .4), pos_hint={'top': 1}
      )
      lo1.add_widget(self.spin1)
      self.spinnerSelection = Label(
         text="Selected value in spinner is: %s" % self.spin1.text,
         pos_hint={'top': 1, 'x': .4}
      )
      lo1.add_widget(self.spinnerSelection)
      layout.add_widget(lo1)
      lo2 = BoxLayout(orientation='horizontal')
      lo2.add_widget(Label(text="Add Language"))
      self.t1 = TextInput()
      
      self.b1 = Button(text='add')
      lo2.add_widget(self.t1)
      lo2.add_widget(self.b1)
      layout.add_widget(lo2)
      self.spin1.bind(text=self.on_spinner_select)
      self.b1.bind(on_press=self.addvalue)
      return layout
      
   def on_spinner_select(self, spinner, text):
      self.spinnerSelection.text = "Selected value in spinner is: %s" % self.spin1.text
      print('The spinner', spinner, 'have text', text)

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

輸出

左上角的按鈕是 Spinner。單擊時,語言列表會下拉。您可以進行選擇。所選名稱將顯示在其右側的標籤上。

Kivy Spinner

要向列表中新增新的語言,請在文字框中輸入,然後單擊“新增”按鈕。旋轉器控制元件將在底部追加新的語言名稱。如果列表足夠長,您可以使用滑鼠向下滾動。

廣告