当前位置: 首页 > news >正文

Python 的Tkinter包系列之四:对话框

Python Tkinter包系列之四:对话框

对话框是计算机用户和计算机程序之间进行交互的重要手段。对话框是大多数现代GUI应用程序不可或缺的一部分。

Tkinter提供了这些对话框子模块:

消息框messagebox,由tkinter.messagebox模块提供 tkinter.messagebox --- Tkinter 消息提示 — Python 3.10.8 文档

文件选择对话框filedialog,由tkinter.filedialog模块提供Tkinter 对话框 — Python 3.10.8 文档

颜色选择对话框colorchooser,由tkinter.colorchooser模块提供tkinter.colorchooser --- 颜色选择对话框 — Python 3.10.8 文档

简单对话框simpledialog,由tkinter.simpledialog模块提供Tkinter 对话框 — Python 3.10.8 文档

一、消息框messagebox

消息框是一种程序向用户显示信息很方便的一种方式。

消息对话框主要起到信息提示、警告、说明、询问等作用,通常配合“事件函数”一起使用,比如执行某个操作出现了错误,然后弹出错误消息提示框。通过使用消息对话框可以提升用户的交互体验,也使得 GUI 程序更加人性化。消息对话框主要包含了以下常用方法:

askokcancel()  打开一个“确定/取消”的对话框,语法格式:

tkinter.messagebox. askokcancel(title=None, message=None, **options)

其中【特别提示,所有的这些函数都有相同的参数】

title 参数毋庸置疑是设置标题栏的文本

message 参数是设置对话框的主要文本内容,你可以用 '\n' 来实现换行

options(选项)参数可以是这些选项中的任何一个:

【**options,也就是option, ...】

default  哪个按钮应该是默认选项?如果未指定此选项,则默认选择第一个按钮( (“OK”, “Yes”, or “Retry”))。要指定哪个按钮是默认选项,请使用default=C,其中C是tkMessageBox中定义的常量之一:CANCEL、IGNORE、OK、NO、RETRY或YES。

icon  指定对话框显示的图标,使用形式为icon=I的参数,其中I是tkMessageBox中定义的常量之一:ERROR、INFO、QUESTION或WARNING。

parent  如果不指定该选项,那么对话框默认显示在根窗口上。如果想要将对话框显示在子窗口上,那么可以设置 parent= 子窗口对象。

askquestion()  打开一个“是/否”的对话框,语法格式:

tkinter.messagebox. askquestion(title=None, message=None, **options)

askretrycancel()      打开一个“重试/取消”的对话框,语法格式:

tkinter.messagebox. askretrycancel(title=None, message=None, **options)

askyesno()       打开一个“是/否”的对话框,语法格式:

tkinter.messagebox. askyesno(title=None, message=None, **options)   

showerror()     打开一个错误提示对话框,语法格式:

tkinter.messagebox. showerror(title=None, message=None, **options)

showinfo()       打开一个信息提示对话框,语法格式:

tkinter.messagebox. showinfo(title=None, message=None, **options)

showwarning()        打开一个警告提示对话框,语法格式:

tkinter.messagebox. showwarning(title=None, message=None, **options)

下面给出一个消息框messagebox示例源码:

import tkinter as tk
from tkinter import messagebox

win = tk.Tk()
win.title("messagebox示例")
win.geometry("300x400")

# 信息消息框
def showinfomsg():
    msg1 = messagebox.showinfo(title="消息提示", message="欢迎")
    print(msg1)

# 警告消息框
def showwarningmsg():
    msg2 = messagebox.showwarning(title="消息警告", message="警告,该操作有风险")
    print(msg2)

def showerrormsg():
    msg3 = messagebox.showerror(title="错误消息", message="出错了")
    print(msg3)

# 疑问消息框

def askquestionmsg():
    msg4 = messagebox.askquestion(title="询问确认", message="确认吗")
    print(msg4)

def askokcancelmsg():
    msg5 = messagebox.askokcancel(title="确定或取消", message="确定吗")
    print(msg5)

def askretrycancelmsg():
    msg6 = messagebox.askretrycancel(title="重试或取消", message="是否重试")
    print(msg6)

def askyesonmsg():
    msg7 = messagebox.askyesno(title="是或否", message="是否开启")
    print(msg7)

def askyesnocancelmsg():
    msg8 = messagebox.askyesnocancel(title="是或否或取消", message="请选择是或否或取消选", default=messagebox.CANCEL)
    print(msg8)

btn = tk.Button(win, text='消息提示框', command=showinfomsg)
btn.pack(padx=10,pady=5, anchor='w')
btn = tk.Button(win, text='消息警告框', command=showwarningmsg)
btn.pack(padx=10,pady=5, anchor='w')
btn = tk.Button(win, text='错误消息框', command=showerrormsg)
btn.pack(padx=10,pady=5, anchor='w')
btn = tk.Button(win, text='询问确认对话框', command=askquestionmsg)
btn.pack(padx=10,pady=5, anchor='w')
btn = tk.Button(win, text='确认/取消对话框', command=askokcancelmsg)
btn.pack(padx=10,pady=5, anchor='w')
btn = tk.Button(win, text='重试/取消对话框', command=askretrycancelmsg)
btn.pack(padx=10,pady=5, anchor='w')
btn = tk.Button(win, text='是/否对话框', command=askyesonmsg)
btn.pack(padx=10,pady=5, anchor='w')
btn = tk.Button(win, text='是/否/取消对话框', command=askyesnocancelmsg)
btn.pack(padx=10,pady=5, anchor='w')

win.mainloop()

程序运行效果:

你可点击上图中的按钮试试。

二、文件选择对话框filedialog

允许用户从文件系统选择一个文件。该模块提供了有关文件对话框的常用函数如下:

Open()     打开个某个文件。语法格式:

tkinter.filedialog.Open(master=None, **options)

其中,options常用参数值如下所示:

参数         说明

defaultextension    指定文件的后缀名,当保存文件时自动添加文件名,如果自动添加了文件的后缀名,则该选项值不会生效

filetypes  指定筛选文件类型的下拉菜单选项,该选项值是由 2 元祖构成的列表,其中每个二元祖由两部分组成 (类型名,后缀),比如 filetypes = [("PNG","*.png"), ("JPG", "*.jpg"), ("GIF","*.gif"),("文本文件","*.txt")...]

initialdir   指定打开/保存文件的默认路径,默认路径是当前文件夹

parent      如果不指定该选项,那么对话框默认显示在根窗口上,通过设置该参数可以使得对话框显示在子窗口上

title  指定文件对话框的标题

SaveAs()          打开一个保存文件的对话框,语法格式:

tkinter.filedialog.SaveAs(master=None, **options)

askopenfilename()  打开某个文件,并以包含文件名的路径作为返回值,语法格式:

tkinter.filedialog.askopenfilename(**options)

【如果用户选择了一个文件,那么返回值是该文件的完整路径; 如果用户点击了取消按钮,那么返回值是空字符串】

askopenfilenames() 同时打开多个文件,并以元组形式返回多个文件名,语法格式:

tkinter.filedialog.askopenfilenames(**options)

askopenfile()   打开文件,并返回文件流对象,语法格式:

tkinter.filedialog.askopenfile(mode='r', **options)

askopenfiles() 打开多个文件,并以列表形式返回多个文件流对象,语法格式:

tkinter.filedialog.askopenfiles(mode='r', **options)

asksaveasfilename()       选择以什么文件名保存文件,并返回文件名,语法格式:

tkinter.filedialog.asksaveasfilename(**options)

asksaveasfile()         选择以什么类型保存文件,并返回文件流对象,语法格式:

tkinter.filedialog.asksaveasfile(mode='w', **options)

askdirectory    选择目录,并返回目录名,语法格式:

tkinter.filedialog.askdirectory(**options)

下面给出一个消息框文件选择对话框filedialog示例源码:

import tkinter as tk
#from tkinter import filedialog
from tkinter.filedialog import *

def openFile():
    filepath = askopenfilename()  # 选择打开什么文件,返回文件名
    if filepath.strip() != '':
        filename.set(filepath)  # 设置变量filename的值
    else:
        print("do not choose file")

def openDir():
    fileDir = askdirectory()  # 选择目录,返回目录名
    if fileDir.strip() != '':
        dirpath.set(fileDir)  # 设置变量outputpath的值
    else:
        print("do not choose Dir")

def fileSave():
    filenewpath = asksaveasfilename(defaultextension='.txt')  # 设置保存文件,并返回文件名,指定文件名后缀为.txt
    if filenewpath.strip() != '':
        filenewname.set(filenewpath)  # 设置变量filenewname的值
    else:
        print("do not save file")

root = tk.Tk()
root.title("fileDialog示例")
root.geometry("500x300")

filename = tk.StringVar()
dirpath = tk.StringVar()
filenewname = tk.StringVar()

# 打开文件
tk.Label(root, text='选择文件').grid(row=1, column=0, padx=5, pady=5)
tk.Entry(root, textvariable=filename, width=40 ).grid(row=1, column=1, padx=5, pady=5)
tk.Button(root, text='打开文件', command=openFile).grid(row=1, column=2, padx=5, pady=5)

# 选择目录
tk.Label(root, text='选择目录').grid(row=2, column=0, padx=5, pady=5) # 创建label 提示这是选择目录
tk.Entry(root, textvariable=dirpath, width=40).grid(row=2, column=1, padx=5, pady=5) # 创建Entry,显示选择的目录
tk.Button(root, text='打开目录', command=openDir).grid(row=2, column=2, padx=5, pady=5) # 创建一个Button,点击弹出打开目录窗口

# 保存文件
tk.Label(root, text='保存文件').grid(row=3, column=0, padx=5, pady=5)
tk.Entry(root, textvariable=filenewname, width=30).grid(row=3, column=1, padx=5, pady=5)
tk.Button(root, text='点击保存', command=fileSave).grid(row=3, column=2, padx=5, pady=5)

root.mainloop()

程序运行效果:

你可点击上图中的按钮试试。

三、颜色选择对话框colorchooser

颜色选择对话框是一个选择颜色的对话框。如果用户选择一个颜色并按下“确定”按钮后,返回值是一个 2 元祖,第 1 个元素是选择的 RGB 颜色值,第 2 个元素是对应的 16 进制颜色值; 如果用户按下“取消”按钮,那么返回值是 (None, None)

askcolor()方法/函数        打开一个颜色对话框,并将用户选择的颜色值以元组的形式返回(没选择返回None),格式为((R, G, B), "#rrggbb"),语法格式:

tkinter.colorchooser.askcolor(color=None, **options)

Chooser() 方法/函数        打开一个颜色对话框,并用户选择颜色确定后,返回一个二元组,格式为((R, G, B), "#rrggbb"),语法格式:

tkinter.colorchooser.Chooser(master=None, **options)

下面给出一个颜色选择对话框colorchooser示例源码:

import tkinter 
from tkinter import colorchooser

#创建主窗口 
win = tkinter.Tk()
win.geometry("400x300")
win.title(string = "colorchooser示例")

def callback1():
    #用askcolor方法函数打开一个颜色对话框
    color = colorchooser.askcolor()
    print(color)

def callback2():
    #用Chooser方法函数打开一个颜色对话框
    colorDialog = colorchooser.Chooser(win)
    color = colorDialog.show()
    print(color)

tkinter.Button(win, text='askcolor选择颜色', command=callback1).pack()

tkinter.Button(win, text='Chooser选择颜色', command=callback2).pack()
 
tkinter.mainloop()

程序运行效果:

你可点击上图中的按钮试试。

 

四、简单对话框simpledialog

创建简单的对话框,从用户那里读取一个值。

tkinter.simpledialog.askfloat(title, prompt, **kw)

tkinter.simpledialog.askinteger(title, prompt, **kw)

tkinter.simpledialog.askstring(title, prompt, **kw)

上述三个方法/函数提对话框,提示用户输入所需类型的值。

下面给出一个简单对话框simpledialog示例源码:

import tkinter
# 导入消息对话框子模块
import tkinter.simpledialog 

# 创建主窗口
root = tkinter.Tk()
root.title(string = "simpledialog示例")
# 设置窗口大小
root.minsize(300,300)

def askname():
    #用askstring获取字符串(标题,提示,初始值)
    result = tkinter.simpledialog.askstring(title = '获取信息',prompt='请输入姓名:',initialvalue = '初始值')
    # 打印内容
    print(result)

def askage():
    # 用askinteger获取整型(标题,提示,初始值)
    result = tkinter.simpledialog.askinteger(title = '获取信息',prompt='请输入年龄:',initialvalue = '18')
    # 打印内容
    print(result)

# 创建函数
def askheight():
    # 用askfloat获取浮点型数据(标题,提示,初始值)
    result = tkinter.simpledialog.askfloat(title = '获取信息',prompt='请输入身高(单位:mm):',initialvalue = '178.0')
    # 打印内容
    print(result)

# 添加按钮
btn = tkinter.Button(root,text = '获取用户名',command = askname)
btn.pack()
btn = tkinter.Button(root,text = '获取年龄',command = askage)
btn.pack()
btn = tkinter.Button(root,text = '获取身高',command = askheight)
btn.pack()

# 加入消息循环
root.mainloop()

程序运行效果:

你可点击上图中的按钮试试。

 

相关文章:

  • 大神之路-起始篇 | 第8章.计算机科学导论之【数据算法】学习笔记
  • IDET变化检测模型
  • javascript基本语法(持续补充)
  • Spring Boot开发之Mybatis
  • 卷王杯 easy unserialize
  • 常见Web安全漏洞深入解析
  • 如何从一款单片机移植到另一款单片机
  • linux创建用户和组、授权、禁止root远程登录、限制SSH的IP登录
  • 10大开源的快速开发平台—架构师必看
  • 3399-9.0 驱动根据vid和pid获取摄像头数量
  • Pandas DataFrame 保存到HTML文件(附炫酷 HTML Table 模板网站)
  • java过滤器(Filter)
  • 概率 | 考研 —— 复习知识点及方法 大总结
  • 【OPC UA】C# 通过OpcUaHelper建立OPC客户端访问KEPServerEx6 OPC服务器数据
  • 大数据算法系列4:二叉树,红黑树和B树
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • canvas 五子棋游戏
  • conda常用的命令
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • fetch 从初识到应用
  • HTML-表单
  • JavaScript 奇技淫巧
  • JavaScript函数式编程(一)
  • JSDuck 与 AngularJS 融合技巧
  • overflow: hidden IE7无效
  • Spring Cloud Feign的两种使用姿势
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 构建二叉树进行数值数组的去重及优化
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 京东美团研发面经
  • 如何设计一个微型分布式架构?
  • 提醒我喝水chrome插件开发指南
  • 一个JAVA程序员成长之路分享
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 智能网联汽车信息安全
  • HanLP分词命名实体提取详解
  • MyCAT水平分库
  • ​【已解决】npm install​卡主不动的情况
  • ​你们这样子,耽误我的工作进度怎么办?
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #{}和${}的区别是什么 -- java面试
  • #git 撤消对文件的更改
  • #数学建模# 线性规划问题的Matlab求解
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (windows2012共享文件夹和防火墙设置
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)ssm码农论坛 毕业设计 231126
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (黑客游戏)HackTheGame1.21 过关攻略