[译][Tkinter 教程11] 对话框和消息框

原系列地址: Python Tkinter

简介

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.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容