Kivy - 標籤



標籤是任何GUI工具包中最常用的元件之一。標籤顯示任何不能直接編輯的文字內容。標籤用於顯示頁面標題,作為欄位名稱的佔位符以及文字框之類的輸入控制元件,或者只是為了呈現輸出訊息。

在Kivy中,標籤元件是`kivy.uix.label`模組中定義的`Label`類的物件。

from kivy.uix.Label import Label
lbl = Label(**kwargs)

要自定義標籤物件,您可以使用以下屬性作為建構函式的關鍵字引數:

  • bold - `bold`是`BooleanProperty`,預設為`False`。將其設定為`True`以使用粗體字型的版本。請注意,根據您的字型,粗體屬性可能對您的文字渲染沒有影響。

  • color - 文字顏色,格式為(r, g, b, a)。它是`ColorProperty`,預設為[1, 1, 1, 1]。

  • disabled_color - 標籤停用時文字的顏色,格式為(r, g, b, a)。它是`ColorProperty`,預設為[1, 1, 1, .3]。

  • font_name - 要使用的字型的檔名。`font_name`是`StringProperty`,預設為'Roboto'。此值取自配置。

  • font_size - 文字的字型大小(以畫素為單位)。它是`NumericProperty`,預設為15sp。

  • halign - 文字的水平對齊方式。`halign`是`OptionProperty`,預設為'auto'。可用選項包括:auto、left、center、right和justify。

  • italic - 指示使用字型的斜體版本。`italic`是`BooleanProperty`,預設為`False`。

  • markup - 如果為`True`,則將使用`MarkupLabel`渲染文字:您可以使用標籤更改文字的樣式。

  • outline_color - 文字輪廓的顏色,格式為(r, g, b)。它是`ColorProperty`,預設為[0, 0, 0, 1]。

  • padding - 文字的填充,格式為[padding_left, padding_top, padding_right, padding_bottom]。`padding`也接受兩個引數的形式[padding_horizontal, padding_vertical]和一個引數的形式[padding]。

  • strikethrough - 為文字新增刪除線。`strikethrough`是`BooleanProperty`,預設為`False`。

  • text - 標籤標題的文字。`text`是`StringProperty`,預設為''。例如:

lbl = Label(text='Hello world')
  • text_size - 預設情況下,標籤不受任何邊界框的約束。您可以使用此屬性設定標籤的大小約束。文字將自動流入約束中。因此,雖然字型大小不會減小,但文字將盡可能好地排列到框中,任何仍在框外的文字都將被裁剪。

Label(text='long text . . . ', text_size=(200, None))

`text_size`是`ListProperty`,預設為(None, None),表示預設情況下沒有大小限制。

  • texture - 文字的紋理物件。當屬性更改時,文字會自動呈現。`texture`是`ObjectProperty`,預設為`None`。

  • texture_size - 文字的紋理大小。大小由字型大小和文字決定。如果`text_size`為[None, None],則紋理將是適合文字所需的大小,否則它將被裁剪以適合`text_size`。

  • underline - 為文字新增下劃線。`underline`是`BooleanProperty`,預設為`False`。

  • valign - 文字的垂直對齊方式。它是`OptionProperty`,預設為'bottom'。可用選項包括:'bottom'、'middle'(或'center')和'top'。

對齊方式

雖然`Label`類具有`halign`和`valign`屬性,但文字影像(紋理)的大小僅足以將字元放置在`Label`的中心。

`valign`屬性將不起作用,而`halign`屬性只有在文字包含換行符時才有效;即使`halign`設定為left(預設值),單行文字也會顯示為居中。

要使對齊屬性生效,請設定`text_size`,這是文字在其內對齊的邊界框的大小。例如,以下程式碼將此大小繫結到`Label`的大小,因此文字將在元件邊界內對齊。

Label:
   text_size: self.size
   halign: 'left'
   valign: 'middle'

標記

如果`Label`的`markup`屬性為`True`,則將使用`Text`標記渲染文字,用於內聯文字樣式。就像html標籤一樣,`Text`標記標籤有[tag],並且應該有相應的[/tag]閉合標籤。例如:

[b]Hello [color=ff0000]world[/color][/b]

可以使用以下標籤來構造標籤文字:

序號 標籤和文字描述
1 [b][/b]

啟用粗體文字

2 [i][/i]

啟用斜體文字

3 [u][/u]

下劃線文字

4 [s][/s]

刪除線文字

5 [font=<str>][/font]

更改字型(注意 - 這指的是TTF檔案或註冊的別名)

6 [size=<size>][/size]

更改字型大小。應為整數,可以選擇帶單位(即16sp)

7 [color=#<color>][/color]

更改文字顏色

8 [sub][/sub]

相對於之前的文字,在下標位置顯示文字。

9 [sup][/sup]

相對於之前的文字,在上標位置顯示文字。

例如,這將建立一個標籤“hello world”,其中“world”為粗體

l = Label(text='Hello [b]World[/b]', markup=True)

大小

`Label`的大小不受文字內容的影響,文字也不受大小的影響。為了控制大小,必須指定`text_size`來約束文字和/或將大小繫結到`texture_size`以隨著文字增長。

例如,在kv語言指令碼中,此標籤的大小將設定為文字內容(加上填充):

Label:
   size: self.texture_size

示例

我們現在將在以下示例中演示一些`Label`屬性的使用。這裡將三個標籤放置在垂直的盒子佈局中。每個標籤都使用`Label`類的一些特定屬性構建。

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.graphics import Color, Rectangle
from kivy.core.window import Window

Window.size = (720, 350)

class LblApp(App):
   def build(self):
      layout = BoxLayout(orientation='vertical')
      self.l1 = Label(
         text='Hello World', color=[1, 0, 0, 1],
         font_size=40, bold=True
   )
   
   self.l2 = Label(
   text='Hello Python', color=[0, 1, 0, 1],
   font_size=40, italic=True
   )
   
   self.l3 = Label(
      text='Hello Kivy', color=[0, 0, 1, 1],
      font_size=40, font_name='Arial',
      underline=True
   )
   layout.add_widget(self.l1)
   layout.add_widget(self.l2)
   layout.add_widget(self.l3)
   return layout

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

輸出

執行上述程式時,將顯示三個標籤,其標題具有程式碼中定義的相應格式屬性:

Kivy Label

帶有kv檔案的示例

現在將使用“kv”檔案建立上述設計。除了在上面的Python程式碼中使用的屬性外,我們還為每個標籤應用背景顏色。

`Label`類不支援背景顏色屬性。為了克服這個問題,我們在按鈕的畫布上繪製一個具有所需顏色的填充顏色的矩形。例如:

Label:
   canvas:
      Color :
         rgba: 0, 1, 0, 0.25
      Rectangle:
         pos:self.pos
         size : self.size

我們利用此功能為三個標籤應用不同的背景顏色。

BoxLayout:
   orientation:'vertical'
   Label:
      text:'Hello World'
      color : [1,0,0,1]
      font_size : 40
      bold : True
      canvas:
         Color :
            rgba: 0, 1, 0, 0.25
         Rectangle:
            pos:self.pos
            size : self.size

   Label:
      text:'Hello Python'
      color:[0,1,0,1]
      font_size:40
      italic:True
      canvas:
         Color :
            rgba: 1, 1, 0, 0.1
         Rectangle:
            pos:self.pos
            size : self.size
   Label:
      text:'Hello Kivy'
      color:[0,0,1,1]
      font_size:40
      font_name:'Arial'
      underline:True

輸出

將此“lbl.kv”檔案新增到Python Kivy應用程式中,並執行程式。您應該獲得以下顯示,顯示三個具有相應背景顏色的標籤。

Kivy Three Labels
廣告