对话框(Dialog)是用户与程序互动的一种界面,tkinter程序包中的对话框包括以下几种
– Messagebox(消息框):用来提供不同种类的消息
– Simpledialog:简单对话框,用来输入字符串或整数、浮点数。
– Filedialog: 文件对话框,使用它可以打开文件
– Colorchooser:调色板选择框,他会返回所取颜色的RGB值
1.消息框
消息框(Messagebox)的主要目的是以简洁的信息与用户互动,它的基本组成如下:
- 消息框标题栏,调用相关方法时会用参数title来表示
- 图标,用参数icon来表示
- 显示消息框的相关消息,message表示
- 消息框的对应按钮,每个按钮都有响应的消息,调用相关方法时会用参数type来表示
消息框分类两大类:询问和显示。询问消息框以ask开头,伴随2~3个按钮来产生可与用户的互动操作。显示消息框以show开头,只会显示一个确定按钮,具体参数如下:
种类 | messagebox方法 |
---|---|
询问 | askokcancel(title = None,message = None,**options) |
askquestion(title = None,message = None,**options) | |
askretrycancel(title = None,message = None,**options) | |
askyesno(title = None,message = None,**options) | |
askyesnocancel(title = None,message = None,**options) | |
显示 | showerror(title = None,message = None,**options) |
showinfo(title = None,message = None,**options) | |
showwarning(title = None,message = None,**options) |
其中参数title是要在标题栏显示的文字,参数message则是显示消息的文字内容
from tkinter import *
from tkinter import messagebox
win = Tk()
win.title('Messagebox消息框')
win.geometry('180x120+20+50')
def answer():
messagebox.showerror('回答', '抱歉,你的问题无法回答!')
def callback():
if messagebox.askyesno('消息确认', '真的要离开吗?'):
messagebox.showwarning('消息- Yes', '抱歉!无法离开')
else:
messagebox.showinfo('消息- No', '取消离开指令')
Button(win, text='离开', command=callback).pack(side='left', padx=10)
Button(win, text='回答', command=answer).pack(side='left')
mainloop()
2.简单型对话框
简单型对话框(Simpledialog)有三个方法:
– 处理字符串的askstring()方法
– 处理整数的askinteger()方法
– 处理浮点数的askfloat()方法
语法格式如下:
simpledialog.askstring(titile,prompt,**kw)
askinteger.askstring(titile,prompt,**kw)
askfloat.askstring(titile,prompt,**kw)
- title:用于对话框的标题,必须提供的参数
- prompt:提示字符串,必须提供的参数
- kw:可选参数,参考下表
选项 | 类型 | 说明 |
---|---|---|
initialvalue | interger,float,string | 输入时的初值 |
mainvalue | interger/float | 最小值 |
maxvalue | interger/float | 最大值 |
下面的范例程序中有两个按钮,当用户按下时,通过command属性调用所对应的方法,分别输入字符串和整数。其中的processWord()方法用来处理输入字符串时该进行的工作,processInt()方法处理输入整数值时该进行的工作
from tkinter import *
from tkinter import simpledialog
# 处理输入字符串
def processWord():
name = simpledialog.askstring(title='输入字符串', prompt='输入姓名')
print('名称', name)
# 处理输入整数
def processInt():
score = []
count = 0
while True:
number = simpledialog.askinteger(
title='输入数值', prompt='分数', maxvalue=100, minvalue=60)
score.append(number)
count += 1
if count == 5:
break
totale = sum(score)
print('分数:', score)
print('合计:', totale)
win = Tk()
win.title('简单型对话框')
win.geometry('140x60+10+10')
Button(text='输入字符串', command=processWord).pack(side='left', padx=10)
Button(text='输入整数', command=processInt).pack(side='right', padx=10)
mainloop()
3.文件对话框
文件对话框(Filedialog)有两个方法:askopenfile()用于打开文件,asksaveasfile()用于保存文件。
实例
from tkinter import *
from tkinter import filedialog
def OpenFile():
name = filedialog.askopenfilename(title='打开文件', filetypes=[(
'Text File', '*.txt'), ('Python File', '*.py *.pyw'), ('All Files', '*')])
print('打开的文件', name)
with open('myfile.txt', 'rt') as foin:
total = foin.read()
print('字符数', len(total))
for line in total:
print(line, end='')
def SaveFile():
save = filedialog.asksaveasfilename(title='保存文件', filetypes=[(
'Text File', '*.txt'), ('Python File', '*.py *.pyw'), ('All Files', '*')], initialfile='myfile.txt')
with open('myfile.txt', 'a+') as fout:
show = '天道酬勤 地道酬善\n'
print('字符串的长度:', len(show))
fout.write(show)
print('存储文件', save)
win = Tk()
win.title('简单型对话框')
win.geometry('140x60+10+10')
Button(text='打开文件', command=OpenFile).pack(side='left', padx=10)
Button(text='保存文件', command=SaveFile).pack(side='right', padx=10)
mainloop()
4.调色板选择框
调色板选择框(Colorchooser)控件用于提供颜色的选择,askcolor()方法可产生标准对话框,以调色板的方式提供颜色的选择,语法如下:
colorchooser.askcolor([color,[,options]])
- color 设置颜色
- options 可选参数,参考下表
选项 | 类型 | 说明 |
---|---|---|
initialcolor | color | 以RGB为主的颜色 |
title | string | 文件对话框标题 |
askcolor()方法会以元组对象的方式返回RGB值,如下
((0.0,128.5,255.56),'#0080ff')
实例:
from tkinter import *
from tkinter import colorchooser
def SelectColor():
tint = colorchooser.askcolor(title='调色板', initialcolor='#FF88cc')
rgbs = tint[0]
print(f'R:{rgbs[0]}')
print(f'G:{rgbs[1]}')
print(f'B:{rgbs[2]}')
print('16进制颜色代码为:', tint[1])
win = Tk()
win.title('颜色拾取器')
Button(win, text='选择颜色', command=SelectColor).pack()
mainloop()