一目了然看代码:
from tkinter import colorchooser from tkinter import * root =Tk() def callback(): fileName = colorchooser.askcolor() print(fileName) Button(root, text='选择颜色', command=callback).pack() mainloop() #rgb (rgb,hx)=colorchooser.askcolor() print('rgb='+str(rgb)+' hx='+hx)
在 colorchooser 模块下提供了用于生成颜色选择对话框的 askcolor() 工具函数,为该工具函数可指定如下选项:
- parent:指定该对话框的属主窗口。
- title:指定该对话框的标题。
- color:指定该对话框初始选择的颜色。
函数返回值
- 如果用户点击的 ‘确定’ 按钮,返回值是一个二元组 (triple, color),其中的 triple 是一个三元组 (R, G, B)–其中 R, G, B 的范围是 [0, 255](就是该颜色的 RGB 颜色),第二个参数选中颜色的 16 进制的值
- 如果用户点击的 ‘取消’ 按钮,返回值是(None, None)
Q&A
可能有人会比较好奇为什么要这样写:
from tkinter import colorchooser from tkinter import *
其中的 from tkinter import * 难道没有包含 from tkinter import colorchooser 吗?
经过尝试我们会发现,还必须加上 from tkinter import colorchooser 这段代码,否则会报错。
首先我们得对 Python 的 module 和 package 这两个概念有所了解,看 sof 上的这个问题:difference between a Python module and a Python package
简单归纳如下
- 任何一个 Python 文件都是一个都是一个 module,module 名称是没有 .py 扩展名的那部分。比如说有一个 a.py 的 Python 文件,那么这个文件就是一个 module,module 的名称是 a。我们可以通过 import a 来导入这个 module。
- package 是很多 module 的集合。可以将 package 看成一个文件夹。将 package 和一个含有很多 .py 文件的文件夹区分开来的标准是 package 还有一个额外的
__init__.py 。
可以参考 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。
更多示例代码:
from tkinter import * # 导入ttk from tkinter import ttk # 导入colorchooser from tkinter import colorchooser class App: def __init__(self, master): self.master = master self.initWidgets() def initWidgets(self): # 创建1个按钮,并为之绑定事件处理函数 ttk.Button(self.master, text='选择颜色', command=self.choose_color # 绑定choose_color方法 ).pack(side=LEFT, ipadx=5, ipady=5, padx= 10) def choose_color(self): # 调用askcolor函数获取选中的颜色 print(colorchooser.askcolor(parent=self.master, title='选择画笔颜色', color = 'blue')) # 初始颜色 root = Tk() root.title("颜色对话框测试") App(root) root.mainloop() #coding=utf-8 #颜色选择器 from tkinter import * import tkinter.colorchooser as cc #给导入的包指定一个别名 class App: def __init__(self,master): frame=Frame(master) frame.pack() button=Button(frame,text='选择颜色',command=self.ask_color) button.grid(row=0,column=0) def ask_color(self): (rgb,hx)=cc.askcolor() #************ print('rgb='+str(rgb)+' hx='+hx) root=Tk() app=App(root) root.mainloop()
上面程序中第 18 行代码就是调用 askcolor() 函数生成颜色选择对话框的关键代码。运行该程序,单击界面上的“选择颜色”按钮,将可以看到如图 1 所示的对话框。
通过 colorchooser 模块下的工具函数打开的颜色选择对话框依赖所在的平台,因此在不同的平台上看到的颜色选择对话框是不同的。
当用户选择指定颜色,并单击颜色选择对话框中的“确定”按钮后,askcolor() 函数会返回用户所选择的颜色,因此可以在控制台看到用户所选择的颜色。