高級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.rebuild
中 init 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 的環境設定設置在值 a 和 b 之間切換。當這個值等於 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)