- 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 - 花園
- Kivy - 儲存
- Kivy - 向量
- Kivy - 工具函式
- Kivy - 檢查器
- Kivy - 工具
- Kivy - 日誌記錄器
- Kivy - 幀緩衝區
- Kivy 應用程式和專案
- Kivy - 繪圖應用程式
- Kivy - 計算器應用程式
- Kivy - 計時器應用程式
- Kivy - 相機處理
- Kivy - 圖片檢視器
- Kivy - 貝塞爾曲線
- Kivy - 畫布壓力測試
- Kivy - 圓形繪製
- Kivy - 控制元件動畫
- Kivy - 雜項
- Kivy 有用資源
- Kivy - 快速指南
- Kivy - 有用資源
- Kivy - 討論
Kivy - 彈出視窗
Kivy 中的 Popup 控制元件會顯示一個對話方塊,該對話方塊覆蓋主父視窗,通常是響應按鈕點選事件而出現的。對話方塊用於多種目的,例如向用戶顯示特定訊息、讓使用者輸入某些內容或詢問使用者是否確認特定操作。
一般來說,任何 GUI 應用程式中的對話方塊都分為兩種型別:模態和非模態。不允許使用者在不與之互動的情況下與父視窗互動的對話方塊稱為模態對話方塊。另一方面,如果使用者可以在不與之互動的情況下關閉對話方塊,則它是非模態對話方塊。
在 Kivy 中,彈出對話方塊預設覆蓋整個父視窗。您可以根據需要配置其大小。
Popup 類在 "kivy.uix.popup" 模組中定義。
from kivy.uix.popup import Popup popup = Popup(**kwargs)
Popup 物件預先配置了一個包含標題和分隔線的佈局。我們可以透過向其 layout 引數新增其他控制元件來自定義佈局。
以下程式碼片段在父視窗上生成一個簡單的彈出視窗:
from kivy.uix.popup import Popup popup = Popup(title='Popup Demo', content=Label(text='This is a Popup'), size_hint=(None, None), size=(400, 400))
您需要呼叫 Popup 物件的 open() 方法來顯示它。
popup.open()
顯示彈出視窗後,任何點選其外部的操作都會將其關閉。要防止彈出視窗自動關閉,請將 auto_dismiss 屬性設定為 False。您需要顯式呼叫 popup.dismiss() 方法。通常,這是透過將其繫結到按鈕的 on_press 事件來完成的。
class popdemo(App):
def build(self):
btn = Button(text="Click here")
btn.bind(on_press=self.onButtonPress)
return btn
def onButtonPress(self, button):
layout = GridLayout(cols=1)
lbl = Label(text='Hello world')
closeButton = Button(text="OK")
layout.add_widget(lbl)
layout.add_widget(closeButton)
popup = Popup(
title='Popup Demo', content=layout,
auto_dismiss=False, size_hint=(None, None),
size=(400, 400)
)
popup.open()
closeButton.bind(on_press=self.on_close)
def on_close(self, event):
self.popup.dismiss()
當單擊標題為“單擊此處”的按鈕時,您將看到如下所示的彈出對話方塊:
按彈出視窗上的“確定”按鈕將其關閉。
Popup 類定義了以下屬性:
content − 彈出視窗的內容,顯示在標題下方。content 是一個 ObjectProperty,預設為 None。
title − 表示彈出視窗標題的字串。title 是一個 StringProperty,預設為 'No title'。
Popup 物件響應以下事件:
on_open − 彈出視窗開啟時觸發。
on_dismiss − 彈出視窗關閉時觸發。如果回撥函式返回 True,則取消關閉操作。
示例
以下程式碼給出了 Kivy 中 Popup 對話方塊的一個很好的例子。首先,我們在父視窗的垂直箱式佈局中添加了一個標籤和一個按鈕。按鈕點選會彈出一個單列網格佈局,其中包含一個文字輸入框,提示使用者輸入姓名。當彈出視窗關閉時,該文字用於更改父視窗的標籤。
以下是完整程式碼:
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.gridlayout import GridLayout
from kivy.uix.popup import Popup
from kivy.core.window import Window
Window.size = (720, 400)
class PopupExample(App):
def build(self):
self.layout = GridLayout(cols=1, padding=10)
self.l1 = Label(
text='enter your name', font_size=32,
color=[.8, .6, .4, 1]
)
self.layout.add_widget(self.l1)
self.button = Button(text="Click Here")
self.layout.add_widget(self.button)
self.button.bind(on_press=self.onButtonPress)
return self.layout
def onButtonPress(self, button):
layout = GridLayout(cols=1, padding=10)
popupLabel = Label(text="Enter name")
self.t1 = TextInput()
closeButton = Button(text="OK")
layout.add_widget(popupLabel)
layout.add_widget(self.t1)
layout.add_widget(closeButton)
self.popup = Popup(
title='Hello', content=layout,
auto_dismiss=False, size_hint=(None, None),
size=(200, 200)
)
self.popup.open()
closeButton.bind(on_press=self.on_close)
def on_close(self, event):
self.l1.text = 'Thanks ' + self.t1.text
self.popup.dismiss()
PopupExample().run()
輸出
應用程式視窗如下所示: