
- 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 - 視窗
- 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 - 圖片按鈕
Kivy 庫沒有現成的圖片按鈕小部件。它有一個普通的 Button 和一個 ToggleButton 小部件。當然,您可以使用影像檔案作為它們在正常狀態或停用狀態下的背景:
background_disabled_down - 按鈕的背景圖片是一個StringProperty,一個包含圖片檔案路徑的字串,用於按鈕被停用並按下時的預設圖形表示。
background_disabled_normal - 按鈕的背景圖片也是一個圖片路徑,用於按鈕被停用且未按下時的預設圖形表示。
background_down - 按鈕按下時使用的背景圖片,作為預設圖形表示。
background_normal - 按鈕未按下時使用的背景圖片,作為預設圖形表示。
例如,您可以使用:
B1 = Button(background_normal='images/play.png')
但是,要使圖片小部件像可點選按鈕一樣工作,您需要基於 ButtonBehavior mixin 和 Image 類定義一個自定義類,並重寫 on_press() 方法。
ButtonBehavior
在 Kivy 中,“kivy.uix.behaviors” 模組定義了行為 mixin,它們也被稱為“可重用類”,為小部件提供額外的功能。
要使用圖片作為按鈕,我們定義一個擴充套件 ButtonBehavior 的自定義類,使其能夠響應 on_press 或 on_touch 等事件,以便圖片本身可以像按鈕一樣工作。
我們使用 Kivy 的 Image 物件在 Kivy 視窗上顯示圖片。但是,要向其新增類似按鈕的行為,我們首先定義一個名為“imgbtn”的自定義類,它擴充套件了 Image 和 ButtonBehavior 類。
Image 類的 source 屬性被賦值一個字串,該字串是圖片檔案的路徑。然後我們重寫 on_press() 方法。
class imgbtn(ButtonBehavior, Image): def __init__(self, **kwargs): super(imgbtn, self).__init__(**kwargs) def on_press(self): print("Button pressed", self.source) ImgBtnApp.l1.text=self.source
示例
讓我們實現這個概念,在應用佈局中放置四個圖片,並將它們繫結到一個回撥函式。提供類似按鈕功能的類首先定義如下:
class imgbtn(ButtonBehavior, Image): def __init__(self, **kwargs): super(imgbtn, self).__init__(**kwargs) def on_press(self): ImgBtnApp.l1.text=self.source
我們現在將在應用程式佈局上使用此類的物件來顯示圖片,它們將觸發 on_press 事件。被點選圖片的 source 屬性將顯示在標籤上作為其文字。
from kivy.app import App from kivy.graphics import * from kivy.uix.floatlayout import FloatLayout from kivy.uix.gridlayout import GridLayout from kivy.uix.button import Button from kivy.uix.label import Label from kivy.uix.image import Image from kivy.uix.behaviors import ButtonBehavior from kivy.core.window import Window Window.size = (720, 400) class imgbtn(ButtonBehavior, Image): def __init__(self, **kwargs): super(imgbtn, self).__init__(**kwargs) def on_press(self): print("Button pressed", self.source) ImgBtnApp.l1.text = self.source class ImgBtnApp(App): def build(self): main = GridLayout(cols=1) ImgBtnApp.l1 = Label(text='Hello', font_size=32) main.add_widget(ImgBtnApp.l1) root = FloatLayout(size=(Window.width, 100)) with root.canvas: Color(.2, .7, .1, 1) Rectangle(pos=root.pos, size=root.size) self.btn1 = imgbtn( source='previous.png', size_hint=(None, None), pos_hint={'center_x': .2, 'center_y': .25} ) self.btn2 = imgbtn( source='play.png', size_hint=(None, None), pos_hint={'center_x': .4, 'center_y': .25} ) self.btn3 = imgbtn( source='pause.png', size_hint=(None, None), pos_hint={'center_x': .6, 'center_y': .25} ) self.btn4 = imgbtn( source='stop.png', size_hint=(None, None), pos_hint={'center_x': .8, 'center_y': .25} ) root.add_widget(self.btn1) root.add_widget(self.btn2) root.add_widget(self.btn3) root.add_widget(self.btn4) main.add_widget(root) return main ImgBtnApp().run()
輸出
執行程式碼並依次點選四個按鈕。
