【kivy screenmanager】CardTransition 使用效果及語法|Kivy基礎用法

更新 發佈閱讀 20 分鐘


本篇開始:

  • 我的開發環境是win11
  • Python是3.10.7版本
  • 編碼的工具是Visual Studio Code(VS Code)



【本篇說明】在Kivy這個第三方函式庫(框架)裡面,其中screenmanager模組內建許多類別可以控制轉場效果(transition),今天分享其中的 CardTransition ,它的視覺效果:當切換螢幕時,新畫面會像"卡片"「堆疊或抽出」的方式出現(有2種模式),有點類似 Android切換方式。

1.先在main.py主程式寫下程式碼

在VScode開啟Python檔案,取名為main.py,以下簡稱.py

from kivy.app import App
from kivy.core.window import Window
from kivy.uix.screenmanager import Screen, ScreenManager, CardTransition
from kivy.properties import ObjectProperty

Window.size = (290,550)

class FirstPage(Screen):
pass

class SecondPage(Screen):
pass

class Manager(ScreenManager):
tra = ObjectProperty(CardTransition())

class main(App):
def build(self):
return Manager()

if __name__ == "__main__":
main().run()

▲說明:

1.從kivy.app模組,導入App類別

2.從kivy.core.window模組,導入Window類別 (為了調整視窗大小)

3.從kivy.uix.screenmanager模組,導入Screen、ScreenManager、CardTransition類別

4.設定畫面大小為 (290,550),可參考:【kivy window】視窗大小原來可以自己決定!

5.定義FirstPage、SecondPage類,使其繼承Screen類別的屬性及方法(函式)

6.定義Manager類,使其繼承ScreenManager類別的屬性及方法(函式)

7.在Manager類別裡面,創建變數tra,使其為ObjectProperty類,並繼承CardTransition類,代表現在screen切換模式為CardTransition

8.定義main類,使其繼承App類,創建函式build(),並回傳Manager類別內容


raw-image

▲main.py程式碼


2.在VSCode新增(Kivy)檔案,取名 main.kv

kivy language,我使用的是"相同命名方式",如果不太懂我說的,可參考:【kivy language】如何使用 kivy language(kv)。

raw-image

▲我的是放在以下路徑:桌面-> python-> Kivy-> test


3.加入main.kv內容

在VScode編輯Kivy檔案,取名為main.kv,以下簡稱.kv

<FirstPage>
name: 'firstpage'

BoxLayout:
Button:
text: 'go to secondpage'
on_release: root.manager.current = 'secondpage'

<SecondPage>
name: 'secondpage'

BoxLayout:
Button:
text: 'back to firstpage'
on_release: root.manager.current = 'firstpage'

<Manager>
transition: root.tra
FirstPage:
SecondPage:

▲說明:

1.在<firstpage>裡面加入 name參數,並使其等於 'firstpage'

2.加入Button物件,使用觸發函式on_release,並呼叫 manager.current函式,用來決定目前screen呈現為secondpage,可參考:【kivy Button】經常使用的Button(按鈕)語法

3.在<SecondPage>裡面加入 name參數,並使其等於 'secondpage'

4.加入Button物件,使用觸發函式on_release,並呼叫 manager.current函式,用來決定目前screen呈現為firstpage

5.在<Manager>裡面加入transition、FirstPage 以及SecondPage6.並使transition參數等於根物件(也就是Manager類別)tra變數


raw-image

▲main.kv程式碼


4.執行 Python檔案

請點擊網址觀看影片1:

https://drive.google.com/drive/folders/1F_KJX0fnG9umv9N3w_REizFOqSu4J492?usp=sharing

▲如影片1:新畫面以(預設)push堆疊進入、(預設)轉換方向向左、(預設)轉換時間不到1秒


5.改變轉換時間及方向設定(向右)

以下.py程式碼:

from kivy.app import App
from kivy.core.window import Window
from kivy.uix.screenmanager import Screen, ScreenManager, CardTransition
from kivy.properties import ObjectProperty

Window.size = (290,550)

class FirstPage(Screen):
pass

class SecondPage(Screen):
pass

class Manager(ScreenManager):
# 這邊更改,加入duration 及 direction參數
tra = ObjectProperty(CardTransition(duration=3, direction='right'))

class main(App):
def build(self):
return Manager()

if __name__ == "__main__":
main().run()


raw-image

▲main.py程式碼

【說明】加入duration 及 direction參數,轉換時間為3(s),方向向右

請點擊網址觀看影片2:

https://drive.google.com/drive/folders/1F_KJX0fnG9umv9N3w_REizFOqSu4J492?usp=sharing

▲如影片2:向右堆疊,轉換時間3秒


6.改變方向設定(向上)

以下.py程式碼:

from kivy.app import App
from kivy.core.window import Window
from kivy.uix.screenmanager import Screen, ScreenManager, CardTransition
from kivy.properties import ObjectProperty

Window.size = (290,550)

class FirstPage(Screen):
pass

class SecondPage(Screen):
pass

class Manager(ScreenManager):
# 這邊更改,加入duration 及 direction參數
tra = ObjectProperty(CardTransition(duration=3, direction='up'))

class main(App):
def build(self):
return Manager()

if __name__ == "__main__":
main().run()

▲說明:更改 direction參數,方向向上

raw-image

▲更改的main.py程式碼

請點擊網址觀看影片3:

https://drive.google.com/drive/folders/1F_KJX0fnG9umv9N3w_REizFOqSu4J492?usp=sharing

▲如影片3:向"上"堆疊,轉換時間3秒


7.改變方向設定(向下)

以下.py程式碼:

from kivy.app import App
from kivy.core.window import Window
from kivy.uix.screenmanager import Screen, ScreenManager, CardTransition
from kivy.properties import ObjectProperty

Window.size = (290,550)

class FirstPage(Screen):
pass

class SecondPage(Screen):
pass

class Manager(ScreenManager):
# 這邊更改,加入duration 及 direction參數
tra = ObjectProperty(CardTransition(duration=3, direction='down'))

class main(App):
def build(self):
return Manager()

if __name__ == "__main__":
main().run()

▲說明:更改 direction參數,方向向下

raw-image

▲更改的main.py程式碼

請點擊網址觀看影片4:

https://drive.google.com/drive/folders/1F_KJX0fnG9umv9N3w_REizFOqSu4J492?usp=sharing

▲如影片4:向"下"堆疊,轉換時間3秒


8.改變模式(pop抽出)及方向設定(向左)

以下.py程式碼:

from kivy.app import App
from kivy.core.window import Window
from kivy.uix.screenmanager import Screen, ScreenManager, CardTransition
from kivy.properties import ObjectProperty

Window.size = (290,550)

class FirstPage(Screen):
pass

class SecondPage(Screen):
pass

class Manager(ScreenManager):
# 這邊更改,加入duration 及 direction、 mode參數
tra = ObjectProperty(CardTransition(duration=3, direction='left', mode='pop'))

class main(App):
def build(self):
return Manager()

if __name__ == "__main__":
main().run()

▲說明:加入 mode參數,方向向左

raw-image

▲更改的main.py程式碼

請點擊網址觀看影片5:

https://drive.google.com/drive/folders/1F_KJX0fnG9umv9N3w_REizFOqSu4J492?usp=sharing

▲如影片5:向"左"抽出,轉換時間3秒


9.改變方向設定(向右)

以下.py程式碼:

from kivy.app import App
from kivy.core.window import Window
from kivy.uix.screenmanager import Screen, ScreenManager, CardTransition
from kivy.properties import ObjectProperty

Window.size = (290,550)

class FirstPage(Screen):
pass

class SecondPage(Screen):
pass

class Manager(ScreenManager):
# 這邊更改,加入duration 及 direction、 mode參數
tra = ObjectProperty(CardTransition(duration=3, direction='right', mode='pop'))

class main(App):
def build(self):
return Manager()

if __name__ == "__main__":
main().run()

▲說明:加入 mode參數,方向向右

raw-image

▲更改的main.py程式碼

請點擊網址觀看影片6:

https://drive.google.com/drive/folders/1F_KJX0fnG9umv9N3w_REizFOqSu4J492?usp=sharing

▲如影片6:向"右"抽出,轉換時間3秒


10.改變方向設定(向上)

以下.py程式碼:

from kivy.app import App
from kivy.core.window import Window
from kivy.uix.screenmanager import Screen, ScreenManager, CardTransition
from kivy.properties import ObjectProperty

Window.size = (290,550)

class FirstPage(Screen):
pass

class SecondPage(Screen):
pass

class Manager(ScreenManager):
# 這邊更改,加入duration 及 direction、 mode參數
tra = ObjectProperty(CardTransition(duration=3, direction='up', mode='pop'))

class main(App):
def build(self):
return Manager()

if __name__ == "__main__":
main().run()

▲說明:加入 mode參數,方向向上

raw-image

▲說明:更改的main.py程式碼

請點擊網址觀看影片7:

https://drive.google.com/drive/folders/1F_KJX0fnG9umv9N3w_REizFOqSu4J492?usp=sharing

▲如影片7:向"上"抽出,轉換時間3秒


11.改變方向設定(向下)

以下.py程式碼:

from kivy.app import App
from kivy.core.window import Window
from kivy.uix.screenmanager import Screen, ScreenManager, CardTransition
from kivy.properties import ObjectProperty

Window.size = (290,550)

class FirstPage(Screen):
pass

class SecondPage(Screen):
pass

class Manager(ScreenManager):
# 這邊更改,加入duration 及 direction、 mode參數
tra = ObjectProperty(CardTransition(duration=3, direction='down', mode='pop'))

class main(App):
def build(self):
return Manager()

if __name__ == "__main__":
main().run()

▲說明:加入 mode參數,方向向下

raw-image

▲說明:更改的main.py程式碼

請點擊網址觀看影片8:

https://drive.google.com/drive/folders/1F_KJX0fnG9umv9N3w_REizFOqSu4J492?usp=sharing

▲如影片8:向"下"抽出,轉換時間3秒


本篇小結

了解CardTransition的基本語法,以卡片"堆疊"或"抽出"的方式轉換screen(畫面),透過參數(duration 及 direction、 mode)可改變切換時間、方向及模式,來實現類似 Android切換方式。


本篇結束:

在自學路上遇到困難是很正常的事,只要堅持到底,相信就會有所成果,期勉大家一同努力。


留言
avatar-img
艾肯比工程師
4會員
77內容數
主要分享應用程式開發過程、遭遇困難及解決技巧,提供給自學或獨立開發者做為參考,希望能對您們有所幫助。
艾肯比工程師的其他內容
2026/01/28
本文介紹 Kivy ScreenManager 的 FadeTransition 轉場效果,透過實際程式碼與影片演示 FadeTransition 的基本用法、原地淡入淡出視覺效果,以及如何調整 `duration` 參數來改變畫面切換的時間。
Thumbnail
2026/01/28
本文介紹 Kivy ScreenManager 的 FadeTransition 轉場效果,透過實際程式碼與影片演示 FadeTransition 的基本用法、原地淡入淡出視覺效果,以及如何調整 `duration` 參數來改變畫面切換的時間。
Thumbnail
2026/01/21
本篇文章將介紹 Kivy 的 ScreenManager 模組中的 RiseInTransition轉場效果,說明如何實現新畫面會從螢幕中央擴散,以「放大、淡入」的方式出現,並由透明轉成不透明顯現出新畫面的視覺效果,並可透過 duration 參數調整轉場時間。
Thumbnail
2026/01/21
本篇文章將介紹 Kivy 的 ScreenManager 模組中的 RiseInTransition轉場效果,說明如何實現新畫面會從螢幕中央擴散,以「放大、淡入」的方式出現,並由透明轉成不透明顯現出新畫面的視覺效果,並可透過 duration 參數調整轉場時間。
Thumbnail
2026/01/14
本文分享如何使用 Kivy 的 ScreenManager 模組中的 WipeTransition 來實現畫面轉場效果,透過「擦拭」的方式切換螢幕,並介紹如何設定轉場時間 (duration)。
Thumbnail
2026/01/14
本文分享如何使用 Kivy 的 ScreenManager 模組中的 WipeTransition 來實現畫面轉場效果,透過「擦拭」的方式切換螢幕,並介紹如何設定轉場時間 (duration)。
Thumbnail
看更多
你可能也想看
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
Python資料視覺化在數據分析中扮演關鍵角色,透過視覺化捕捉數據模式、趨勢和異常,透過Matplotlib等工具創建專業圖表變相對簡單和高效。
Thumbnail
本文利用pyqt5,使用pyttsx3將QLineEdit(單行輸入框)的字串,轉成語音呈現出來。
Thumbnail
本文利用pyqt5,使用pyttsx3將QLineEdit(單行輸入框)的字串,轉成語音呈現出來。
Thumbnail
介紹如何用assign函數在Python中建立新欄位
Thumbnail
介紹如何用assign函數在Python中建立新欄位
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
Python語法包括條件語句、迴圈、函數和變數的使用。條件語句如if、elif和else用於進行條件判斷,for和while是兩種主要的迴圈,def用於定義函數。變數可以被賦予數字或字符串,並可使用類型提示來指定變數的類型。註解可以是單行或多行,並可用於解釋函數或類的用途和作用。
Thumbnail
本篇文章介紹在Renpy引擎中,翻轉圖片的三種方式:事先定義翻轉、事先定義圖片、需要時加入翻轉。透過不同方式,讓您可以更靈活地在劇情中使用翻轉效果。
Thumbnail
本篇文章介紹在Renpy引擎中,翻轉圖片的三種方式:事先定義翻轉、事先定義圖片、需要時加入翻轉。透過不同方式,讓您可以更靈活地在劇情中使用翻轉效果。
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News