Kivy - 文字



Kivy 庫中的“kivy.core.text”模組充當渲染文字的後端層。但是,只有在“kivy.uix.label.Label”控制元件無法提供令人滿意的結果時才應使用它。

此模組有兩個重要的用途:一是從核心 Label 物件派生紋理並將其應用於應用程式中的任何控制元件,二是將自定義字型應用於控制元件(如標籤、按鈕或文字輸入(或任何具有文字屬性的控制元件))的文字屬性。

使用紋理

Label 控制元件(在“kivy.uix.label”模組中)在記憶體中載入時通常效率不高。為了克服這個問題,方法是建立一個 core.label 類的物件,並將其紋理與常規控制元件一起使用。

首先從“kivy.core.label”匯入 Label 類(為避免混淆,將其命名為 CoreLabel)。

from kivy.core.text import Label as CoreLabel
cl=CoreLabel(text="Hi there!", font_size=50, color=(1, 0, 0, 1))

在此物件上呼叫 refresh() 方法以計算內容並生成紋理。

cl.refresh()

獲取紋理和紋理大小。

texture = cl.texture
texture_size = list(texture.size)

現在可以將其與任何控制元件一起使用了。

示例

在以下程式碼中,我們將一個標籤控制元件新增到垂直箱式佈局中,並使用核心級別物件的紋理。

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.graphics import *
from kivy.core.text import Label as CoreLabel
from kivy.uix.label import Label
from kivy.uix.widget import Widget
from kivy.core.window import Window

Window.size = (720,400)
   class CoreLabelApp(App):
      def build(self):
         cl=CoreLabel(text="Hi there!", font_size=50, color=(1, 0, 0, 1))
         cl.refresh()
         texture = cl.texture
         main=BoxLayout(orientation='vertical')
         l=Label()
         texture_size = list(texture.size)
         l.canvas.add(Rectangle(texture=texture, size=texture_size))
         main.add_widget(l)
         return main
         
CoreLabelApp().run()

輸出

它將產生以下輸出 -

Kivy Text

自定義字型

所有具有文字屬性的控制元件都使用根據 Kivy 安裝的 config.ini 檔案中的設定的預設字型集進行渲染。

default_font = ['Roboto', 'data/fonts/Roboto-Regular.ttf',
'data/fonts/Roboto-Italic.ttf', 'data/fonts/Roboto-Bold.ttf',
'data/fonts/Roboto-BoldItalic.ttf']

但是,您可能希望使用特定字型在任何控制元件上顯示文字,它可能是標籤、文字輸入框或按鈕。為此,您需要下載相關的字型檔案(True Type 字型由 .ttf 檔案表示)並將其放置在應用程式資料夾中。

為了使這些字型可供我們的應用程式使用,必須在應用程式中註冊它們。為此,呼叫 LabelBase 類的 register() 方法。LabelBase 是由您的作業系統使用的特定字型渲染器使用的抽象類。

register() 是一個靜態方法,具有以下引數 -

register(name, fn_regular, fn_italic=None, fn_bold=None,
fn_bolditalic=None)

其中“name”是在程式中引用字型的字型名稱,“fn_regular”引數是字型的 TTF 檔案。

下載 Consolas 字型和 Monotype Corsiva 字型的 TTF 檔案,並將它們儲存在應用程式資料夾中。

示例

在以下程式中,我們在三個文字輸入框中顯示相同的字串。第一個框以預設字型渲染文字。第二個框使用 Monotype Corsiva,第三個框應用 Consolas 字型。

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.core.text import LabelBase
from kivy.core.window import Window

Window.size = (720,400)
class CustomFontApp(App):
   def build(self):
      main=GridLayout(cols=1)
      LabelBase.register(name='font1', fn_regular='consolas.ttf')
      LabelBase.register(name='font2', fn_regular='MonotypeCorsivaFont.ttf')
      txt='Simple Is Better Than Complicated'
      t1=TextInput(text=txt, halign='center', font_size=48)
      t2=TextInput(
         text=txt, halign='center',
         font_name='font2', font_size=48
      )
      t3=TextInput(
         text=txt, halign='center',
         font_name='font1', font_size=48
      )
      main.add_widget(t1)
      main.add_widget(t2)
      main.add_widget(t3)
      return main
   
CustomFontApp().run()

輸出

它將生成以下輸出視窗 -

Kivy Text Font
廣告

© . All rights reserved.