1. 程式人生 > >[Tkinter 教程11] 對話方塊和訊息框

[Tkinter 教程11] 對話方塊和訊息框

簡介

Tkinter 提供了一系列的對話方塊, 可以用來顯示文字訊息, 提示警告資訊和錯誤資訊, 選擇檔案或顏色. 其他一些簡單的對話方塊還可以請求使用者輸入文字, 整數或數字.
下面是一個典型的對話方塊使用場景. 在應用程式中經常會有 “退出” 按鈕, 如下:
這裡寫圖片描述

點選 “quit” 按鈕會彈出一個確認退出對話方塊:
這裡寫圖片描述

我們假設 “退出” 功能還沒有最終完成, 這時我們會彈出一個只帶 OK 按鈕的訊息對話方塊, 提示使用者該功能還不可用:
這裡寫圖片描述

如果使用者點選了 “NO” 按鈕, 我們可以彈出以下訊息框:
這裡寫圖片描述

讓我們回到第一個視窗, 就是那個帶有 “quit” 和 “answer” 按鈕的對話方塊. 如果點選 “answer” 按鈕, 我們可以彈出一個錯誤對話方塊, 告訴使用者 “Answer” 功能還不可用:
這裡寫圖片描述

上面描述的邏輯可用如下程式碼實現:

from Tkinter import *
from tkMessageBox import *

def answer():
    showerror("Answer", "Sorry, no answer available")

def callback():
    if askyesno('Verify', 'Really quit?'):
        showwarning('Yes', 'Not yet implemented')
    else:
        showinfo('No', 'Quit has been cancelled'
) Button(text='Quit', command=callback).pack(fill=X) Button(text='Answer', command=answer).pack(fill=X) mainloop()

訊息框

訊息框功能由 tkMessageBox 包提供, 其中包含了如下訊息框型別:

askokcancel(title=None, message=None, **options)
詢問使用者操作是否繼續. 選擇 ok 則返回 True
askquestion(title=None, message=None, **options)
顯示一個問題
askretrycancel(title=None, message=None, **options)
詢問使用者是否要重試操作. 選擇 ok 則返回 True
askyesno(title=None, message=None, **options)
顯示一個問題. 選擇 ok 則返回 True
askyesnocancel(title=None, message=None, **options)
顯示一個問題. 選擇 ok 則返回 True; 選擇 cancel 則返回 None
showerror(title=None, message=None, **options)
給出一條錯誤資訊
showinfo(title=None, message=None, **options)
給出一條提示資訊
showwarning(title=None, message=None, **options)
給出一條警告資訊

檔案選擇對話方塊

幾乎所有實用的桌面應用都有 開啟檔案以讀取/寫入 的功能. 有些程式還需要提供選擇目錄功能. Tkinter 中的 tkFileDialog 包提供了這個功能.

from Tkinter import *
from tkFileDialog   import askopenfilename      

def callback():
    name= askopenfilename() 
    print name

errmsg = 'Error!'
Button(text='File Open', command=callback).pack(fill=X)
mainloop()

上面的程式碼執行後, 會顯示一個帶有 “File Open” 字樣的按鈕, 點選這個按鈕則顯示如下檔案選擇對話方塊:
這裡寫圖片描述

對話方塊的樣式依賴於執行程式的作業系統平臺. 上面的視窗是在一部裝有 gnome 桌面系統的 linux 作業系統中的顯示結果. 如果我們在 Windows7 下執行這段程式, 則會得到如下視窗:
這裡寫圖片描述

顏色選擇對話方塊

有些應用需要使用者選擇顏色. Tkinter 提供了這樣一種對話方塊. tkColorChooser 包中包含了這個功能:

result = tkColorChooser.askColor ( color, option=value, ...)

如果使用者點選顏色選擇對話方塊的確認按鈕, askColor() 方法會返回一個二元組, 其中的元素都可以用來表示所選擇的顏色: ((106, 150, 98), '#6a9662') . 第一個元素是一個代表三原色 RGB 的三元組, 每種原色的取值範圍為 0-255. 第二個元素是一種16進製表示顏色的方法. 如果使用者點選取消按鈕, askColor() 方法同樣會返回一個二元組: (None, None).
askColor() 方法中的 options 引數可以是以下選項:

color
用以為顏色選擇對話方塊設定一個預設選擇的顏色. 如果未指定 color 選項, 則預設選擇顏色為灰色.
title
顯示在對話方塊頂部標題欄的標題文字. 預設的標題為 “Color”.
parent
設定後, 顏色選擇對話方塊會在 parent 這個視窗之上顯示. 預設行為是在 root 視窗之上顯示.

讓我們看一個例子:

from Tkinter import *
from tkColorChooser import askcolor                  

def callback():
    result = askcolor(color="#6A9662", 
                      title = "Bernd's Colour Chooser") 
    print result

root = Tk()
Button(root, 
       text='Choose Color', 
       fg="darkgreen", 
       command=callback).pack(side=LEFT, padx=10)
Button(text='Quit', 
       command=root.quit,
       fg="red").pack(side=LEFT, padx=10)
mainloop()

顏色選擇對話方塊的樣式同樣取決於執行程式的作業系統及視窗系統. 在 gnome 視窗系統下, 這個對話方塊顯示如下:
這裡寫圖片描述

這裡寫圖片描述

在 Windows7 系統下, 顏色選擇對話方塊顯示如下:
這裡寫圖片描述

譯者水平有限, 如有疏漏, 歡迎指正.
已獲得原作者授權. 原文地址: Dialogs.

相關推薦

[Tkinter 教程11] 對話方塊訊息

簡介 Tkinter 提供了一系列的對話方塊, 可以用來顯示文字訊息, 提示警告資訊和錯誤資訊, 選擇檔案或顏色. 其他一些簡單的對話方塊還可以請求使用者輸入文字, 整數或數字. 下面是一個典型的對話方塊使用場景. 在應用程式中經常會有 “退出” 按鈕,

MUI-dialog(對話方塊),警告、確認、輸入對話方塊訊息提示

本文主要講述dialog(對話方塊),包括:警告框、確認框、輸入對話方塊、訊息提示框四類。 元件名 作用 alert 警告框 confirm 確認框

JS彈出對話方塊、提示,JS關閉視窗、關閉頁面JS控制頁面跳轉

1. RequestDispatcher.forward() 在伺服器端起作用,當使用forward()時,Servlet engine傳遞HTTP請求從當前的Servlet或者是JSP到另外的一個Servlet、JSP 或普通HTML檔案,也即你的form提交至a.jsp,在a.jsp用到了forw

基於Metronic的Bootstrap開發框架經驗總結(6)--對話方塊及提示的處理優化

在各種Web開發過程中,對話方塊和提示框的處理是很常見的一種介面處理技術,用得好,可以給使用者很好的頁面體驗,Bootstrap開發也一樣,我們往往在頁面新增、編輯、檢視詳細等介面使用彈出對話方塊層的方式進行顯示資料,刪除則可能使用一個提示確認框,如果操作成功,我們可以使用更豐富的提示框來處理,本篇主要對比說

模式對話方塊非模式對話方塊、accept()函式、exec()函式,Accepted訊號區別

一.非模式對話方塊   非模式對話方塊是和同一個程式中其它視窗操作無關的對話方塊。在字處理軟體中查詢和替換對話方塊通常是非模式的來允許同時與應用程式主視窗和對話方塊進行互動。呼叫show()來顯示非模式對話方塊。show()立即返回,這樣呼叫程式碼中的控制流將會繼續。   非模式

VC++6.0 MFC顯示模態對話方塊非模態對話方塊

1、模態對話方塊 #include "AddDataDlg.h"//新增標頭檔案 CAddDataDlg AddData_Dialog;//在標頭檔案中定義對話方塊物件(CAddDataDlg為該對話方塊對應的類) int nReturn = AddData_Dialog.DoModal

MFC模態對話方塊非模態對話方塊

下面是一個我的手寫的模態對話方塊和非模態對話方塊圖: 模態對話方塊是指當其顯示時,程式會暫停執行,直到關閉這個模態對話方塊後,才能繼續執行程式中其他任務。非模態對話方塊是指當其顯示時,允許轉而執行程式中其他任務,而不用關閉這個對話方塊。      模態對話方塊的建立:

MFC程式設計學習之改變對話方塊控制元件及文字顏色

//程式訊息流:首先對話方塊繪製時,會發送WM_CTLCOLOR訊息,那麼OnCtlColor()函式 //將響應該訊息,程式將用該函式返回的畫刷對控制元件進行繪製。 HBRUSH CSettingDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtl

C#裡面MessageBox不能亂用,阻塞非阻塞,模態對話方塊非模態

我一開始以為這個MessageBox跟Delphi裡面的ShowMessage是一樣的,程式裡可以隨便放,因為C#裡面就TM這一個封裝好的彈出對話方塊提示訊息函式,可以直接用的。 結果實習做程式測試被坑爹了,發現我錯了,C#這個MessageBox預設是模態對話方塊,是阻塞的,也就是說你不

MFC——模態對話方塊非模態對話方塊

一、模態對話方塊 如果你需要做一個模態對話方塊,簡單的說就是你點一個按鈕,彈出一個對話方塊,之後你只能在彈出的對話方塊上操作的這麼一個過程。實驗的過程很簡單,跟著我做吧。 下面開始模態對話方塊實驗 在資源檢視新建一個對話方塊資源,修改其ID為IDD_DIAL

MFC中的模態對話方塊非模態對話方塊

MFC筆記之模態對話方塊和非模態對話方塊 迫於科研的進度壓力,我還是選擇了MFC最為工具去開發裝置除錯軟體,最初想用Qt來創新一下,然而串列埠的通訊一直沒有成功,而且周圍沒有人用Qt使得我在遇到問題無法

(shell練習1)zenity圖形介面之資訊對話方塊單複選對話方塊,以及while,for迴圈的練習

涵蓋內容包括 1,shell的while迴圈 2,shell的for迴圈 3,shell關於字串的擷取(精華之處) 4,shell的選擇分支語句if 5,zenity資訊對話方塊 6,zenity單選對話方塊 7,zenity複選對話方塊  8,shell不

MFC中CWnd類及其派生類對話方塊訊息處理、視窗操作

CWnd類 我們在螢幕上看到的所有物件都和視窗有關,它們或者派生於CWnd,屬繼承關係,如對話方塊、工具欄、狀態列、子控制元件;或者被CWnd合成,屬服務員與服務物件關係,如圖示、選單、顯示裝置。 CWnd類封裝的視窗操作主要包含視窗的建立和銷燬、操作視窗風格、操作視窗狀態

DirectUI中模態對話方塊選單的原理

經常有人問關於模態對話方塊和系統選單內部實現原理方面的問題, 因為系統通過API隱藏了太多細節,這2個問題確實令初學者甚至是有經驗的開發者困擾, 下面是我個人的一些經驗總結。先說模態對話方塊,外部看模態對話方塊其實就是Dialog彈出以後函式(或者說呼叫棧call stack)不直接返回, 而是要

MFC 建立非模態對話方塊銷燬過程

今天專案中遇到的問題,記錄下來,做個總結。 一個簡單的目的是建立一個非模態對話方塊並在對話方塊關閉後將其銷燬。 這裡的銷燬包括:銷燬對話方塊物件資源和對話方塊物件指標; 首先說建立對話方塊: 一、模態對話方塊(model dialog box) 在程式執行的過程中,若出

在MFC中修改對話方塊、編輯、button按鈕背景色

一、修改對話方塊背景色: 1、為目標對話方塊新增WM_CTRCOLOR訊息; 2、位目標Dlg類定義一個CBrush型別的私有成員變數:m_brushBg,並在其建構函式中將此畫刷初始為 一個淡藍色畫刷(畫刷顏色可任意修改):m_brushBg.CreateSolidBru

MFC 動態建立對話方塊控制元件

         一段時間以來,都在思考不採用Qt,用Win32-API或者MFC實現的程式使介面可配置。即先配置好需要什麼對話方塊、包含什麼控制元件、完成什麼任務,然後執行時建立,用以實現介面和功能的分離。需要可以動態配置控制元件建立、訊息接收函式。之前準備的本文

模態對話方塊非模態對話方塊區別

模態對話方塊(Modal Dialog)與非模態對話方塊(Modeless Dialog)的概念不是Qt所獨有的,在各種不同的平臺下都存在。又有叫法是稱為模式對話方塊,無模式對話方塊等。所謂模態對話方塊就是在其沒有被關閉之前,使用者不能與同一個應用程式的其他視窗進行互動,直到該對話方塊關閉。對於非模

windows程式崩潰對話方塊異常處理

    經常碰到某些程式崩潰時彈出帶紅色叉叉的錯誤視窗或者是叫你選擇除錯或關閉的視窗,很礙眼。不過平時也沒去理它,點掉就好。     今天客戶反映我們的程式崩潰後就起不來了,其實我們為了方便無人化管理,做了一個守護程序。如果程式異常退出就會重啟那個程式,這在linux下沒

選擇目錄對話方塊選擇檔案對話方塊——CFileDialog

網上相關文章很多,現簡單整理如下 1、CFileDialog建構函式 1 CFileDialog:CFileDialog(BOOL     bOpenFileDialog, 2 LPCTSTR     lpszDefExt=NULL, 3 LPCTSTR