Tkinter 为我们提供了三种标准对话框模块,他们分别是:messagebox、filedialog 和 colorchooser
注:这三个模块原来是独立的,分别是 tkMessageBox、tkFileDialog 和 tkColorChooser,需要导入才能使用。在 Python3 之后,这些模块全部被归纳到 Tkinter 模块的麾下。
目录
Messagebox(消息对话框)
函数参数
函数返回值
filedialog(文件对话框)
函数参数
函数返回值
colorchooser(颜色对话框)
函数参数
函数返回值
FAQ
下文为你列出了使用 messagebox 可以创建的所有标准对话框样式:
from tkinter import messagebox
#import tkinter.messagebox
from tkinter import *
print(messagebox.askokcancel('messagebox', 'Demo one'))
#有返回值,点‘确定’返回True,点‘取消’返回False。后序可以有对返回值的操作进行下一步
mainloop()
使用函数和对话框样式
所有的这些函数都有相同的参数:
title参数设置标题栏的文本 |
message参数设置对话框的主要内容,可以使用'\n'来进行换行 |
options参数可以设置的选项和含义如下表 |
options参数选项 | 含义 |
---|---|
default | --设置默认的按钮(也就是按下回车响应的那个按钮) --默认是第一个按钮(像‘确定’,‘是’或‘重试’) --可以设置的值根据对话框的不同可以进行选择:CANCEL、IGNORE、OK、NO、RETRY或YES |
icon | --指定对话框显示的图标 --可以指定的值有:ERROR、INFO、QUESTION或WARNING --注意:不能自己指定自己的图标(不可自定义图标) |
parent |
--如果不指定该选项,那么对话框默认显示在根窗口上 --如果想要讲对话框显示在子窗口w上,那么可以设置parent=w |
askokcancel()、askretrycancel() 和 askyesno() 返回布尔类型的值:
--返回 True 表示用户点击了 ‘确定’ 或 ‘是’ 按钮
--返回 False 表示用户点击了 ‘取消’ 或 ‘否’ 按钮
askquestion() 返回 ‘yes’ 或 ‘no’ 字符串表示用户点击了 ‘是’ 或 ‘否’ 按钮
showerror()、showinfo() 和 showwarning() 返回 ‘ok’ 表示用户按下了 ‘是’ 按钮
当你的应用程序需要使用打开文件或保存文件的功能时,文件对话框显得尤为重要。emmm,印象里Java好像也有个组件还是函数可以几行实现。
#from tkinter import filedialog
import tkinter.filedialog
from tkinter import *
root = Tk()
def callback():
fileName = filedialog.askopenfilename()
print(fileName)
Button(root, text='打开文件', command=callback).pack()
mainloop()
filedialog 模块提供了两个函数:askopenfilename(**options) 和 asksaveasfilename(**options),分别用于打开文件和保存文件。
两个函数可供设置的选项是一样的,下面列举了可用选项及含义:
可用选项 | 含义 |
---|---|
defaultextension |
--指定文件的后缀 --例如:defaultextension='.jpg',那么当用户输入一个文件名'Python'的时候,文件名会自动添加后缀为'Python.jpg' --注意:如果用户输入文件名包含后缀,那么该选项不生效 |
filetypes |
--指定筛选文件类型的下拉菜单选项 --该选项的值是由二元组构成的列表 --每个二元组是由(类型名,后缀)构成,例如:filetypes=[('PNG', '.png'), ('JPG', '.jpg'), ('GIF', '.gif')] |
initialdir | --指定打开保存文件的默认路径 --默认路径是当前文件夹 |
parent | --如果不指定该选项,那么对话框默认显示在根窗口上 --如果想要将对话框显示在子窗口w上,那么可以设置parent=w |
title | --指定文件对话框的标题栏文本 |
filetypes图解:
1.如果用户选择了一个文件,那么返回值是该文件的完整路径
2.如果用户点击了取消按钮,那么返回值是空字符串
颜色对话框提供了一个友善的界面让用户选择需要的颜色。
from tkinter import colorchooser
from tkinter import *
root =Tk()
def callback():
fileName = colorchooser.askcolor()
print(fileName)
Button(root, text='选择颜色', command=callback).pack()
mainloop()
colorchooser 模块提供了一个函数 askcolor(color, option=value, ...)
参数 | 含义 |
---|---|
color | --要显示的初始的颜色(下图四个红箭头指的地方) --默认颜色是浅灰色(light gray) |
parent | --如果不指定该选项,那么对话框默认显示在根窗口上 --如果想要将对话框显示在子窗口w上,那么可以设置parent=w |
title | --指定颜色选择器标题栏的文本 --默认标题是“颜色” |
“默认颜色”图解:
1. 如果用户点击的 ‘确定’ 按钮,返回值是一个二元组 (triple, color),其中的 triple 是一个三元组 (R, G, B)--其中 R, G, B 的范围是 [0, 255](就是该颜色的 RGB 颜色),第二个参数选中颜色的 16 进制的值
2. 如果用户点击的 ‘取消’ 按钮,返回值是(None, None)
可能有人会比较好奇为什么要这样写:
from tkinter import colorchooser
from tkinter import *
其中的 from tkinter import * 难道没有包含 from tkinter import colorchooser 吗?
经过尝试我们会发现,还必须加上 from tkinter import colorchooser 这段代码,否则会报错。
首先我们得对 Python 的 module 和 package 这两个概念有所了解,看 SO 上的这个问题:difference between a Python module and a Python package
简单归纳如下
可以参考 sof 上的这个提问: whats the diference between from tkinter import * and from tkinter import 'module'
下面是我对第一个链接最高赞的一个简单的概述:
当我们 import package 的时候,只是 import 了 package 的 __init__.py 中的 variables/functions/classes,而没有 import package 包含的 module。
所以如果我们想要使用 module 中的变量、函数、类,就得具体指明是哪个 module。