Tkinter入门
前页 |  | 后页

# 第九章. 标准对话框

在我们进入应用程序编写前,我们现看一看GUI编程的另外一个重要的部分:显示对话框和消息框.

自Tk4.2版本以后,TK库提供了一组标准对话框,用来显示消息和选择文件或颜色. 另外, Tkinter 提供了一些简单的对话框,使你可以从用户那里得到例如整数、浮点数或字符串等输入值. 这些标准对话框使用了“平台指定”机制，使你的窗口外观可以与整个平台环境大体一致.

# 消息框

tkMessageBox 模块提供了一个消息框的接口.

最早的使用这个模块的方法是用一个预制函数: `showinfo`, `showwarning`, `showerror`, `askquestion`, `askokcancel` 或 `askyesno`(注意,原文还指明有`askretryignore`函数,但是我在python2.1内没有找到) 它们有相同的语法:

`tkMessageBox.function(title, message [, options])`. `title` 参数被作为窗口的标题显示， message 被放置到对话框体中.你可以在 message 中使用换行字符 ("\n") 来实现多行显示. options 参数可以被用来更改外观风格,这个我们以后再解释.

第一组标准对话框用来显示信息. 你需要提供 title 和 message ,函数会结合一个恰当的图标显示出来.当用户点击OK时返回.返回值一般被忽略.

这里有一个范例:

    from Tkinter import *
    import tkMessageBox

    def sww():
    	tkMessageBox.showwarning("msg","showwarning")
    def swi():
    	tkMessageBox.showinfo("msg","showinfo")
    def swe():
    	tkMessageBox.showerror("msg","showerror")
    def asq():
    	p=tkMessageBox.askquestion("msg","askquestion")
    	tkMessageBox.showinfo("msg",p)
    def asoc():
    	p=tkMessageBox.askokcancel("msg","askokcancel")
    	tkMessageBox.showinfo("msg",p)
    def asyn():
    	p=tkMessageBox.askyesno("msg","askyesno")
    	tkMessageBox.showinfo("msg",p)

    root = Tk()

    frame = Frame(root)

    sww = Button(frame,text="showwarning",command=sww).pack(side=LEFT)
    swi = Button(frame,text="showinfo",command=swi).pack(side=LEFT)
    swe = Button(frame,text="showerror",command=swe).pack(side=LEFT)
    asq = Button(frame,text="askquestion",command=asq).pack(side=LEFT)
    asoc = Button(frame,text="askokcancel",command=asoc).pack(side=LEFT)
    asyn = Button(frame,text="askyesno",command=asyn).pack(side=LEFT)

    frame.pack()
    root.mainloop()

图例 9-1. showinfo, showwarning, showerror 对话框

图例 9-2. askquestion 对话框

图例 9-3. askokcancel, askyesno, askretryignore 对话框

这个例子是我自己做的,原文的例子使用的是瑞典文版的windows下的截图,我想大家应该看不明白(至少我看不明白:).这个例子也可以使用python的自省来简化,不过我想这样写更利于理解

## 消息框选项

如果标准对话框对你不太合适,你可以使用_show方法来自己设定一个消息框,例如:

    	  tkMessageBox._show(title="msg",message="askquestion",type=tkMessageBox.ABORTRETRYIGNORE)

_show方法的用法是: _show(title=None, message=None, icon=None, type=None, **options)

表 9-1. 消息框选项

选项 | 类型 | 描述
--- | --- | ---
`default` | 常量 | 指定一个缺省按钮: ABORT, RETRY, IGNORE, OK, CANCEL, YES, 或 NO (这些常量被定义在 tkMessageBox 模块里).
`icon` | 常量 | 指定一个图标: ERROR, INFO, QUESTION, 或 WARNING
`message` | 字符串 | 用来显示的消息(作为预制函数的第二个参数). 可以包含换行符.
`parent` | 组件 | 指定一个窗口将消息框放在其上方,当消息框关闭时,窗口焦点将返回到这个指定窗口上.
`title` | 字符串 | 消息框标题 (作为预制函数的第一个参数).
`type` | 常量 | 消息框类型; 就是指定显示按钮组: ABORTRETRYIGNORE, OK, OKCANCEL, RETRYCANCEL, YESNO, 或 YESNOCANCEL.

前页 | 首页 | 后页
状态条 | 向上 | 数据输入