界面行為(action)、值(value)和函數 link

Ren’Py帶來了一大堆行為、值和函數,與界面和界面語言協同作用。

行為(action) link

當某個按鈕(包括圖片按鈕、文本按鈕和hotspot按鈕)被啟用、被滑鼠懸停或失去滑鼠懸停狀態時,某個行為(action)就會被喚起。當某個按鈕被選中或者非啟用時,行為(action)就可能已經決定了。

與這些行為一樣,某個行為可以是一個不帶任何入參的函數。當行為被喚起時,對應的函數就會調用。如果那個行為返回某個值,返回的值就會傳到來源交互動作。

需要使用行為的地方也可能出現的是一個行為的列表,列表內的行為會順序執行。 只有列表中的行為都是sensitive狀態時,列表自身才是sensitive狀態。selected狀態同理。 除非列表中某些行為使用了 SensitiveIf()SelectedIf() 來決定自身狀態。

控制行為 link

這些行為用於管理界面,交互結果和流程控制。

Call(label, *args, **kwargs) link

結束當前語句,並調用某個腳本標籤(label)。入參和關鍵字參數會傳給 renpy.call()

Hide(screen=None, transition=None, _layer=None) link

如果名為 screen 的界面已經顯示,則隱藏這個界面。

screen

若為字串,表示待隱藏界面的名稱。若為None,表示待隱藏界面為當前界面。

transition

如果非None,隱藏界面時使用轉場(transition)。

_layer

該項將作為layer參數傳入 renpy.hide_screen()。若該項為None則忽略。

Jump(label) link

觸發主控流程轉到腳本標籤 label 處。

NullAction(*args, **kwargs) link

不做任何事。

可以用作某個按鈕的“滑鼠懸停/滑鼠離開”事件響應,不執行任何行為。

Return(value=None) link

使用提供的值返回給當前的互動行為,提供的值不可以為None。常用於菜單和imagemap,用來選擇交互行為的返回值。如果使用的是 call screen 語句調用界面,返回值就會放置在 _return 變數中。

如果出現在某個菜單中,值會返回給來源菜單。(這種情況下就需要返回None。)

Show(screen, transition=None, *args, **kwargs) link

觸發另一個界面的顯示。 screen 是給定待顯示的界面名。入參會傳給正在顯示的界面。

如果 transition 非空,則會用作新界面顯示時的轉場效果。

該行為可以使用 _layer_zorder_tag 關鍵字入參。各參數的意義與 renpy.show_screen() 函數相同。

ShowTransient(screen, transition=None, *args, **kwargs) link

顯示一個臨時界面。臨時界面會在當前交互完成後隱藏。入參會傳給當前顯示的界面。

如果 transition* 非空,則會用作新界面顯示時的轉場效果。

該行為可以使用 _layer_zorder_tag 關鍵字入參。各參數的意義與 renpy.show_screen() 函數相同。

ToggleScreen(screen, transition=None, *args, **kwargs) link

切換界面的可視性。如果某個界面當前沒有顯示,則會使用提供的入參顯示那個界面。相反,則隱藏那個界面。

如果 transition 非空,則會用作新界面顯示時的轉場效果。

該行為可以使用 _layer_zorder_tag 關鍵字入參。各參數的意義與 renpy.show_screen() 函數相同。

數據行為 link

下表中列出了一些常用數據行為(Data Action),根據數據類型、作用域等特徵做了分類:

管理器

訪問器

Variable

ScreenVariable

LocalVariable

Field

Dict

Set

SetVariable()

SetScreenVariable()

SetLocalVariable()

SetField()

SetDict()

Toggle

ToggleVariable()

ToggleScreenVariable()

ToggleLocalVariable()

ToggleField()

ToggleDict()

Cycle

CycleVariable()

CycleScreenVariable()

CycleLocalVariable()

CycleField()

CycleDict()

Increment

IncrementVariable()

IncrementScreenVariable()

IncrementLocalVariable()

IncrementField()

IncrementDict()

訪問器決定“誰”的數值發生變化,管理器決定新值的結果。具體關係如下:

  • -Variable 類行為,會在通用儲存空間中尋找 name 同名的全局變數, 並修改該變數的值。name 參數必須是一個字串。其可以是一個簡單的變數名,比如“strength”。也可以是使用英文符號“.”的某些變數的欄位, 比如“hero.strength”或“persistent.show_cutscenes”。

  • -ScreenVariable 類行為, 會在當前最上層(通常是獲得焦點的)界面中尋找 name 同名的變數,並修改該變數的值。 如果該變數所在界面被多個界面使用 use 引用,則修改之後會同時在各界面產生效果。

  • -LocalVariable (SetLocalVariable, ToggleLocalVariable, CycleLocalVariable, IncrementLocalVariable)`類行為, 會在使用該行為的界面內尋找 `name 同名的本地變數,並修改該變數的值。僅在某個界面且被其他界面使用 use 引用時(詳見 use),才適合使用該行為。 其他更多情況時,更推薦使用 -ScreenVariable 類行為。後者還有更好的性能表現和更多的界面快取資訊。 -LocalVariable 類行為僅能創建在變數所屬的上下文中,且不能賦值到其他地方。

  • -Field 類行為, 能修改 object 對象中名為 field 的欄位。

  • -Dict 類行為, 可以修改字典 dict 中的鍵 key 對應的值 dict[key]。該類行為也可以修改類表。

  • Set- 類行為, 直接把目標值改為 value 入參的值。注意,set 項沒有任何操作,其是Python內建類型。總結起來,target = value

  • Toggle- 類行為, 可以切換目標的布爾值。可切換範圍為 true_value (需要指定,未指定則為None)和 false_value (同上)。 如果 true_valuefalse_value 都是None,則執行 target = not target

  • Cycle- 類行為, 會循環獲取 values 中的元素。values 必須是一個非空序列(列表、元組或數值範圍)。 如果行為運行時,目標的值沒有匹配到序列中的任何元素,則將目標的值設置為序列中的第一個元素。 loop 參數(預設為True)決定 values 越界的處理方式:若為True則會從頭開始,若為False則拋出異常。 reverse 參數(預設為False)會翻轉序列元素順序。

  • Increment- 類行為, 會將目標數值增加一個 amount 的量。amount 預設值為1,且可以任何與目標相容的數據類型。target = target + amount

CycleDict(dict, key, values, *, reverse=False, loop=True) link

參見 數據行為

CycleField(object, field, values, *, reverse=False, loop=True) link

參見 數據行為

CycleLocalVariable(name, values, *, reverse=False, loop=True) link

參見 數據行為

CycleScreenVariable(name, values, *, reverse=False, loop=True) link

參見 數據行為

CycleVariable(name, values, *, reverse=False, loop=True) link

參見 數據行為

IncrementDict(dict, key, amount=1) link

參見 數據行為

IncrementField(object, field, amount=1) link

參見 數據行為

IncrementLocalVariable(name, amount=1) link

參見 數據行為

IncrementScreenVariable(name, amount=1) link

參見 數據行為

IncrementVariable(name, amount=1) link

參見 數據行為

SetDict(dict, key, value) link

參見 數據行為

SetField(object, field, value) link

參見 數據行為

SetLocalVariable(name, value) link

參見 數據行為

SetScreenVariable(name, value) link

參見 數據行為

SetVariable(name, value) link

參見 數據行為

ToggleDict(dict, key, true_value=None, false_value=None) link

參見 數據行為

ToggleField(object, field, true_value=None, false_value=None) link

參見 數據行為

ToggleLocalVariable(name, true_value=None, false_value=None) link

參見 數據行為

ToggleScreenVariable(name, true_value=None, false_value=None) link

參見 數據行為

ToggleVariable(name, true_value=None, false_value=None) link

參見 數據行為

下列行為不符合上表的規則。其中一些會用到Python的 set 類型數據,但又與上面的 Set- 類行為不一樣。

這些行為設置或者切換數據。

AddToSet(set, value) link

value 添加到 set 中。

set

待添加元素的集合。其可以是一個Python的集合或者列表數據列表。如果是列表的話,新增的值會追加到列表結尾。

value

待添加或追加的值。

RemoveFromSet(set, value) link

valueset 中移除。

set

待移除元素的集合,可以是一個集(set)或者列表(list)型數據。

value

待移除的元素。

ToggleSetMembership(set, value) link

切換集 setvalue 的成員。如果對應的值在集裡不存在,會添加那個值到集合中。否則,就會移動那個值。

帶有這個行為的按鈕會被標記為被選中(selected)狀態,僅當那個值存在於集 set 中。

set

待添加或移除成員的集合。其可以是一個集(set)或列表(list)。如果是列表,就會在列表中結尾添加新元素。

value

需要添加的值。

文件行為 link

這些行為會處理文件的保存、讀取和刪除。其中很多都是用 namepage 入參。

name

待保存內容的檔案名。其可以是一個字串或者一個整數。與 page 拼接用於待創建文件的名稱。

page

行為實際執行的頁面(page)。其值是“auto”、“quick”或者一個正整數。若為None,page的值會根據持久化頁面編號自動確定。

如果設置了 config.file_slotname_callback,則會使用該配置項作為存檔槽位名稱。

FileAction(name, page=None, **kwargs) link

對存檔文件“進行正確操作”。這意味著在load界面顯示時進行存檔文件讀取操作,相反在save界面顯示時進行存檔文件保存操作。

name

存檔或讀檔時,槽位的名稱。如果為None,一個未被使用的槽位(基於當前時間的巨大數字)就會被使用。

page

存檔或讀檔時使用的頁面編號(page)。若為None,就使用當前頁面。

其他關鍵字入參會傳給FileLoad或者FileSave。

FileDelete(name, confirm=True, page=None, slot=False) link

刪除存檔文件。

name

要刪除的存檔槽名稱。

confirm

若為True,刪除存檔文件前提示用戶確認。

page

存檔或讀檔時使用的頁面編號(page)。若為None,就使用當前頁面。

slot

若為True,直接使用 name 作為存檔槽位名,忽略 page

FileLoad(name, confirm=True, page=None, newest=True, cycle=False, slot=False) link

讀取存檔文件。

name

讀取的槽位名稱。若為None,an unused slot the file will not be loadable。

confirm

如果為True且當前不在主選單,在讀取存檔文件前提是用戶確認。

page

存檔文件讀取的頁面編號。如果為None,就是用當前頁面。

newest

如果為True,按鈕會被選中,前提是其為最新的存檔文件。

cycle

忽略。

slot

若為True,直接使用 name 作為存檔槽位名,忽略 page

FilePage(page) link

將存檔文件頁面設置為 page ,其可以是“auto”、“quick”或一個整數。

FilePageNext(max=None, wrap=False) link

前往下一個存檔文件頁面(page)。

max

若該值存在,應該是整數,給定了我們前往的存檔文件最大頁面編號。

wrap

若為True,我們可以從存檔文件最後的頁面前往第一頁面,前提是設置了頁面最大編號。

auto

若此參數和 warp 都為True,將會把玩家帶往自動存檔頁。

quick

若此參數和 warp 都為True,將會把玩家帶往快速存檔頁。

FilePagePrevious(max=None, wrap=False, auto=True, quick=True) link

前往上一個存檔文件頁面,前提是上一個頁面存在的話。

max

若該值存在,應該是整數,給定了我們前往的存檔文件最大頁面編號。需要啟用wrap。

wrap

若為True,我們可以從存檔文件第一頁面前往最後的頁面,前提是設置了頁面最大編號。

auto

若此參數和 warp 都為True,將會把玩家帶往自動存檔頁。

quick

若此參數和 warp 都為True,將會把玩家帶往快速存檔頁。

FileSave(name, confirm=True, newest=True, page=None, cycle=False, slot=False, action=None) link

保存存檔文件。

如果某個存檔被標記為最新存檔,那該存檔對應的按鈕將處於選中狀態。

name

待存檔的槽位名。如果為None,一個未被使用的槽位(基於當前時間的巨大數字)就會被使用。

confirm

若為True,覆蓋存檔文件前提示用戶確認。

newest

忽略。

page

槽位所在頁面名稱。若為None,使用當前頁面。

cycle

如果為True,在提供的頁面上存檔會循環使用而並不會顯示給用戶看。config.quicksave_slots 配置了循環使用的槽位。

slot

若為True,使用 name 參數,而忽略 page 參數。

action

存檔成功完成後執行的一個行為。

FileTakeScreenshot() link

當遊戲存檔時,截取螢幕快照並使用。通常使用存檔界面顯示之前的界面截圖,用作存檔的快照。

QuickLoad(confirm=True) link

快速讀檔。

confirm

若為True,且目前不在主選單界面,讀檔前提是用戶確認。

QuickSave(message='Quick save complete.', newest=False) link

快速存檔。

message

當快速存檔完成時向用戶顯示的一條資訊。

newest

設置為True用於標記快速存檔為最新的存檔。

同步行為 link

DownloadSync() link

該行為會從Ren’Py同步伺服器端下載數據並同步。

UploadSync() link

該行為會將最後存檔文件上傳到Ren’Py同步伺服器端。

音訊行為 link

關於音訊通道(channel)的概念和工作機制,大多數資訊都可以在 音訊 中找到解釋。

GetMixer(mixer, db=False) link

返回 mixer 的音量值。

db

若為True,返回的音量值單位為分辨。 若為預設值False,音量值介於0.0與1.0之間。

PauseAudio(channel, value=True) link

音訊通道 channel 設置暫停標識(flag)。

如果 value 為True,通道channel會暫停。相反,通道channel會從暫停恢復。如果值為“toggle”,暫停標識會進行切換,即布爾值進行“邏輯非”操作。

Play(channel, file, selected=None, **kwargs) link

在指定通道(channel)播放一個音訊檔案。

channel

播放使用的通道(channel)。

file

播放的文件。

selected

若為True,當文件在通道上播放時,使用這個行為的按鈕會被標記為“被選中”。若為False,這個行為不會觸發按鈕啟動播放。若為None,當通道是一個音樂(music)通道時按鈕會被標記為“被選中”。

其他關鍵字參數會被傳給 renpy.music.play()

Queue(channel, file, **kwargs) link

在給定的通道上將音訊檔案隊列化。

channel

播放使用的通道(channel)。

file

播放的文件。

其他關鍵字參數會被傳給 renpy.music.queue()

SetMixer(mixer, volume) link

mixer 的音量設定為 value

mixer

需要調整音量的混合器(mixer)。這個字串通常是“main”、“music”、“sfx”或“voice”。混合器的資訊詳見 音量

value

調整的目標音量值。是一個位於0.0至1.0閉區間內的數值。

SetMute(mixer, mute) link

將一個或多個混合器設置為靜音狀態。當混合器靜音時,與混合器關聯的音訊通道會停止播放音訊。

mixer

給出單個混合器名稱的字串,或一個混合器列表名稱的字串列表。混合器名稱通常是“music”、“sfx”或“voice”。

mute

若為True則靜音混合器,若為False則取消混合器靜音。

Stop(channel, **kwargs) link

停用某個音訊通道。

channel

停用的音訊通道名。

關鍵字參數會傳給 :func:renpy.music.stop()。

ToggleMute(mixer) link

切換混合器的靜音狀態。

mixer

單個混合器名稱的字串,或一個混合器列表名稱的字串列表。混合器名稱通常是“music”、“sfx”或“voice”。

獲取焦點行為 link

CaptureFocus(name='default') link

若某個可視組件獲得焦點並執行該行為,將儲存一塊包含可視組件的矩形區域,並根據入參 name 命名。 該矩形區域可通過 GetFocusRect()nearrect 組件的 focus 特性訪問。 若沒有可視組件獲得焦點,上次捕獲的矩形區域將從儲存區移除。

name

獲得焦點矩形區域儲存名稱。其應是一個字串。 如果設置為“tooltip”則比較特殊,當提示消息改變時,將執行自動捕獲。

ClearFocus(name='default') link

使用 CaptureFocus() 函數清除儲存的矩形區域焦點。

GetFocusRect(name='default') link

若指定名稱的矩形區域在儲存區中(無論是使用 CaptureFocus() 捕獲還是tooltip自動捕獲),返回一個(x, y, h, w)形式的矩形。否則返回None。

name

獲得焦點矩形區域檢索名稱。其應是一個字串。 如果設置為“tooltip”則比較特殊,當提示消息改變時,將執行自動捕獲。

ToggleFocus(name='default') link

若焦點矩形區域存在則清除,否則捕獲。

name

獲得焦點矩形區域儲存名稱。其應是一個字串。 如果設置為“tooltip”則比較特殊,當提示消息改變時,將執行自動捕獲。

其他行為 link

這些是其他地方找不到的一些行為。

Confirm(prompt, yes, no=None, confirm_selected=False) link

提示用戶進行確認的一種行為。如果用戶點擊了“是”,將執行 yes 行為。否則,執行 no 行為。

prompt

向用戶顯示的提示內容。

confirm_selected

若為True,當yes行為被選中後,提示 prompt 依然會顯示。若為False,也是預設值, yes 行為選中後提示就不再顯示。

這個行為的可用性和可選擇性與 yes 行為相匹配。

該行為還有個函數版本 renpy.confirm()

CopyToClipboard(s) link

將字串 s 複製到系統剪貼板。該行為只能在電腦和手機上運行,Web平台無法正常運行。

DisableAllInputValues() link

禁用所有活動的輸入項。如果存在默認輸入項的話,它將重新獲得焦點。否則,任何輸入項都不會獲得焦點。

EditFile(filename=None, line=1) link

要求Ren’Py在文本編輯器中打開指定文件。 該行為僅在某些平台能運行。

filename

指定要打開文件的檔案名。若為None,則使用當前使用的檔案名和文件行數,line 參數將被忽略。

line

一個數字。打開文件後,游標(cursor)會移動到 line 對應的行開頭。

ExecJS(code) link

執行指定的JavaScript代碼。僅支持Web平台。在其他平台運行會拋出異常。 JS腳本會在窗口上下文中非同步執行,返回結果不能通過該行為獲得。

code

待執行的JaveScript代碼。

Function(callable, *args, _update_screens=True, **kwargs) link

這個行為會 調用 callable(*args, **kwargs)

callable

可調用的對象。該項假設遇到兩個相等的可調用對象,調用任意一個都是相同的。

args

傳給 callable 的固定位置入參。

kwargs

傳給 callable 的關鍵字入參。

_update_screens

若為True,在函數返回後重啟互動系統並更新界面。

這個行為使用一個可選的 _update_screens 關鍵字參數,而且這個參數預設為True。參數為True時,函數返回後,互動行動會重新開始,各界面會更新。

如果函數返回一個非空值,互動行為會停止並返回那個值。(使用call screen語句得到的返回值放置在 _return 變數中。)

創作者可以從 Action 派生自己的子類,並替代此Function函數。 這樣就可以自己命名行為,並判斷對應組件是否選中和可啟用的。

Help(help=None) link

顯示幫助。

help

用於提供幫助的字串。其被用於以下兩種情況:

  • 如果存在一個對應名稱的文本標籤(label),對應的標籤會在新的上下文中被調用。

  • 否則,內嵌某個給定檔案名稱,並使用web瀏覽器打開。

help 為None,config.help 配置項會被用作預設值。 若 help 為None,且配置了 config.help_screen ,則在新的上下文中顯示配置的幫助界面。 其他情況下,不做任何處理。

HideInterface() link

隱藏用戶介面(UI),直到出現用戶點擊事件。也可以在遊戲中按鍵盤H鍵隱藏UI。

If(expression, true=None, false=None) link

根據 expression 的結果選擇使用 truefalse 的行為。這個函數用在基於某個表達式的結果選擇執行行為。注意入參的預設值None,也可以用作一個行為,禁用某個按鈕。

InvertSelected(action) link

該行為將提供行為的選項狀態反轉,可以應用在別的方法上。

MouseMove(x, y, duration=0) link

將滑鼠指針移動到坐標 x, y 。如果設備沒有滑鼠指針,或者_preferences.mouse_move的值是False,那什麼都不會發生。

duration

移動滑鼠指針行為消耗的時間,單位為秒。這個時間段內,滑鼠可能不會響應用戶操作。

Notify(message) link

使用 renpy.notify() 函數顯示 message 內容。

OpenDirectory(directory) link

在文件資源管理器中打開指定目錄 directory。目錄 directory 為以 config.basedir 為根目錄的相對目錄。

OpenURL(url) link

在web瀏覽器中打開 url

QueueEvent(event, up=False) link

使用 renpy.queue_event() 將給定的事件消息加入到事件隊列中。

RestartStatement() link

這個行為會使Ren’Py回滾到當前語句之前,並再次執行當前語句。可以用在某些持久化變數改變後影響語句顯示效果的情況。

在菜單上下文運行的話,等到用戶退出並回到上一層上下文時才會執行回滾行為。

RollForward(*args, **kwargs) link

這個行為觸發前滾,前提是前滾可行。否則,該行為是禁用狀態。

Rollback(*args, **kwargs) link

這個行為觸發回滾,前提是回滾可行。否則,不會發生任何事。

入參將傳給 :func:renpy.rollback() 函數,除非參數 force 是預設值“menu”。

RollbackToIdentifier(identifier) link

這個行為觸發回滾至某個標識符(identifier)。回滾標識符會作為HistoryEntry對象的一部分返回。

Screenshot(*args, **kwargs) link

螢幕截圖。

Scroll(id, direction, amount='step', delay=0.0) link
id

當前界面中條(bar)、視口(viewport)或vpgrid的id。

direction

如果是vbar,“increase”或“decrease”二選一;如果是視口或vpgrid,“horizontal increase”、“vertical increase”、“horizontal decrease”或“vertical decrease”,四選一。

amount

滾動數量。可以使用像質數,也可以寫“step”或“page”。

delay

若非零,表示動畫延遲時間值。

SelectedIf(action, /) link

這個行為允許“根據一個行為列表”判斷一個按鈕是否被標記為選中狀態。其應被用作包含一個或多個行為的列表的一部分。例如:

# 如果mars_flag為True時,按鈕會被選中
textbutton "Marsopolis":
    action [ SelectedIf(SetVariable("mars_flag", True)), SetVariable("on_mars", True) ]

點擊按鈕後,在SeletedIf內部的行為會被正常執行。

SensitiveIf(action, /) link

這個行為允許“根據一個行為列表”判斷一個按鈕是否被標記為可用狀態。其應被用作包含一個或多個行為的列表的一部分。例如:

# 如果mars_flag為True時,按鈕是可用的
textbutton "Marsopolis":
    action [ SensitiveIf(SetVariable("mars_flag", True)), SetVariable("on_mars", True) ]

點擊按鈕後,在SensitiveIf內部的行為會被正常執行。

Skip(fast=False, confirm=False) link

使遊戲開始使用跳過(skipping)。如果遊戲處於菜單上下文下,這個行為導致回到遊戲界面。否則,這個行為啟用跳過(skipping)。

fast

若該值為True,直接跳到下一個菜單選項。

confirm

若該值為True,在使用跳過(skipping)前需要用戶確認。

With(transition) link

使 transition 生效。

還有一些行為記錄在文件的其他頁面,比如 LanguageReplayEndReplaygui.SetPreferencegui.TogglePreferenceStylePreferencevoice actions

可以通過 Action 類創建新的行為。

條(bar)值 link

條值與條(bar)一同使用,設置條(bar)的值,且允許條(bar)調整某個潛在特性。可以通過創建 BarValue 類的子類創建一個新的條值。 所有的BarValue類都有關鍵字 step ,也可以接受關鍵字 force_step ,具體情況詳見 ui.adjustment()

AnimatedValue(value=0.0, range=1.0, delay=1.0, old_value=None) link

將某個值序列化,使用 delay 秒的時間將 old_value 的值轉為 value 的值。

value

value值自身,是一個數值。

range

value值的範圍,是一個數值。

delay

序列化value值的時間,單位為秒。預設值是1.0。

old_value

舊的value值。若為None,我們使用AnimatedValue想要替換的value值。否則,其會初始化為 value 的值。

AudioPositionValue(channel='music', update_interval=0.1) link

顯示在 channel 通道播放音訊檔案播放位置的值。

update_interval

值的更新頻率,單位為秒。

DictValue(dict, key, range, max_is_zero=False, style='bar', offset=0, step=None, action=None, force_step=False) link

允許用戶使用字典型數據的鍵調整對應的值。

dict

字典,或列表。

key

字典的鍵,或者列表的索引(index)。

range

調整的數值範圍。

max_is_zero

若為True,當鍵對應的值為0時,條(bar)值範圍會調整為從1到0,所有其他值都會被降低到1。同樣的,當條(bar)被設置成最大值時,鍵的值將設置為0。

該參數只在內部使用。

style

創建的條(bar)的樣式。

offset

添加到條值的一個偏移量。

step

調整條(bar)值的步進大小。若為空,預設為條(bar)的十分之一。

action

若非None,當欄位改變時,將調用指定行為(action)。

FieldValue(object, field, range, max_is_zero=False, style='bar', offset=0, step=None, action=None, force_step=False) link

允許用戶調整某個對象上欄位(field)的條(bar)值。

object

調整的對象。

field

欄位(filed)名稱的字串。

range

可調整的範圍。

max_is_zero

若為True,當鍵對應的值為0時,條(bar)值範圍會調整為從1到0,所有其他值都會被降低到1。同樣的,當條(bar)被設置成最大值時,欄位(filed)的值將設置為0。

該參數只在內部使用。

style

創建的條(bar)的樣式。

offset

添加到條值的一個偏移量。

step

調整條(bar)值的步進大小。若為空,預設為條(bar)的十分之一。

action

若非None,當欄位改變時,將調用指定行為(action)。

LocalVariableValue(variable, range, max_is_zero=False, style='bar', offset=0, step=None, action=None, force_step=False) link

通過 use 引用的界面內,使用條(bar)值調整某個變數。

如果要調整某個最上層界面的變數,推薦使用 ScreenVariableValue()

更多資訊參見 use

該行為僅能創建在變數所屬的上下文中,且不能賦值到其他地方。

variable

一個字串,表示待調整變數名。

range

可調整的範圍。

max_is_zero

若為True,當鍵對應的值為0時,條(bar)值範圍會調整為從1到0,所有其他值都會被降低到1。同樣的,當條(bar)被設置成最大值時,欄位(filed)的值將設置為0。

該參數只在內部使用。

style

創建的條(bar)的樣式。

offset

添加到條值的一個偏移量。

step

調整條(bar)值的步進大小。若為空,預設為條(bar)的十分之一。

action

若非None,當欄位改變時,將調用指定行為(action)。

MixerValue(mixer) link

音訊混合器的值。

mixer

待調整的混合器名。通常是“music”、“sfx”或“voice”,創作者也可以創建新的混合器。 更多資訊參見 音量

ScreenVariableValue(variable, range, max_is_zero=False, style='bar', offset=0, step=None, action=None, force_step=False) link

用於調整界面變數值的條(bar)值。

該行為針對的變數範圍包括使用 use 引用其他界面的界面自身和引用的子界面。 如果僅僅要修改被 use 引用的子界面中的變數,推薦使用 LocalVariableValue()

variable

一個字串,給出了待調整的變數名。

range

可調整的範圍。

max_is_zero

若為True,當鍵對應的值為0時,條(bar)值範圍會調整為從1到0,所有其他值都會被降低到1。同樣的,當條(bar)被設置成最大值時,variable的值將設置為0。

這偏向於某些內部使用。

style

創建的條(bar)的樣式。

offset

添加到條值的一個偏移量。

step

調整條(bar)值的步進大小。若為空,預設為條(bar)的十分之一。

action

若非None,當欄位改變時,將調用指定行為(action)。

StaticValue(value=0.0, range=1.0) link

這個行為允許某個值被指定為靜態。

value

值自身,一個數值。

range

數值範圍。

VariableValue(variable, range, max_is_zero=False, style='bar', offset=0, step=None, action=None, force_step=False) link

允許用戶調整默認儲存區變數值的條(bar)值。

variable

一個字串,給出了待調整的變數名。

range

可調整的範圍。

max_is_zero

若為True,當鍵對應的值為0時,條(bar)值範圍會調整為從1到0,所有其他值都會被降低到1。同樣的,當條(bar)被設置成最大值時,variable的值將設置為0。

這偏向於某些內部使用。

style

創建的條(bar)的樣式。

offset

添加到條值的一個偏移量。

step

調整條(bar)值的步進大小。若為空,預設為條(bar)的十分之一。

action

若非None,當欄位改變時,將調用指定行為(action)。

XScrollValue(viewport) link

根據給定的id,在當前界面水平滾動視口(viewport)的可調整值。視口(viewport)必須在條(bar)值出現前定義。

YScrollValue(viewport) link

根據給定的id,在當前界面垂直滾動視口(viewport)的可調整值。視口(viewport)必須在條(bar)值出現前定義。

輸入(input)值 link

輸入(input)值與文本輸入一起使用,用於設置默認文本、接受改變文本、響應確認鍵、決定文本是否可編輯。要創建新的輸入(input)值,可以使用 InputValue 類的子類。

Ren’Py定義的輸入(input)值繼承自InputValue類,這意味著所有輸入值均含有Enable()、Disable()和Toggle()方法,分別執行啟用(enable)、禁用(disable)和切換編輯(toggle edit)行為。可以參考 DisableAllInputValues() 行為。

DictInputValue(dict, key, default=True, returnable=False) link

根據輸入值更新 dict[key]

dict

一個字典或列表對象。

default

若為True,輸入預設是可以被編輯的。

returnable

若為True,當用戶按下確認鍵,輸入的值就會被返回。

FieldInputValue(object, field, default=True, returnable=False) link

根據輸入值更新某個對象的欄位(field)。

field

欄位(filed)名稱的字串。

default

若為True,輸入預設是可以被編輯的。

returnable

若為True,當用戶按下確認鍵,輸入的值就會被返回。

FilePageNameInputValue(pattern='Page {}', auto='Automatic saves', quick='Quick saves', page=None, default=False) link

根據輸入值更新文件頁面(page)名。

pattern

用於頁面(page)的默認名。使用Python風格的替換,例如花括號{}裡的內容可以替換為頁面(page)的編號。

auto

自動保存頁面(page)的名稱。

quick

快速保存頁面(page)的名稱。

page

若該參數存在,給出了要顯示的頁面(page)編號。通常該值設定為None,表示當前頁面。

default

若為True,輸入預設是可以被編輯的。

LocalVariableInputValue(variable, default=True, returnable=False) link

根據輸入值更新某個被 use 引用的界面的變數。

如果目標變數在某個頂層界面中,推薦使用 ScreenVariableInputValue()

更多資訊參見 use

該行為僅能創建在變數所屬的上下文中,且不能賦值到其他地方。

variable

待更新變數名,一個字串。

default

若為True,輸入預設是可以被編輯的。

returnable

若為True,當用戶按下確認鍵,輸入的值就會被返回。

ScreenVariableInputValue(variable, default=True, returnable=False) link

根據輸入值更新某個界面的變數。

該行為針對的變數範圍包括使用 use 引用其他界面的界面自身和引用的子界面。 如果僅僅要修改被 use 引用的子界面中的變數,推薦使用 LocalVariableInputValue()

variable

待更新變數名,一個字串。

default

若為True,輸入預設是可以被編輯的。

returnable

若為True,當用戶按下確認鍵,輸入的值就會被返回。

VariableInputValue(variable, default=True, returnable=False) link

根據輸入值更新變數。

variable

待更新變數名,一個字串。

變數名除了可以是類似“strength”的字串之外,也可以是使用帶英文標點“.”的欄位名,比如“hero.strength”或“persistent.show_cutscenes”。

default

若為True,輸入預設是可以被編輯的。

returnable

若為True,當用戶按下確認鍵,輸入的值就會被返回。

函數和類 link

這些函數和類在界面方面很有用。

環境設定(preference) link

所有環境設定都可以基於上面給出的行為Action和值Value來定義。這需要一些Ren’Py方面的知識,才能選擇正確的環境設定並運用。環境設定構造器(constructor)讓這件事變得簡單,通過創建一個行為或值,就能基於名稱應用在預設的環境設定界面上。

Preference(name, value=None, range=None) link

其從某項環境設定構造了合適的行為或者值。環境設定名稱應該是在變准菜單中出現的名稱,值應該是選項名、“toggle”輪詢選項、一個指定的值,或者按鈕的名稱。

可以與按鈕和熱區一起使用的行為如下:

  • Preference(“display”, “fullscreen”) - 全螢幕模式顯示。

  • Preference(“display”, “window”) - 窗口模式顯示,1倍大小。

  • Preference(“display”, 2.0) - 窗口模式顯示,2倍大小。

  • Preference(“display”, “any window”) - 用前一種窗口尺寸顯示。

  • Preference(“display”, “toggle”) - 切換顯示模式。

  • Preference(“transitions”, “all”) - 顯示所有轉場(transition)效果。

  • Preference(“transitions”, “none”) - 不顯示轉場(transition)效果。

  • Preference(“transitions”, “toggle”) - 切換轉場(transition)效果。

  • Preference(“video sprites”, “show”) - 顯示所有影片精靈(sprite)。

  • Preference(“video sprites”, “hide”) - 可能的話,將影片精靈(sprite)降格為圖片顯示。

  • Preference(“video sprites”, “toggle”) - 切換圖像降格行為。

  • Preference(“show empty window”, “show”) - 允許“window show”和“window auto”語句在say語句之外顯示一個空窗口。

  • Preference(“show empty window”, “hide”) - 不允許“window show”和“window auto”語句在say語句之外顯示一個空窗口。

  • Preference(“show empty window”, “toggle”) - 切換上面兩種情況。

  • Preference(“text speed”, 0) - 文本立刻顯示。

  • Preference(“text speed”, 142) - 設置文本顯示速度為每秒142字元。

  • Preference(“joystick”) - 顯示joystick環境設定。

  • Preference(“skip”, “seen”) - 只跳過看過的資訊。

  • Preference(“skip”, “all”) - 跳過所有資訊,無論是否看過。

  • Preference(“skip”, “toggle”) - 切換上面兩種情況。

  • Preference(“begin skipping”) - 開始跳過(skipping)。

  • Preference(“after choices”, “skip”) - 在選項後跳過。

  • Preference(“after choices”, “stop”) - 在選項後停止跳過。

  • Preference(“after choices”, “toggle”) - 切換上面兩種情況。

  • Preference(“auto-forward time”, 0) - 將自動前進的時間設定為無限。

  • Preference(“auto-forward time”, 10) - 設置自動前進時間(單位為每秒250個字元)。

  • Preference(“auto-forward”, “enable”) - 啟用自動前進模式。

  • Preference(“auto-forward”, “disable”) - 禁用自動前進模式。

  • Preference(“auto-forward”, “toggle”) - 切換自動前進模式。

  • Preference(“auto-forward after click”, “enable”) - 在一次點擊後維持自動前進模式。

  • Preference(“auto-forward after click”, “disable”) - 在一次點擊後禁用自動前進模式。

  • Preference(“auto-forward after click”, “toggle”) - 切換上面兩種情況。

  • Preference(“automatic move”, “enable”) - 啟用自動滑鼠模式。

  • Preference(“automatic move”, “disable”) - 禁用自動滑鼠模式。

  • Preference(“automatic move”, “toggle”) - 切換自動滑鼠模式。

  • Preference(“wait for voice”, “enable”) - 自動前進時,等待當前語音播放完畢。

  • Preference(“wait for voice”, “disable”) - 自動前進時,不等待當前語音播放完畢。

  • Preference(“wait for voice”, “toggle”) - 切換語音等待模式。

  • Preference(“voice sustain”, “enable”) - 當前互動行為中維持語音。

  • Preference(“voice sustain”, “disable”) - 當前互動行為中不維持語音。

  • Preference(“voice sustain”, “toggle”) - 切換語音維持模式。

  • Preference(“music mute”, “enable”) - 音樂混合器靜音。

  • Preference(“music mute”, “disable”) - 取消音樂混合器靜音。

  • Preference(“music mute”, “toggle”) - 切換音樂靜音狀態。

  • Preference(“sound mute”, “enable”) - 音效混合器靜音。

  • Preference(“sound mute”, “disable”) - 取消音效混合器靜音。

  • Preference(“sound mute”, “toggle”) - 切換音效靜音狀態。

  • Preference(“voice mute”, “enable”) - 語音混合器靜音。

  • Preference(“voice mute”, “disable”) - 取消語音混合器靜音。

  • Preference(“voice mute”, “toggle”) - 切換語音靜音狀態。

  • Preference(“mixer <mixer> mute”, “enable”) - 將指定的混合器靜音。

  • Preference(“mixer <mixer> mute”, “disable”) - 取消指定的混合器靜音。

  • Preference(“mixer <mixer> mute”, “toggle”) - 切換指定的混合器靜音狀態。

  • Preference(“all mute”, “enable”) - 所有混合器靜音。

  • Preference(“all mute”, “disable”) - 取消所有混合器靜音。

  • Preference(“all mute”, “toggle”) - 切換所有混合器靜音狀態。

  • Preference(“main volume”, 0.5) - 設置對所有音訊通道的調整值。

  • Preference(“music volume”, 0.5) - 設置音樂音量。

  • Preference(“sound volume”, 0.5) - 設置音效音量。

  • Preference(“voice volume”, 0.5) - 設置語音音量。

  • Preference(“mixer <mixer> volume”, 0.5) - 設置指定混合器音量。

  • Preference(“emphasize audio”, “enable”) - 加強在config.emphasize_audio_channels中定義的音訊通道。

  • Preference(“emphasize audio”, “disable”) - 取消加強在config.emphasize_audio_channels中定義的音訊通道。

  • Preference(“emphasize audio”, “toggle”) - 切換音訊加強狀態。

  • Preference(“self voicing”, “enable”) - 啟用自動語音。

  • Preference(“self voicing”, “disable”) - 禁用自動語音。

  • Preference(“self voicing”, “toggle”) - 切換自動語音模式。

  • Preference(“clipboard voicing”, “enable”) - 啟用剪貼板語音。

  • Preference(“clipboard voicing”, “disable”) - 禁用剪貼板語音。

  • Preference(“clipboard voicing”, “toggle”) - 切換剪貼板語音狀態。

  • Preference(“debug voicing”, “enable”) - 啟用自動語音debug。

  • Preference(“debug voicing”, “disable”) - 禁用自動語音debug。

  • Preference(“debug voicing”, “toggle”) - 切換自動語音debug狀態。

  • Preference(“rollback side”, “left”) - 觸摸螢幕左側觸發回滾。

  • Preference(“rollback side”, “right”) - 觸摸螢幕右側觸發回滾。

  • Preference(“rollback side”, “disable”) - 觸摸螢幕不觸發回滾。

  • Preference(“gl powersave”, True) - 使用省電模式降低幀率。

  • Preference(“gl powersave”, False) - 不使用省電模式降低幀率。

  • Preference(“gl powersave”, “auto”) - 使用電池情況下自動啟用省電模式。

  • Preference(“gl framerate”, None) - 運行時顯示幀率。

  • Preference(“gl framerate”, 60) - 在給定的幀率下運行。

  • Preference(“gl tearing”, True) - (設備性能不足時)拖慢而不是跳幀。

  • Preference(“gl tearing”, False) - (設備性能不足時)跳幀而不是拖慢。

  • Preference(“font transform”, “opendyslexic”) - 將字體轉為opendyslexic(譯者註:為閱讀障礙人群設計的字體)的配置項。

  • Preference(“font transform”, “dejavusans”) - 將字體轉為deja vu sans的配置項。

  • Preference(“font transform”, None) - 禁用字體轉換。

  • Preference(“font size”, 1.0) - 字號縮放因子配置項。

  • Preference(“font line spacing”, 1.0) - 字體行距縮放因子配置項。

  • Preference(“system cursor”, “enable”) - 使用系統貫標,忽略 config.mouse。

  • Preference(“system cursor”, “disable”) - 使用config.mouse的游標。

  • Preference(“system cursor”, “toggle”) - 切換系統游標。

  • Preference(“high contrast text”, “enable”) - 啟用黑背景白文字。

  • Preference(“high contrast text”, “disable”) - 禁用高對比文本。

  • Preference(“high contrast text”, “toggle”) - 切換高對比文本。

  • Preference(“audio when minimized”, “enable”) - 窗口最小化後保持聲音播放。

  • Preference(“audio when minimized”, “disable”) - 窗口最小化後停止聲音播放。

  • Preference(“audio when minimized”, “toggle”) - 切換窗口最小化後的聲音播放設置。

  • Preference(“audio when unfocused”, “enable”) - 窗口失去焦點後保持聲音播放。

  • Preference(“audio when unfocused”, “disable”) - 窗口失去焦點後停止聲音播放。

  • Preference(“audio when unfocused”, “toggle”) - 切換窗口失去焦點後的聲音播放設置。

  • Preference(“web cache preload”, “enable”) - 啟用web快取預載入。

  • Preference(“web cache preload”, “disable”) - 禁用web快取預載入,並刪除預載入的數據。

  • Preference(“web cache preload”, “toggle”) - 切換web快取預載入設置。

  • Preference(“voice after game menu”, “enable”) - 進入遊戲設置菜單界面時繼續播放聲音。

  • Preference(“voice after game menu”, “disable”) - 進入遊戲設置菜單界面時停止播放聲音。

  • Preference(“voice after game menu”, “toggle”) - 切換進入遊戲設置菜單界面時的播放聲音設定。

可以與條(bar)一起使用的值如下:

  • Preference(“text speed”)

  • Preference(“auto-forward time”)

  • Preference(“main volume”)

  • Preference(“music volume”)

  • Preference(“sound volume”)

  • Preference(“voice volume”)

  • Preference(“mixer <mixer> volume”)

  • Preference(“self voicing volume drop”)

  • Preference(“font size”)

  • Preference(“font line spacing”)

range 參數可以指定某個條(bar)的數值範圍。例如,“text speed”的預設值是200cps。“auto-forward time”的預設值是每段文本30秒。(這些是最大值,而不是預設值。)

可以被按鈕使用的行為包括: * Preference(“renderer menu”) - 顯示渲染器(renderer)菜單。 * Preference(“accessibility menu”) - 顯示數據(accessibility)讀寫菜單 * Preference(“reset”) - 將環境設定(preference)重設為預設值

上面的界面是內部定義的,無法訂製化。

GetCharacterVolume(voice_tag) link

該函數根據關聯的語音標籤(tag),返回一個介於0.0到1.0之間的數值,表示對應 voice 聲道最大音量的一個比例。

遊戲手把 link

這些函數和行為跟遊戲手把一起工作。

GamepadCalibrate() link

調用手把校正的行為。

GamepadExists(developer=True) link

檢測手把是否存在的函數。存在返回True,不存在返回False。

developer

強制該函數返回True,config.developer 必須配置為True。

文件函數 link

這些函數返回關於文件的有用資訊。它們使用相同的默認頁面(page)相關的文件行為。

FileCurrentPage() link

將當前文件頁面(page)以字串返回。

FileCurrentScreenshot(empty=None, **properties) link

一個螢幕幕截圖的可顯示控制項。其將保存你在當前文件中,前提是進入了菜單或使用 FileTakeScreenshot() 採集了螢幕截圖。

如果沒有當前螢幕截圖,對應的位置上顯示 empty 的圖像。(如果 empty 是空值None,預設為 Null() 。)

FileJson(name, key=None, empty=None, missing=None, page=None, slot=False) link

根據 name 參數讀取對應的Json數據。

如果存檔槽位是空的,則返回 empty

如果存檔槽位不是空的,並且 key 為None,返回包含Json數據的整個目錄

如果 key 不為None,則返回json[key],前提是 key 在存檔json對象中有定義。如果存檔存在但不包含 key ,就返回 missing 。如果存檔槽位為空,則返回 empty

使用 config.save_json_callbacks() 註冊的回調函數可用於向存檔槽位中添加Json。

默認情況下,Json中包含下列key:

_save_name

存檔時 save_name 的值。

_renpy_version

創建存檔的Ren’Py版本號。

_version

創建存檔時的 config.version 值。

_game_runtime

調用 renpy.get_game_runtime() 後得到的返回結果。

_ctime

存檔創建時間。UTC時間,即從1970年1月1日0點開始計算的秒數。

FileLoadable(name, page=None, slot=False) link

該函數在存檔文件可載入的情況下返回True,否則返回False。

FileNewest(name, page=None, slot=False) link

如果存檔文件是最後一次存檔返回True,否則返回False。

FilePageName(auto='a', quick='q') link

以字串形式返回當前存檔文件頁面(page)名稱。如果是一個普通頁面(page),該函數返回頁面編號。否則,返回 autoquick

FileSaveName(name, empty='', page=None, slot=False) link

返回存檔文件保存時的save_name,如果文件不存在則返回 empty

FileScreenshot(name, empty=None, page=None, slot=False) link

返回指定文件相關的螢幕截圖。如果文件不能載入,返回 empty ,前提 empty 的值不是None。在文件不能載入且 empty 為空的情況下,可視組件Null會被創建。

返回值是一個可視組件。

FileSlotName(slot, slots_per_page, auto='a', quick='q', format='%s%d') link

返回指定編號的存檔槽位名。前提是普通頁面(page)下的槽位都按順序從1開始編號,並且頁面也從1開始編號。當槽位編號為2,每個頁面槽位數(slots_per_page)為10,其他變數都是預設值的情況下:

  • 顯示第一頁面時,返回“2”。

  • 顯示第二頁面時,返回“12”。

  • 顯示自動頁面時,返回“a2”。

  • 顯示快速存檔頁面時,返回“q2”。

slot

指定的槽位編號。

slots_per_page

每頁槽位數量。

auto

自動存檔頁面的前綴。

quick

快速存檔頁面的前綴。

format

格式程式碼。包含兩部分:一個頁面前綴字串,一個槽位編號整數。

FileTime(name, format='%b %d, %H:%M', empty='', page=None) link

按指定格式,返回存檔時間。如果沒有匹配的存檔文件就返回 empty

返回值是一個字串。

FileUsedSlots(page=None, highest_first=True) link

返回頁面上所有可用的經過編號的文件列表。

page

待掃描的頁面名。若為None,就使用當前頁面。

highest_first

若為True,列表內文件按編號從大到小排序。否則,列表內文件按編號從小到大排序。

頭像函數 link

該函數返回使用的頭像。

SideImage() link

返回與當前發言角色相關的頭像。如果頭像不存在則返回一個空的可視組件。

其他函數 link

CurrentScreenName() link

返回當前界面名稱。如果沒有當前顯示界面則返回None。 如果某個界面使用 use 引用了其他界面,則返回此界面,而不是被引用的界面。

Tooltips link

所有可視組件上可用的 tooltip 特性和GetTooltip函數都可以讀寫tooltip。當可視組件獲得焦點時,GetTooltip函數會返回這個組件的tooltip特性的值。

提醒一下,傳入 tooltip 特性的值需要支持是否相等的判斷。

這裡是一個樣例:

screen tooltip_example():
    vbox:
        textbutton "北":
            action Return("n")
            tooltip "去約見北極熊。"

        textbutton "南":
            action Return("s")
            tooltip "前往熱帶。"

        textbutton "東":
            action Return("e")
            tooltip "我們可以擁抱黎明。"

        textbutton "西":
            action Return("w")
            tooltip "去欣賞最美的日落。"

        $ tooltip = GetTooltip()

        if tooltip:
            text "[tooltip]"

可視組件 nearrect 可用於顯示“跳出視窗型”tooltip,並且可以獲取一個特殊的“tooltip”焦點名, 會將最後獲取焦點的位置設定為tooltip對象:

screen tooltip_example2():
    frame:

        padding (20, 20)
        align (.5, .3)

        has vbox

        textbutton "北":
            action Return("n")
            tooltip "去約見北極熊。"

        textbutton "南":
            action Return("s")
            tooltip "前往熱帶。"

        textbutton "東":
            action Return("e")
            tooltip "我們可以擁抱黎明。"

        textbutton "西":
            action Return("w")
            tooltip "去欣賞最美的日落。"

    # 這是界面上最後顯示的內容。

    $ tooltip = GetTooltip()

    if tooltip:

        nearrect:
            focus "tooltip"
            prefer_top True

            frame:
                xalign 0.5
                text tooltip
GetTooltip(screen=None, last=False) link

返回當前獲得焦點的可視組件的tooltip,如果可視組件未獲得焦點則返回None。

screen

如果非空,這個參數應該是某個界面的名稱或者標籤(tag)。如果獲得焦點的可視組件是界面的一部分,則該函數隻返回tooltip。

last

若為True,返回此函數上次調用的非None返回結果。

傳統方法 link

Warning

這種傳統方法已被廢棄,並使用上面說的方法替代。不過你可能會在一些老版本的項目中見到它。

當按鈕處於指針懸停狀態時,tooltip類會改變界面。

class Tooltip(default) link

當滑鼠指針懸停在某個區域上時,一個tooltip對象可以用於提示對應界面的功能。

tooltip對象有一個 value 欄位,當tooltip對象被創建時會通過構造器傳入 default 作為預設值。當透過tooltip創建的某個按鈕行為被使用時,value欄位就會根據關聯的行為改變對應值。

Action(value) link

將按鈕的hovered特性對應的行為返回。當按鈕處於指針懸停狀態時,tooltip的value欄位會被設置為 value 。當按鈕失去焦點時,tooltip的value欄位會恢復為預設值。

在某個界面使用tooltip時,常用做法是在default語句中創建tooltip對象。tooltip的值和行為的方法可以在界面中使用。使用時可以按任何順序——在行為執行前就可以使用tooltip的值。

tooltip可以使用任何類型的值。在下面的樣例中,我們使用text語句在界面中顯示字串,使用add語句添加可視組件也是可行的。還可以設計更多複雜的行為。

screen tooltip_test:

    default tt = Tooltip("沒有選擇任何按鈕。")

    frame:
        xfill True

        has vbox

        textbutton "One.":
            action Return(1)
            hovered tt.Action("The loneliest number.")

        textbutton "Two.":
            action Return(2)
            hovered tt.Action("Is what it takes.")

        textbutton "Three.":
            action Return(3)
            hovered tt.Action("A crowd.")

        text tt.value