高級GUI link

這個章節有一些關於GUI高級用法的細節。

Python函數 link

一些支持GUI的Python函數。

gui.button_properties(kind) link

給定按鈕的 kind 類型,返回那個按鈕對應的標準樣式特性的字典數據。字典中包括:

background

詳見後面的內容。

padding

用於gui.kind_borders.padding(前提是這項存在)。

xsize

用於gui.kind_width(前提是這項存在)。

ysize

用於gui.kind_height(前提是這項存在)。

(需要注意,如果 kind 的值是字串“nvl_button”,就會尋找gui.nvl_button_background配置項的值。)

background是一個frame,使用以下第一個能匹配到的文件作為其背景圖:

  • gui/button/kind_[prefix_].background.png

  • gui/button/[prefix_].background.png

如果某個GUI變數名為gui.kind_borders存在就使用。否則,使用 gui.button_borders 。如果gui.kind_tile存在,他決定邊界是否使用tile風格, gui.button_tile 項控制tile。

[prefix_]代表的意思,詳見 樣式前綴搜索

gui.init(width, height) link

初始化GUI。

width

默認窗口寬度。

height

默認窗口高度。

fov

3D舞台的視野(field of view)。

gui.rebuild() link

重建GUI。

gui.text_properties(kind=None, accent=False) link

給定按鈕的 kind 類型,返回那個按鈕對應的標準樣式特性的字典數據。字典中包括:

font

用於gui.kind_text_font,前提是它存在。

size

用於gui.kind_text_size,前提是它存在。

xalign

用於gui.kind_text_xalign,前提是它存在。

text_align

用於gui.kind_text_xalign,前提是它存在。

layout

用於“subtitle”,前提是gui.kind_text_xalign大於0小於1。

還有一些變數設置文本的 color 樣式特性(property)。

color

用於gui.kind_text_color,前提是它存在。如果變數沒有設置,那麼 accent 的值是True,將文本顏色設置為預設的強調(accent)色。

insensitive_color

用於gui.kind_text_insensitive_color,前提是它存在。

idle_color

用於gui.kind_text_idle_color,前提是它存在。

hover_color

用於gui.kind_text_hover_color,前提是它存在。

selected_color

用於gui.kind_text_selected_color,前提是它存在。

也可以使用所有其他 文本樣式特性 。 若 kind 不為None,還可以使用 位置樣式特性 。 例如,使用gui.kind_text_outlines設置outlines樣式特性,使用gui.kind_text_kerning設置行距,等等

variant(f, variant=None) link

函數裝飾器,在GUI初始化或重建GUI時調用。使用方法如下:

@gui.variant
def small():
    gui.text_size = 30
    # ...

指定variant名稱後,可以使用 f (一個函數) 和 variant (一個字串)調用該函數。

gui.button_text_properties(kind=None, accent=False) link

gui.text_properties() 的一個已過時(obsolete)異名。

更多關於gui.rebuild的內容 link

gui.rebuild函數是一個非常慢的函數,更新整套GUI以適應Ren’Py當前的狀態。它的處理的內容包括:

  • 重新運行所有在gui命名空間(namespace)中定義變數的 define 語句。

  • 重新運行所有針對當前語言的多語言支持 translate python 語句塊(block)。

  • 重新運行所有 style 語句。

  • 重建系統內所有樣式。

注意, gui.rebuildinit python 語句塊不會重新運行。使用這種方式定義:

define gui.text_size = persistent.text_size

跟使用這種方式定義:

init python:
    gui.text_size = persistent.text_size

在調用gui.rebuild後得到的結果不同。

default語句、gui命名空間和gui.rebuild link

應用於 gui 命名空間時, default 語句會改變語義。default語句與define語句穿插運行,調用 gui.rebuild() 函數時default語句不會重新運行。

這表示,如果我們有如下語句:

default gui.accent_color = "#c04040"
define gui.hover_color = gui.accent_color

遊戲首次運行時,會設置accent_color,並且將hover_color設為與accent_color相同。

另外,如果我們的腳本中還有這樣一段:

$ gui.accent_color = "#4040c0"
$ gui.rebuild()

Ren’Py值會重新運行define語句,所以它會將hover_color設置為accent_color,並更新樣式。這個機制就能讓部分gui隨著遊戲進度一起改變。

GUI環境設定設置 link

Ren’Py也支持GUI環境設定設置(preference)系統,包括一個函數和一系列行為(action)。

gui.SetPreference(name, value, rebuild=True) link

這個行為(action)將名為 name 的環境設定設置項的值設置為 value

rebuild

若為True,也就是預設值,調用 gui.rebuild() 會讓修改生效。這項應該始終為True,除了存在多個gui.SetPreference行為的情況。那種情況除了最後一個設置為True其他都設置為False。

這是一個非常慢的行為,所以不適合在按鈕處於指針懸垂(hover)狀態時使用。

gui.TogglePreference(name, a, b, rebuild=True) link

這個行為切換gui中名為 name 的環境設定設置在值 ab 之間切換。當這個值等於 a 時表示該項被選中。

rebuild

若為True,也就是預設值,調用 gui.rebuild() 會讓修改生效。這項應該始終為True,除了存在多個gui.SetPreference行為的情況,那種情況除了最後一個設置為True其他都設置為False。

這是一個非常慢的行為,所以不適合在按鈕處於指針懸垂(hover)狀態時使用。

gui.preference(name, default=<renpy.python.RevertableObject object at 0x7f77abf8a6d0>) link

這個函數返回gui中名為 name 的環境設定設置的值。

default

若存在,這個值會成為gui環境設定設置 name 的預設值。第一次使用環境設定設置就需要用到預設值。

樣例 link

當透過調用 gui.preference() 函數,使用環境設定設置名稱和預設值定義變數後,就能使用GUI環境設定設置系統了。例如,我們可以環境設定配置文本字體和字號:

define gui.text_font = gui.preference("font", "DejaVuSans.ttf")
define gui.text_size = gui.preference("size", 22)

使用 gui.SetPreference()gui.TogglePreference() 行為可以添加和修改環境設定配置的值。這是添加到環境設定配置界面的樣例:

vbox:
    style_prefix "check"
    label _("Options")
    textbutton _("OpenDyslexic") action gui.TogglePreference("font", "OpenDyslexic-Regular.otf", "DejaVuSans.ttf")

vbox:
    style_prefix "radio"
    label _("Text Size")
    textbutton _("Small") action gui.SetPreference("size", 20)
    textbutton _("Medium") action gui.SetPreference("size", 22)
    textbutton _("Big") action gui.SetPreference("size", 24)