- Kivy 教程
- Kivy - 首頁
- Kivy 基礎
- Kivy - 入門
- Kivy - 安裝
- Kivy - 架構
- Kivy - 檔案語法
- Kivy - 應用
- Kivy - Hello World
- Kivy - 應用生命週期
- Kivy - 事件
- Kivy - 屬性
- Kivy - 輸入
- Kivy - 行為
- Kivy 按鈕
- Kivy - 按鈕
- Kivy - 按鈕事件
- Kivy - 按鈕顏色
- Kivy - 按鈕大小
- Kivy - 按鈕位置
- Kivy - 圓形按鈕
- Kivy - 停用按鈕
- Kivy - 圖片按鈕
- Kivy 元件
- Kivy - 元件
- Kivy - 標籤
- Kivy - 文字輸入
- Kivy - 畫布
- Kivy - 線
- Kivy - 複選框
- Kivy - 下拉列表
- Kivy - Windows視窗
- Kivy - 滾動檢視
- Kivy - 輪播圖
- Kivy - 滑塊
- Kivy - 圖片
- Kivy - 彈出視窗
- Kivy - 開關
- Kivy - 微調器
- Kivy - 分隔器
- Kivy - 進度條
- Kivy - 氣泡
- Kivy - 標籤頁面板
- Kivy - 散點圖
- Kivy - 手風琴
- Kivy - 檔案選擇器
- Kivy - 顏色選擇器
- Kivy - 程式碼輸入
- Kivy - 模態檢視
- Kivy - 切換按鈕
- Kivy - 相機
- Kivy - 樹檢視
- Kivy - reStructuredText
- Kivy - 操作欄
- Kivy - 播放器
- Kivy - 模板檢視
- Kivy - 虛擬鍵盤
- Kivy - 觸控漣漪
- Kivy - 音訊
- Kivy - 影片
- Kivy - 拼寫檢查
- Kivy - 效果
- Kivy - 輸入記錄器
- Kivy - OpenGL
- Kivy - 文字
- Kivy - 文字標記
- Kivy - 設定
- Kivy 佈局
- Kivy - 佈局
- Kivy - 浮動佈局
- Kivy - 網格佈局
- Kivy - 箱式佈局
- Kivy - 堆疊佈局
- Kivy - 錨點佈局
- Kivy - 相對佈局
- Kivy - 分頁佈局
- Kivy - 回收佈局
- Kivy - 佈局巢狀
- Kivy 高階概念
- Kivy - 配置物件
- Kivy - 圖集
- Kivy - 資料載入器
- Kivy - 快取管理器
- Kivy - 控制檯
- Kivy - 動畫
- Kivy - 多筆畫
- Kivy - 時鐘
- Kivy - SVG
- Kivy - UrlRequest
- Kivy - 剪貼簿
- Kivy - 工廠
- Kivy - 手勢
- Kivy - 語言
- Kivy - 圖形
- Kivy - 繪圖
- Kivy - 打包
- Kivy - Garden
- Kivy - 儲存
- Kivy - 向量
- Kivy - 工具函式
- Kivy - 檢查器
- Kivy - 工具
- Kivy - 日誌記錄器
- Kivy - 幀緩衝區
- Kivy 應用和專案
- Kivy - 繪圖應用
- Kivy - 計算器應用
- Kivy - 計時器應用
- Kivy - 相機處理
- Kivy - 圖片檢視器
- Kivy - 貝塞爾曲線
- Kivy - 畫布壓力測試
- Kivy - 圓形繪製
- Kivy - 元件動畫
- Kivy - 其他
- Kivy 有用資源
- Kivy - 快速指南
- Kivy - 有用資源
- Kivy - 討論
Kivy - Windows視窗
Window 類是 Kivy 框架的核心類之一。應用程式視窗的構建包括在一個特定的佈局中放置一個或多個元件。build() 方法通常返回單個根元件,它可能是多個其他元件的組合,以樹狀結構排列。或者,可以將元件樹的根直接新增到應用程式視窗。
Window 類定義在 "kivy.core.window" 模組中。它繼承自 WindowBase 類,WindowBase 類是任何視窗實現的抽象視窗元件。預設的應用程式視窗是在 App 物件啟動其事件迴圈時建立的。請注意,Kivy 每個應用程式只支援一個視窗。
許多 Window 屬性是從 Kivy 配置檔案(KIVY_HOME 目錄中的 "config.ini" 檔案)中讀取的。
元件的尺寸取決於預設視窗的大小。App 類的 build() 方法中的以下程式碼將元件樹放入應用程式視窗。請注意,build() 方法不返回根元件。而是將其新增到 Window 物件的 add_widget() 方法中。
box=BoxLayout(orientation='vertical') l=Label(text='Window Properties', font_size=32) box.add_widget(l) b1=ToggleButton(text='Fullscreen') b2=ToggleButton(text='Border') b3=ToggleButton(text='Position') bh=BoxLayout(orientation='horizontal', size_hint=(1, .2)) bh.add_widget(b1) bh.add_widget(b2) bh.add_widget(b3) box.add_widget(bh) Window.add_widget(box)
事件
Window 物件可以識別不同型別的事件:
當分發新的 MotionEvent 時,會觸發 on_motion 事件。
Window 吸收觸控事件,例如 on_touch_down、on_touch_move、on_touch_up 等。
當關閉 Window 時,會觸發 on_close 事件。
當用戶想要透過按下標題欄上的關閉按鈕來結束事件迴圈時,會發生 on_request_close 事件。
當游標進入視窗時,會觸發 on_cursor_enter 事件。
類似地,當游標離開視窗時,會發生 on_cursor_leave 事件。
當視窗分別最小化和最大化時,會觸發 on_minimize 和 on_maximize 事件。
當視窗恢復時,會觸發 on_restore 事件。
與觸控事件類似,當按下或釋放按鍵時,on_key_down 和 on_key_up 事件分別發出按鍵、掃描碼、程式碼點、修飾符。
對於本章中的演示示例,讓我們將一些 Window 事件與回撥方法繫結。
Window.bind(on_request_close = self.on_close) Window.bind(on_cursor_leave=self.on_leave) Window.bind(on_cursor_enter=self.on_enter)
每當滑鼠指標離開視窗區域時,都會呼叫 on_leave() 方法。
def on_leave(self, *args):
print ("leaving the window")
類似地,當滑鼠進入視窗區域時,會呼叫 on_enter 回撥。
def on_enter(self, *args):
print ("Entering the window")
當用戶選擇關閉事件迴圈時,會引發 on_request_close 事件。如果使用者按下 X 按鈕,則以下回調會詢問使用者是否要退出。您還可以使彈出窗口出現。
def on_close(self, instance):
resp=input("Do you want the window to close?")
if resp=='y': Window.close()
屬性
應用程式視窗的外觀由 Window 類中定義的許多屬性決定。它們的預設值由 config.ini 檔案提供。但是,可以在應用程式程式碼中修改它們。一些 Window 屬性如下:
borderless - 設定為 True 時,此屬性將移除視窗邊框/裝飾。
children - 返回此視窗子元件的列表。
clearcolor - 用於清除視窗的顏色。clear() 方法使用此屬性及其顏色值。
from kivy.core.window import Window Window.clearcolor = (1, 0, 0, 1) Window.clear()
custom_titlebar - 設定為 True 時,允許使用者將元件設定為標題欄。
fullscreen - 此屬性設定視窗的全屏模式。可用選項:True、False、'auto' 和 'fake'。
left , top - 視窗的左和上位置。這是一個 SDL2 屬性,左上角為 [0, 0]。
size - 獲取/設定視窗的大小。
from kivy.core.window import Window Window.size = (720,400)
您還可以透過修改配置值來設定大小:
from kivy.config import Config
Config.set('graphics', 'width', '720')
Config.set('graphics', 'height', '400')
Config.set('graphics', 'resizable', '1')
讓我們處理一些 Window 屬性。在這個程式的應用程式視窗上,我們有三個切換按鈕。我們將它們繫結到某些回撥。
b1.bind(on_press=self.pressed) b2.bind(on_press=self.bordered) b3.bind(on_press=self.positioned)
pressed() 方法在全屏和普通模式之間切換全屏狀態。
def pressed(self, instance):
if instance.state=='down':
Window.set_title("Kivy Full screen window")
Window.maximize()
elif instance.state=='normal':
Window.set_title('Kivy Restored Window')
Window.restore()
bordered() 方法在按下 b2 按鈕時使視窗無邊框,並在釋放時恢復為原始邊框視窗。
def bordered(self, instance):
print (Window.top, Window.left)
if instance.state=='down':
Window.borderless=True
elif instance.state=='normal':
Window.borderless=False
positioned() 回撥將視窗移動到 (0,0) 位置,並在按下/釋放 b3 時返回其先前位置。
def positioned(self, instance):
print (Window.top, Window.left)
if instance.state=='down':
self.x, self.y=Window.left, Window.top
Window.left, Window.top=(0,0)
elif instance.state=='normal':
Window.left, Window.top=self.x,self.y
應用程式視窗最初顯示如下。生成事件(滑鼠離開、進入 on_request_close)並查看回調的執行情況。同樣檢查切換按鈕的動作。