消息框:tkinter.messagebox

news2024/11/24 20:48:50

文章目录

  • 一、tkinter 简介
  • 二、tkinter 基础(部件 + 布局管理器)
  • 三、项目实战
    • 3.1、主循环:root.mainloop()
    • 3.2、手动摧毁窗口:root.destroy()
    • 3.3、布局管理器:pack
    • 3.4、布局管理器:grid
    • 3.5、布局管理器:place
  • 四、消息框:tkinter.messagebox
  • 五、滚动文本:tkinter.scrolledtext

一、tkinter 简介

Tkinter 是 Python 标准库中的一个模块,用于创建图形用户界面 (GUI)。 它是最早的也是最常用的 GUI 工具包之一,因其易用性和直接与 Python 绑定而广受欢迎。

  • 基于Tcl/Tk(Tk 是 Tcl 语言开发的跨平台 GUI 工具包)。Tkinter 提供了与 Tk 的接口,使得 Python 程序员能够创建 GUI 应用程序。
  • 跨平台支持:支持在Windows、macOS和Linux上运行,且发行版一致。
  • Tkinter 是 Python 标准库的一部分,无需额外安装。

二、tkinter 基础(部件 + 布局管理器)

  • 根窗口(Root Window):是所有Tkinter应用程序的主窗口,通常由Tk()类实例化。它是其他所有窗口部件的父窗口。
  • 部件(Widgets):是指应用程序中的各种界面元素,是用户与应用程序交互的主要方式。
    • 标签(Label):用于显示文本或图像的静态控件。标签常用于显示提示信息或标题。
    • 按钮(Button):用户可以点击按钮来触发某些动作。可以为按钮设置文本或图像,并指定点击时调用的回调函数。
    • 文本框(Entry):单行文本输入控件,用户可以在其中输入和编辑文本。
    • 文本控件(Text):多行文本输入控件,允许用户输入和编辑多行文本。它支持丰富的文本样式和颜色。
    • 列表框(Listbox):显示列表项的控件,用户可以从中选择一个或多个项目。
    • 复选框(Checkbutton):允许用户选择或取消选择的按钮。常用于表示布尔选项。
    • 单选按钮(Radiobutton):一组选项中只能选择一个的按钮。常用于从多个互斥的选项中选择一个。
    • 框架(Frame):用于组织其他部件的容器。框架可以嵌套,用于创建复杂的布局。
    • 画布(Canvas):强大的绘图区域,用于绘制图形、图像和其他复杂的自定义界面元素。
  • 布局管理器(Geometry Managers):负责组织和排列部件在窗口中的位置。Tkinter提供了几种布局管理器,每种管理器有不同的布局方式。
    • 顺序-布局管理器 pack按照添加顺序将部件放置在窗口中。可以通过side参数指定部件排列的方向(如top、bottom、left、right)。
    • 网格-布局管理器 grid使用行和列来精确定位部件。可以通过row和column参数指定部件的位置。
    • 坐标-布局管理器 place使用x和y坐标来精确定位部件
  • 主循环 root.mainloop():(1)启动Tkinter的主事件循环,使应用程序保持运行并处理所有用户交互(如:鼠标点击、键盘输入等)和窗口更新。(2)没有它,窗口不会响应用户输入或显示任何内容。(3)当用户关闭窗口时,自动结束事件处理循环并关闭程序,而不需要显示调用 root.destroy()。
  • 手动摧毁窗口 root.destroy():用于完全销毁 tkinter 主窗口。它不仅关闭窗口并终止应用程序的运行,包括停止所有与窗口相关的事件处理循环,并清理相关的资源(如:内存或文件句柄)。

三、项目实战

3.1、主循环:root.mainloop()

在这里插入图片描述
点击(右)确定,(右)界面摧毁,(左)界面不会摧毁

import tkinter as tk
from tkinter import messagebox

def close_application():
    messagebox.showinfo("Info", "Closing the application...")

if __name__ == '__main__':
    root = tk.Tk()  # 创建主窗口
    root.title("Simple Tkinter App")  # 设置主窗口标题
    tk.Button(root, text="Click Me", command=close_application).pack(pady=20)  # 添加一个按钮
    root.mainloop()  # 启动主循环

3.2、手动摧毁窗口:root.destroy()

在这里插入图片描述
点击(右)确定,(右)界面摧毁,(左)界面同时摧毁

import tkinter as tk
from tkinter import messagebox

def close_application():
    messagebox.showinfo("Info", "Closing the application...")
    root.destroy()  # 手动关闭窗口并退出程序

if __name__ == '__main__':
	root = tk.Tk()  # 创建主窗口
	root.title("Simple Tkinter App")  # 设置主窗口标题
	tk.Button(root, text="Close", command=close_application).pack(pady=20)  # 添加一个关闭按钮
	root.mainloop()  # 启动主循环

3.3、布局管理器:pack

在这里插入图片描述

import tkinter as tk
from tkinter import messagebox

def submit():
    name = name_entry.get()
    gender = gender_var.get()
    subscribed = subscribe_var.get()

    gender_text = "Male" if gender == 1 else "Female"
    subscribed_text = "Yes" if subscribed == 1 else "No"

    messagebox.showinfo("Information", f"Name: {name}\nGender: {gender_text}\nSubscribed: {subscribed_text}")

if __name__ == '__main__':
	root = tk.Tk()  # 创建主窗口
	root.title("Simple Form with pack()")  # 设置主窗口标题
	
    # 创建部件并使用 pack 布局管理器
	tk.Label(root, text="Name:").pack(anchor='w', padx=10, pady=5)
	name_entry = tk.Entry(root)
	name_entry.pack(padx=10, pady=5)
	
	tk.Label(root, text="Gender:").pack(anchor='w', padx=10, pady=5)
	gender_var = tk.IntVar()
	tk.Radiobutton(root, text="Male", variable=gender_var, value=1).pack(anchor='w', padx=10, pady=2)
	tk.Radiobutton(root, text="Female", variable=gender_var, value=2).pack(anchor='w', padx=10, pady=2)
	
	subscribe_var = tk.IntVar()
	tk.Checkbutton(root, text="Subscribe to newsletter", variable=subscribe_var).pack(anchor='w', padx=10, pady=5)
	
	submit_button = tk.Button(root, text="Submit", command=submit)
	submit_button.pack(pady=10)
	
	root.mainloop()  # 进入主循环

3.4、布局管理器:grid

在这里插入图片描述

import tkinter as tk
from tkinter import messagebox


def submit():
    name = name_entry.get()
    gender = gender_var.get()
    subscribed = subscribe_var.get()

    gender_text = "Male" if gender == 1 else "Female"
    subscribed_text = "Yes" if subscribed == 1 else "No"

    messagebox.showinfo("Information", f"Name: {name}\nGender: {gender_text}\nSubscribed: {subscribed_text}")

if __name__ == '__main__':
    root = tk.Tk()  # 创建主窗口
    root.title("Simple Form")  # 设置主窗口标题
    
    # 创建部件并使用 grid 布局管理器
    tk.Label(root, text="Name:").grid(row=0, column=0, padx=10, pady=5, sticky=tk.W)
    name_entry = tk.Entry(root)
    name_entry.grid(row=0, column=1, padx=10, pady=5)
    
    tk.Label(root, text="Gender:").grid(row=1, column=0, padx=10, pady=5, sticky=tk.W)
    gender_var = tk.IntVar()
    tk.Radiobutton(root, text="Male", variable=gender_var, value=1).grid(row=1, column=1, padx=10, pady=5, sticky=tk.W)
    tk.Radiobutton(root, text="Female", variable=gender_var, value=2).grid(row=1, column=2, padx=10, pady=5, sticky=tk.W)
    
    subscribe_var = tk.IntVar()
    tk.Checkbutton(root, text="Subscribe to newsletter", variable=subscribe_var).grid(row=2, columnspan=3, padx=10, pady=5)
    
    submit_button = tk.Button(root, text="Submit", command=submit)
    submit_button.grid(row=3, columnspan=3, pady=10)

    root.mainloop()  # 进入主循环

3.5、布局管理器:place

在这里插入图片描述

import tkinter as tk
from tkinter import messagebox

def submit():
    name = name_entry.get()
    gender = gender_var.get()
    subscribed = subscribe_var.get()

    gender_text = "Male" if gender == 1 else "Female"
    subscribed_text = "Yes" if subscribed == 1 else "No"

    messagebox.showinfo("Information", f"Name: {name}\nGender: {gender_text}\nSubscribed: {subscribed_text}")

if __name__ == '__main__':
    root = tk.Tk()  # 创建主窗口
    root.title("Simple Form with place()")  # 设置主窗口标题

    # 创建部件并使用 place 布局管理器
    tk.Label(root, text="Name:").place(x=20, y=20, anchor=tk.W)
    name_entry = tk.Entry(root)
    name_entry.place(x=80, y=20, width=200)

    tk.Label(root, text="Gender:").place(x=20, y=60, anchor=tk.W)
    gender_var = tk.IntVar()
    tk.Radiobutton(root, text="Male", variable=gender_var, value=1).place(x=80, y=60, anchor=tk.W)
    tk.Radiobutton(root, text="Female", variable=gender_var, value=2).place(x=140, y=60, anchor=tk.W)

    subscribe_var = tk.IntVar()
    tk.Checkbutton(root, text="Subscribe to newsletter", variable=subscribe_var).place(x=20, y=100, anchor=tk.W)

    submit_button = tk.Button(root, text="Submit", command=submit)
    submit_button.place(x=20, y=140)

    root.geometry("300x200")  # 设置窗口大小
    root.mainloop()  # 进入主循环

四、消息框:tkinter.messagebox

官网:tkinter.messagebox— Tkinter 消息提示
源码: Lib/tkinter/messagebox.py
tkinter.messagebox模块:提供了多种弹出消息框的函数,用于在GUI应用程序中显示信息、警告、错误、提示用户进行确认等。消息框是模态的,将根据用户的选择返回 (True、False、OK、None、Yes、No) 的子集。

在这里插入图片描述

import tkinter as tk
from tkinter import messagebox


def show_message_boxes():
    root = tk.Tk()  # 创建主窗口
    root.withdraw()  # 隐藏主窗口
    root.lift()  # 提升窗口在最前面
    root.attributes('-topmost', True)  # 将窗口保持在最前面
    # root.after(0, lambda: root.attributes('-topmost', False))  # 保证消息框显示后可以被其他窗口覆盖

    messagebox.showinfo("信息", "这是一个信息消息框。")
    messagebox.showwarning("警告", "这是一个警告消息框。")
    messagebox.showerror("错误", "这是一个错误消息框。")

    result = messagebox.askquestion("问题", "这是一个问题消息框。")
    print(f"问题消息框:{result}")

    result = messagebox.askretrycancel("重试或取消", "这是一个重试/取消消息框。")
    print(f"重试/取消消息框:{result}")

    result = messagebox.askokcancel("确认", "这是一个确认消息框。")
    print(f"确认消息框:{result}")

    result = messagebox.askyesno("问题", "这是一个是/否消息框。")
    print(f"是否消息框:{result}")

    result = messagebox.askyesnocancel("问题", "这是一个是/否/取消消息框。")
    print(f"是/否/取消消息框:{result}")
    root.destroy()  # 用于销毁主窗口,从而退出程序。


if __name__ == '__main__':
    show_message_boxes()

五、滚动文本:tkinter.scrolledtext

官网:tkinter.scrolledtext— 滚动文本小部件
源码: Lib/tkinter/scrolledtext.py

tkinter.scrolledtext.ScrolledText:是 tkinter 库中的一个文本小部件,它带有一个内置的滚动条,使得可以方便地处理大量文本。这个组件可以用来创建带有垂直滚动条的文本输入或显示区域。

在这里插入图片描述

import tkinter as tk
from tkinter import scrolledtext

def main():
    root = tk.Tk()  # 创建主窗口
    root.title("ScrolledText 示例")  # 设置窗口标题
    root.geometry("400x300")  # 设置窗口大小

    # 创建ScrolledText小部件
    st = scrolledtext.ScrolledText(root, wrap=tk.WORD, width=40, height=10, font=("Times New Roman", 12))
    st.pack(padx=10, pady=10)  # 将小部件放置在主窗口中,并设置外边距

    # 在ScrolledText中插入初始文本
    st.insert(tk.INSERT, "这是一个带滚动条的文本输入框。你可以在这里输入大量的文本内容,而不会超出显示区域。\n\n" \
                         "如果文本超出显示区域,会自动出现滚动条。")

    # 启动主事件循环
    root.mainloop()

if __name__ == "__main__":
    main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1986343.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ML】transform 之 decoder 及其实现细节

【ML】transform 之 decoder 及其实现细节 1. decoder2. encoder 和decoder 之间是如何处理和传递讯息的?self-attention3. 查询(Query)、键(Key)、值(Value)是三个核心概念及其具体含义和计算方…

轻松应对大量订单:快递批量查询软件大揭秘

在日常生活和工作中,我们经常会遇到需要查询多个快递单号物流信息的情况,无论是电商卖家需要跟踪大量订单,还是消费者想要及时了解自己包裹的运输状态,手动逐一查询都显得既繁琐又低效。今天,我就向大家推荐一款效果非…

如何使用Alist:多网盘管理神器!一站式挂载、集成管理,支持WebDav

在日常生活中,我们或多或少会使用不同的网盘存储和处理各类文件,这往往导致我们的文件管理繁琐且效率低下。 Alist支持将多种不同的网盘服务集成到一个统一的界面中,让你能够轻松地挂载和管理所有文件。 通过Alist,你可以在一个界…

阿里发布“神笔马良版Sora”:寥寥数笔,动画自成

AI视频生成赛道风起云涌,国内外新颖的文生、图生视频产品层出不穷。在各大厂商的“内卷”之下,当下的视频生成模型各方面已经接近“以假乱真”的效果。例如,OpenAI 的 Sora 和国内的 Vidu、可灵等模型,通过利用 Diffusion Transfo…

structuredClone():JavaScript中深拷贝对象的最简单方法

前端岗位内推来了 深拷贝是传递或存储数据时的一项常规编程任务。 浅拷贝:只复制对象的第一层深拷贝:复制对象的所有层级 const obj { name: Tari, friends: [{ name: Messi }] };const shallowCopy { ...obj };const deepCopy dCopy(obj);console.lo…

C++——多态经典案例(二)制作饮品

案例:制作饮品的步骤是差不多一样的,假设都有四步,打开包装Open、煮水Boil、放杯子里面PutInCup、放佐料PutSomething、喝Drink 利用多态,制作茶和咖啡等饮品 分析:定义一个抽象类,纯虚函数包括Open、Boil…

C++(1):构造函数,复制函数和析构函数

引用 ref这里是对i起了一个别名 引用和指针区别区别1.引用直接绑定2.引用必须初始化 auyo a 10;自动匹配a的类型,但是初始化必须给值 内联函数放头文件 不传参形参有默认值 默认形参b有b后面的都必须有默认 函数重载:同名不同参(返回值不能作…

浅学 Pytorch

(一)Dataset Dataset 是一个抽象类,用于表示数据集。它封装了数据的加载和预处理逻辑,使得数据的读取和处理更加灵活和易于管理。在PyTorch中,torch.utils.data.Dataset 是一个基类,用户可以继承并实现自己…

软件渗透测试详细介绍,专业软件测评机构分享

随着信息技术的飞速发展,软件应用已成为我们生活和工作中不可或缺的一部分。然而,与此,信息安全问题也日益凸显,网络攻击的频繁发生让企业和用户面临前所未有的风险。为了更好地保护软件产品的安全性,渗透测试应运而生…

Mysql执行计划(上)

1、执行计划的概念 执行计划是什么:使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。 作用:分析你的查询语句或是表结构的性能瓶颈 语法:Explain SQL语句 执行计划输出内容介绍&#…

记录一次网关无响应的排查

1. 使用jstack pid > thread.txt 打印进 thread.txt 文件里 去观察线程的状态。 我发现,一个线程在经过 rateliter的prefilter后, 先是调用 consume方法,获取到锁。 接着在执行 jedis的 evalsha命令时 一直卡在socket.read()的状态。 发现jedis官…

【iOS】OC关键字总结及底层原理(上)

目录 线程安全相关的关键字atomic&nonatomic 作用域相关的关键字static、extern、const&auto 读写权限相关和指定方法名的关键字内存管理相关的关键字(或方法)1. 引用计数的存储SideTableretain方法源码分析release方法源码分析dealloc方法源码分…

无缝融入,即刻智能[4]:MaxKB知识库问答系统[进一步深度开发调试,完成基于API对话,基于ollama大模型本地部署等]

无缝融入,即刻智能[4]:MaxKB知识库问答系统[进一步深度开发调试,完成基于API对话,基于ollama大模型本地部署等] 1.简介 MaxKB(Max Knowledge Base)是一款基于 LLM 大语言模型的开源知识库问答系统, 1.1 产品优势 开箱即用:支持直接上传文档、自动爬取在线文档,支持文本…

计算机网络 6.3Internet组成6.4Internet地址

第三节 Internet组成 一、基本结构及特点 1.Internet结构类型:分层网络互联群体。 2.主要构成:①主干网;②中间层网;③底层网。 3.结构特点: ①对用户隐藏网间连接的底层节点。 ②不指定网络互联的拓扑结构。 ③…

【时时三省】(C语言基础)数组作为函数参数

山不在高,有仙则名。水不在深,有龙则灵。 ——csdn时时三省 排序为升序-冒泡排序 冒泡排序的思想: 两两相邻的元素进行比较。并且可能得话需要交换 示例: 数组名 数组名是数组首元素的地址 但是有两个例外 1.sizeof(数组名)-数组名表示整个数组-计…

VMware虚拟机上网

一、VMware Network Adapter VMnet8配置 ①打开VMware软件:点击菜单栏→编辑→虚拟网络编辑器 ②点击NAT模式,使用管理员权限对子网IP和网关进行配置 ③子网IP和掩码就是这样,这里可以自行配置 ④点击上图中的NAT设置,配置网关 …

Rider中修改默认文件关联,自定义打开方式

问题描述 想用Qt designer打开.ui文件,但是在Rider中,IDE会默认通过text进行打开 解决方法 1,允许用户将特定的文件类型与一个应用程序关联起来 File -> Settings -> Editor -> File Types -> Recognized File Types下&…

uniapp微信小程序 canvas绘制圆形半透明阴影 createCircularGradient函数不支持透明度部分解决方案

背景 我需要在微信小程序中,用canvas绘制一个圆形钟表,在ui设计图中,有一部分阴影,这里我节选一下: 即深色发黑的部分 canvas通用阴影绘制 由于canvas中并不支持css那样简单的方式为圆形添加阴影或高光&#xff0c…

Spring Boot 默认可以同时处理多少个请求?

微信中阅读,欢迎关注 CodeFit。 创作不易,如果你觉得这篇文章对您有帮助,请不要忘了 点赞、分享 和 关注,为我的 持续创作 提供 动力! 解析 Spring Boot 的请求处理能力 目前,Spring Boot 是 Java 开发中不可或缺的框…

【大模型从入门到精通9】openAI API 提升机器推理:高级策略3

这里写目录标题 理论问题实践问题理论实践实践 理论问题 什么是链式思考推理(Chain of Thought Reasoning),它是如何增强人工智能模型在解决问题任务中的表现的? 链式思考推理提供的透明度如何使用户受益并建立对AI模型的信任&am…