对话框(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()

发表评论

电子邮件地址不会被公开。 必填项已用*标注