Kivy - 設定



“kivy.uix.settings”模組包含一個非常有用的功能,允許您處理 Kivy 安裝環境的設定引數。您可以在應用程式視窗上開啟設定面板並修改任何配置標記。

安裝 Kivy 軟體時,它會建立一個配置檔案,其中包含帶有其預設值的各種引數標記。該檔名為“config.ini”,儲存在由 KIVY_HOME 環境變數標識的目錄中。

  • Windows機器上 - 該檔案儲存在 C:\Users\user\.kivy\config.ini。

  • Linux上 - /home/user/.kivy/config.ini。

  • macOS上 - /Users/user/.kivy/config.ini。

  • Android上 - /data/data/org.kivy.launcher/files/.kivy/config.ini。

  • iOS上 - <HOME_DIRECTORY>/Documents/.kivy/config.ini。

要開啟設定面板,請呼叫 App 類的 open_settings() 方法,通常是在 GUI 上對 on_press 事件(或任何其他事件)做出響應時呼叫。

def onpress(self, instance):
   app.open_settings()

我們從一個簡單的 Kivy 應用程式開始,該應用程式在視窗上安裝了一個按鈕。當按下按鈕時,它會呼叫 onpress() 方法以顯示 Kivy 設定面板。

class HelloApp(App):
   def onpress(self, instance):
      app.open_settings()
   def build(self):
      b1=Button(
         text='Click Here', font_size=50,
         on_press=self.onpress
      )
      return b1

app = HelloApp()
app.run()

應用程式執行後,單擊按鈕進入設定面板。

Kivy Settings

此處顯示的設定與您在 config.ini 檔案中看到的設定相同。嘗試更改任何配置標記的值,您將看到對配置檔案所做的更改。

有幾種可用的設定面板佈局。

  • 設定 - 顯示設定,左側有一個側邊欄用於在 json 面板之間切換。

  • SettingsWithSidebar - Settings 的一個簡單子類。

  • SettingsWithSpinner - 顯示設定,頂部有一個微調器,可用於在 json 面板之間切換。這是預設設定。

  • SettingsWithTabbedPanel - 將 json 面板顯示為 TabbedPanel 中的單個選項卡。

  • SettingsWithNoMenu - 顯示單個 json 面板,無法切換到其他面板,也沒有關閉按鈕。

要使用 SeetingsWithSidebar 佈局,請從 kivy.uix.settings 模組匯入它,並將其分配為 App 類 settings_cls 引數的值。

from kivy.uix.settings import SettingsWithSidebar
class HelloApp(App):
   def onpress(self, instance):
      app.open_settings()
   def build(self):
      self.settings_cls = SettingsWithSidebar
      b1=Button(text='Click Here', font_size=50, on_press=self.onpress)
      return b1

視窗現在提供了一個側邊欄來在設定面板之間切換。

Kivy Settings Panels

建立新面板

現在,您只有一個名為 Kivy 的面板,它顯示 Kivy 配置的預設設定。您可以新增一個新面板來定義應用程式的設定。您需要兩件事 -

  • 一個帶有預設值的 ConfigParser 例項。

  • 一個 JSON 物件。

您必須建立和處理 ConfigParser 物件,以告知 kivy 的 configparser 在配置檔案中儲存哪些設定。SettingsPanel 將從中讀取值。這些設定的預設值在 JSON 物件中為所有部分/鍵指定了 setdefaults。

讓我們新增 build_config 方法,該方法為按鈕的文字和字型大小屬性提供預設值。

def build_config(self, config):
   config.setdefaults('My Button', {'text': 'Hello Kivy, 'font_size': 20})

build_settings() 方法根據程式碼中的 JSON 物件在配置中構建一個新面板。

此示例中使用的 JSON 物件為 -

json = '''
[
   {
      "type": "string",
      "title": "Button text",
      "desc": "text on the button",
      "section": "My Button",
      "key": "text"
   },
   {
      "type": "numeric",
      "title": "Button font size",
      "desc": "font size",
      "section": "My Button",
      "key": "font_size"
   }
]

要根據此 JSON 物件的定義新增新面板,請定義 build_settings() 方法 -

def build_settings(self, settings):
   settings.add_json_panel('My Button', self.config, data=json)

就是這樣。開啟設定後,您應該會看到添加了一個新的“我的按鈕”面板。

示例

下面給出完整程式碼 -

from kivy.app import App
from kivy.uix.button import Button
from kivy.core.window import Window
from kivy.uix.settings import SettingsWithSidebar

Window.size = (720,350)
json = '''
[
   {
      "type": "string",
      "title": "Button text",
      "desc": "text on the button",
      "section": "My Button",
      "key": "text"
   },
   {
      "type": "numeric",
      "title": "Button font size",
      "desc": "font size",
      "section": "My Button",
      "key": "font_size"
   }
]
'''
class MyApp(App):
   def onpress(self, instance):
      app.open_settings()
      
   def build(self):
      self.settings_cls = SettingsWithSidebar
      self.btn = Button(on_press=self.onpress)
      self.btn.text = self.config.get('My Button', 'text')
      self.btn.font_size = float(self.config.get('My Button', 'font_size'))
      return self.btn
   
   def build_config(self, config):
      config.setdefaults(
         'My Button', {'text': 'Hello Python', 'font_size': 20}
      )
   
   def build_settings(self, settings):
      settings.add_json_panel('My Button', self.config, data=json)
      
   def on_config_change(self, config, section, key, value):
      if section == "My Button":
         if key == "text":
            self.btn.text = value
         elif key == 'font_size':
            self.btn.font_size = float(value)
app=MyApp()
app.run()

輸出

開啟設定面板後,您現在將看到“我的按鈕”面板,其中有兩個設定。根據需要修改值。最後,關閉設定對話方塊並返回檢視更改。

Kivy Settings Hello
廣告