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

使用 Tkinter 制作一个进制转换工具,好用!

在平时工作学习当中,我们经常会编写一些简单的 Python GUI 工具,以此来完成各种各样的自动化任务,比如批量处理文件,批量处理图片等等。当我们进行这些工具的编写之时,往往只关注了功能的实现,而忽略了页面的美化,这也使得在人们的眼中,Python 构建的 GUI 程序都是比较 low 的,今天我们先忽略掉功能,着眼于页面的美化,来看看纯 Python 的编写的 GUI 程序也可以很美观!

页面布局

我们首先完成一个基本的 GUI 布局

假设我们想要做一个进制转换的工具,那么大致的布局可以入下图

上图是完全通过 Python 自带的 GUI 库 tkinter 来编写的

部分代码如下

from tkinter import ttk
from tkinter import *class Transform():def __init__(self):self.root = Tk()self.root.title("进制转换工具")self.root.geometry("600x280")self.root.resizable(False, False)self.var = StringVar()self.values = ['2', '8', '10', '16', '32', '36', '58', '62']self.myWidget()self.myLayout()def myWidget(self):self.container = Frame(self.root)# 转换设置区域self.lf_group1 = LabelFrame(master=self.container, text="转换设置")self.cb = Checkbutton(self.lf_group1, text="是否自动转换")self.cb.invoke()self.bt = Button(self.lf_group1, text='转换')self.en = Entry(self.lf_group1, text='warning')# 进制选择区域self.lf_group2 = LabelFrame(master=self.container, text="进制选择")self.lb1 = Label(self.lf_group2, text="请选择待转换的进制")self.cbo1 = ttk.Combobox(master=self.lf_group2,values=self.values)self.cbo1.set(self.values[2])self.lb2 = Label(self.lf_group2, text="请选择转换后的进制")self.cbo2 = ttk.Combobox(master=self.lf_group2,values=self.values,)self.cbo2.set(self.values[0])# 进制输出区域self.txt = Text(master=self.container, height=5, width=50)def myLayout(self):self.container.pack(side=LEFT, fill=BOTH, expand=YES, padx=5)self.lf_group1.pack(fill=X, side=TOP)self.lf_group2.pack(fill=X, pady=10, side=TOP)self.cb.pack(side=LEFT, expand=YES, padx=5, fill=X)self.bt.pack(side=LEFT, expand=YES, padx=5, fill=X)self.en.pack(side=LEFT, expand=YES, padx=5, fill=X)self.lb1.pack(side=LEFT, expand=YES, padx=5)self.cbo1.pack(side=LEFT, expand=YES, pady=5)self.lb2.pack(side=LEFT, expand=YES, padx=5)self.cbo2.pack(side=LEFT, expand=YES, pady=5)self.txt.pack(side=LEFT, anchor=NW, pady=5, fill=BOTH, expand=YES)def run(self):self.container.mainloop()if __name__ == '__main__':trans = Transform()trans.run()

代码并不复杂,布局也是使用的最基本的 pack 方式,整个 GUI 程序虽然看起来比较整齐,但是颜色单调,各个组件也不是十分美观,下面我们就来进行美化

页面美化

我们首先通过手工设置 CSS 的方式来美化页面,这里主要用到了 tkonter 库的 config 属性

首先我们设置背景颜色

self.container.config(bg='#073642')

对于整体 container 容器,我们设置背景色为#073642

接下来再分别设置各个组件的样式

self.lf_group1.config(bg='#073642', fg="white")
self.lf_group2.config(bg='#073642', fg="white")
self.cb.config(bg='#073642', selectcolor='#073642', activebackground='#073642',activeforeground='#073642', fg="white")
self.bt.config(bg="azure3")
self.en.config(highlightbackground="#0b5162", highlightcolor="#0b5162",insertofftime=500, insertontime=500, fg="Gainsboro", insertbackground="Gainsboro",bg="#073642", highlightthickness=2, relief="solid")
self.lb1.config(bg='#073642', activebackground='#073642',activeforeground='#073642', fg="white")
self.lb2.config(bg='#073642', activebackground='#073642',activeforeground='#073642', fg="white")
self.txt.config(insertofftime=500, insertontime=500, fg="Gainsboro", insertbackground="Gainsboro",wrap="none", bg='#073642')

都是通过 config 来设置,对于颜色的选择,可以通过在线的颜色选择器来选择

https://tools.kalvinbg.cn/dev/colorPicker

接下来我们进行下拉框样式的设置,对于下拉框组件,还是有些特殊的

该组件属于 ttk 组件,所以设置样式需要通过主题来进行,代码如下

combostyle = ttk.Style()
combostyle.theme_create('combostyle', parent='alt',settings={'TCombobox':{'configure':{'foreground': 'white','selectbackground': '#073642',  # 选择后的背景颜色'fieldbackground': '#073642',  # 下拉框颜色'background': '#073642',  # 下拉按钮背景颜色"font": 10,  # 字体大小}}})
combostyle.theme_use('combostyle')

这样我们整体 GUI 程序的样式就设置完成了,来看下最终的效果

可以明显看出,颜值那是提升了好几个档次!

使用 ttkbootstrap 美化页面

当然我们还有更加简单有效的美化方法,就是使用 ttkbootstrap 库来进行页面美化

首先通过 pip 安装 ttkbootstrap 库

pip install ttkbootstrap

然后在项目中引用该库

import ttkbootstrap as ttk
from ttkbootstrap.constants import *class MainCreator(ttk.Window):def __init__(self):super().__init__("进制转换工具", themename="solar", resizable=(False, False))  # 设置一个主题

此时当我们完成组件的布局的时候,页面整体风格也就变成了主题solar的样式了,当然我们还是可以为不同的组件添加bootstyle属性来达到更多样式效果

def create_frame(self):"""Create all the frame widgets"""container = ttk.Frame(self)container.pack(side=LEFT, fill=BOTH, expand=YES, padx=5)color_group = ttk.Labelframe(master=container, text="转换设置", padding=10)color_group.pack(fill=X, side=TOP)self.cb = ttk.Checkbutton(color_group, text="是否自动转换", variable=self.cbvar)self.cb.invoke()self.bt = ttk.Button(color_group, text='转换', bootstyle='success')self.en = ttk.Entry(color_group, text='warning', bootstyle='warning')self.cb.pack(side=LEFT, expand=YES, padx=5, fill=X)self.bt.pack(side=LEFT, expand=YES, padx=5, fill=X)self.en.pack(side=LEFT, expand=YES, padx=5, fill=X)cr_group = ttk.Labelframe(master=container, text="进制选择", padding=10)cr_group.pack(fill=X, pady=10, side=TOP)values = ['2', '8', '10', '16', '32', '36', '58', '62']cr3 = ttk.Label(cr_group, text="请选择待转换的进制")cr3.pack(side=LEFT, expand=YES, padx=5)self.cbo1 = ttk.Combobox(master=cr_group,values=values,)self.cbo1.pack(side=LEFT, expand=YES, pady=5)self.cbo1.set(values[2])cr5 = ttk.Label(cr_group, text="请选择转换后的进制")cr5.pack(side=LEFT, expand=YES, padx=5)self.cbo2 = ttk.Combobox(master=cr_group,values=values,)self.cbo2.pack(side=LEFT, expand=YES, pady=5)self.cbo2.set(values[0])self.txt = ttk.Text(master=container, height=5, width=50, wrap="none")self.txt.pack(side=LEFT, anchor=NW, pady=5, fill=BOTH, expand=YES)

最终效果如下:

可以看出,使用该库的整体效果还是要比我们手工添加 CSS 样式要更加美观,同时也更加便捷!

好了,这就是今天分享的全部内容,我们下次再见~

相关文章:

使用 Tkinter 制作一个进制转换工具,好用!

在平时工作学习当中,我们经常会编写一些简单的 Python GUI 工具,以此来完成各种各样的自动化任务,比如批量处理文件,批量处理图片等等。当我们进行这些工具的编写之时,往往只关注了功能的实现,而忽略了页面…...

Final Cut 视频剪辑快速入门,小白上手视频课的制作

本文是一个快速入门教程,如果您是0视频处理基础,又想录制网课或是一些对效果要求不高的视频那么这篇教程足够使用了。 本文主要用Final Cut处理视频课,本文是笔者在制作视频课过程中逐渐摸索的,如果您想制作一些比较专业的视频&a…...

分布式定时任务Xxl_Job详细使用手册

看了很多网上的版本,思路描述的都不是很清晰,都只是几步操作就完成了,看效果,导致容易走入弯路(不排除是自己理解能力把),最开始以为是把admin模块集成到项目,后来测试了会&#xff…...

【PostgreSQL】表操作-修改表

【PostgreSQL】表操作快速链接 创建表及基础表命令 修改表 表权限 添加列 ALTER TABLE products ADD COLUMN description text;新列最初填充给定的任何默认值DEFAULT(如果未指定子句,则为 null)。 注意: 从 PostgreSQL 11 开始…...

【Java系列】文件操作详解

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【Java系列专栏】【JaveEE学习专栏】 本专栏旨在分享学习JavaEE的一点学习心得,欢迎大家在评论区交流讨论💌 目录 …...

docker-compose 安装 RocketMq

目录 1、rocketMq 官网 2、工作流程 RocketMQ集群工作流程​ 1. 启动NameServer​ 2. 启动 Broker​ 3. 创建 Topic​...

【心得】PHP反序列化高级利用(phar|session)个人笔记

目录 ①phar反序列化 ②session反序列化 ①phar反序列化 phar 认为是java的jar包 calc.exe phar能干什么 多个php合并为独立压缩包,不解压就能执行里面的php文件,支持web服务器和命令行 phar协议 phar://xxx.phar $phar->setmetadata($h); m…...

MyBatisPlus之增删改查

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 MyBatisPlus之增删改查 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、什么是Mybati…...

pytorch03:transforms常见数据增强操作

目录 一、数据增强二、transforms--Crop裁剪2.1 transforms.CenterCrop2.2 transforms.RandomCrop2.3 RandomResizedCrop2.4 FiveCrop和TenCrop 三、transforms—Flip翻转、旋转3.1RandomHorizontalFlip和RandomVerticalFlip3.2 RandomRotation 四、transforms —图像变换4.1 t…...

blob文件流前端显示pdf

首先请求需要修改 responseType: ‘blob’, 需要修改 请求头 {responseType: blob,url: url,method: get,}三种方法: 1.直接处理,在新页面打开 const blob new Blob([data],{ type:application/pdf }) let url window.URL.createObjectURL(blob) wi…...

Android 接入第三方数数科技平台

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、数数科技平台是什么?二、使用步骤1.集成SDK2. 初始化3. 发送事件和设置账号id4. 验证发送事件是否成功 小结 前言 一个成熟的App必然不可缺少对…...

LVM和磁盘配额

一:LVM概述: LVM 是 Logical Volume Manager 的简称,译为中文就是逻辑卷管理。 能够在保持现有数据不变的情况下,动态调整磁盘容量,从而提高磁盘管理的灵活性 /boot 分区用于存放引导文件,不能基于LVM创建…...

uni-app uni-app内置组件

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…...

C语言——格式说明符前面加修饰符

在C语言中,格式说明符前面可以添加一些修饰符来控制输出或输入的格式,主要包括宽度、精度、左对齐标志和前缀填充字符等。 1. 宽度(Width) %[width]type:这里的width是一个非负整数,表示输出字段的最小宽度…...

实验室(检验科)信息系统LIS源码,客户端:WPF+Windows Forms

lis系统源码,医学检验信息系统源码 LIS系统(Laboratory Information System)即实验室(检验科)信息系统,它将检验仪器付出的检验数据与相关信息接入计算机网络系统中,让患者、实验室、临床科室、…...

有道翻译web端 爬虫, js

以下内容写于2023-12-28, 原链接为:https://fanyi.youdao.com/index.html#/ 1 在输入框内输入hello world进行翻译,通过检查发出的网络请求可以看到翻译文字的http接口应该是: 2 复制下链接最后的路径,去js文件中搜索下: 可以看到这里是定义了一个函数B来做文字的翻译接口函数…...

uni-app API接口扩展组件(uni-ui)

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…...

信息化和数字化的本质区别是什么?

信息化和数字化是两个概念的区别 它们有什么区别和联系呢?信息化:“业务数据化”,先让业务流程能被数据记录下来。信息化“业务数据化”。数字化:“数据业务化”,用已累积的业务数据去反哺优化业务流程。数字化“数据…...

发表《Nature》!美国研究团队发布可编程逻辑量子处理器

​(图片来源:网络) 近期,美国研究团队开发了一款可编程的逻辑量子处理器,并展示了可靠且可扩展的量子计算所需的关键要素,该成果已发表于《Nature》期刊(doi:10.1038/s41586-023-06…...

CISSP 第1章:实现安全治理的原则和策略

作者:nothinghappend 链接:https://zhuanlan.zhihu.com/p/669881930 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 CIA CIA 三性: 机密性:和数据泄露有关。完整性…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC&#xf…...

高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。

2024 年,高端封装市场规模为 80 亿美元,预计到 2030 年将超过 280 亿美元,2024-2030 年复合年增长率为 23%。 细分到各个终端市场,最大的高端性能封装市场是“电信和基础设施”,2024 年该市场创造了超过 67% 的收入。…...

「Java基本语法」变量的使用

变量定义 变量是程序中存储数据的容器,用于保存可变的数据值。在Java中,变量必须先声明后使用,声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例:声明与初始化 public class VariableDemo {publi…...

(12)-Fiddler抓包-Fiddler设置IOS手机抓包

1.简介 Fiddler不但能截获各种浏览器发出的 HTTP 请求,也可以截获各种智能手机发出的HTTP/ HTTPS 请求。 Fiddler 能捕获Android 和 Windows Phone 等设备发出的 HTTP/HTTPS 请求。同理也可以截获iOS设备发出的请求,比如 iPhone、iPad 和 MacBook 等苹…...

Razor编程中@Helper的用法大全

文章目录 第一章:Helper基础概念1.1 Helper的定义与作用1.2 Helper的基本语法结构1.3 Helper与HtmlHelper的区别 第二章:基础Helper用法2.1 无参数Helper2.2 带简单参数的Helper2.3 带默认值的参数2.4 使用模型作为参数 第三章:高级Helper用法…...