tkinter控件样式

news2024/12/23 5:23:50

文章目录

    • 以按钮为例
    • 共有参数
    • 动态属性

tkinter系列:

  • GUI初步💎布局💎绑定变量💎绑定事件💎消息框💎文件对话框💎控件样式
  • 扫雷小游戏💎强行表白神器

以按钮为例

tkinter对控件的诸多属性提供了可定制的功能,下面以最常用的按钮作为示例,集中展示其样式特点,而后再详细给出每种样式所支持的部件类型。

在这里插入图片描述

这里面并不涉及到诸如宽度width,高度height,以及调控与其他部件最小间隔的padx, pady,而只专注于能够体现“样式”的属性。

其绘制代码如下,整体采用pack布局,每一组风格均放在一个Frame中,每个Frame都有一个Label和图像一一对应,然后所有Frame纵向排布下去。

import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()

# 用于设置frame
def setFrame(root, text):
    frm = tk.LabelFrame(root)
    frm.pack(side=tk.TOP, fill=tk.X, expand=tk.YES)
    ttk.Label(frm, text=text, width=10).pack(side=tk.LEFT)
    return frm

pack = dict(side=tk.LEFT, padx=5)

frm = setFrame(root, "按钮状态")
status = {"禁用状态":tk.DISABLED, "普通状态":tk.NORMAL, "活跃状态":tk.ACTIVE}
for i, key in enumerate(status, 2):
    tk.Button(frm, text=key, state=status[key]).pack(**pack)

frm = setFrame(root, '按钮颜色')
tk.Button(frm, text='背景色', bg='blue').pack(**pack)
tk.Button(frm, text='前景色', fg='blue').pack(**pack)
tk.Button(frm, text='鼠标点击改变背景', 
    activebackground='blue').pack(**pack)
tk.Button(frm, text='鼠标点击改变前景', 
    activeforeground='blue').pack(**pack)

frm = setFrame(root, '边框尺寸')
for i in [1,3,5,7,9]:
    tk.Button(frm, text=f'边宽{i}', bd=i).pack(**pack)

frm = setFrame(root, '按钮字体')
fontDct = {'软体雅黑/12/重打印': ('软体雅黑', 10, 'overstrike'),
           '宋体/12/斜体'      : ('宋体', 10, 'italic'),
           '黑体/12/加粗'      : ('黑体', 10, 'bold'),
           '楷体/12/下划线'    : ('楷体', 10, 'underline')}
for key in fontDct:
    tk.Button(frm, text=key, font=fontDct[key]).pack(**pack)

frm = setFrame(root, '文字对齐')
justDct = {'左对齐\n文字左侧对齐'  : tk.LEFT,
           '居中对齐\n文字居中对齐': tk.CENTER,
           '右对齐\n文字右侧对齐'  : tk.RIGHT}
for key in justDct:
    tk.Button(frm, text=key, justify=justDct[key]).pack(**pack)

frm = setFrame(root, '边框样式')
reliefs = {'边框平坦' : tk.FLAT, '边框凹陷' : tk.SUNKEN, 
           '边框凸起' : tk.RAISED, '边框压线' : tk.GROOVE, 
           '边框脊线' : tk.RIDGE}
for key in reliefs:
    tk.Button(frm, text=key, relief=reliefs[key]).pack(**pack)

frm = setFrame(root, '文字样式')
tk.Button(frm, text='文字换行显示', wraplength=30).pack(**pack)
tk.Button(frm, text='文字下划线', underline=2).pack(**pack)
tk.Button(frm, text='横向间距25', padx=25).pack(**pack)
tk.Button(frm, text='纵向间距10', pady=10).pack(**pack)

root.mainloop()

共有参数

下表给出了tkinter控件中常用的三种部件Label, Button, Entry所共有的的属性参数

属性说明
height高度
wideth宽度
bd边框宽度
bg背景颜色
fg前景颜色
relief3D样式
font文字字体
justify文字对齐方式

其中,relief可以选择tk.FLAT、tk.SUNKEN、tk.RAISED、tk.GROOVE、tk.RIDGE,每种3D样式可见上图。

justify可选tk.LEFT, tk.CENTER, tk.RIGHT,对应左中右。

font是一个元组,包括字体、字号以及字体样式三个内容,字体样式可以选择bold, italic, underline, overstrike这四种。

此外,由于Entry中的文字是动态变化的,所以下面三个参数适用于Label和Button,但不适用于Entry

属性说明
text文字
underline下划线
wraplength文字行宽

另一方面,Button和Entry都属于可操作控件,所以都有一个state参数,用以描述控件是否可操作,可选状态有tk.DISABLED、tk.NORMAL以及tk.ACTIVE。

动态属性

在一开始给出的Button参数图中,有鼠标点击改变背景和鼠标点击改变前景这两个按钮,它们对应的属性本质是一种封装好的事件。Button有这种被点击触发的事件;Entry则有选中文字后触发的事件,下面对这几种属性进行演示。

在这里插入图片描述

代码如下,注意用到了上面的setFrame函数。

root = tk.Tk()

frm = setFrame(root, '按钮颜色')
tk.Button(frm, text='鼠标点击背景变红', 
    activebackground='red').pack(**pack)
tk.Button(frm, text='鼠标点击文字变红', 
    activeforeground='red').pack(**pack)

frm = setFrame(root, "Entry颜色")

v1 = StringVar()
v1.set('选中文字后底色为红色')
tk.Entry(frm, textvariable=v1, selectbackground='red').pack(**pack)

v2 = StringVar()
v2.set('选中文字后文字为红色')
tk.Entry(frm, textvariable=v2, selectforeground='red').pack(**pack)

frm = setFrame(root, "Entry边框")

v3 = StringVar()
v3.set('选中文字后选取边框宽度')
tk.Entry(frm, textvariable=v3, selectborderwidth=5).pack(**pack)

v4 = StringVar()
v4.set('聚焦后改变边框尺寸')
tk.Entry(frm, textvariable=v4, highlightthickness=5).pack(**pack)

root.mainloop()

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

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

相关文章

05-Redis

1、Redis为什么快? 1、纯内存操作 2、单线程可以省去多线程时CPU上下文会切换的时间 3、渐进式ReHash、缓存时间戳 数组需要扩容的时候,他会维护两张hash表,比如第一张的数组长度为6,另一张的数组长度为12,在set和g…

JavaScript中的事件循环(event loop)机制

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 调用栈(Call Stack)⭐ 消息队列(Message Queue)⭐ 事件循环(Event Loop)⭐ 宏任务和微任务⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇…

如何取消KEIL-MDK工程中出现的CMSIS绿色图标

如何取消KEIL-MDK工程中出现的CMSIS绿色图标?我以前经常遇到,不知道怎么搞,好像也不影响编译结果。以前问过其他人,但是不知道怎么搞,相信很多人也遇到过。水平有限,表达不清楚,见下图&#xff…

Java 反射调用自己写的对象方法

一、java 反射的定义 定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法,这种动态获取、调用对象方法的功能称为java语言的…

JavaScript 中的原型到底该如何理解?

JavaScript作为一个基于原型的OOP,和我们熟知的基于类的面向对象编程语言有很大的差异。如果不理解其中的本质含义,则无法深入理解JavaScript的诸多特性,以及由此产生的诸多“坑”。在讨论“原型”的概念之前,我们先来讨论一下“类…

APS系统设计经验分享(时间推导II - 2023.09)

在前一篇关于APS系统设计分享文章(《APS系统设计经验分享(时间推导 - 2023.03)》)中,我们提到将会分享使用OptaPlanner作为规划引擎开发APS系统过程中,遇到的一些时间相关的设计建议与异常情况分析。后来一直忙于项目工作,直到现在才想起仍欠…

CSS---flex布局

主要记录flex布局的要点以及实例 flex flex父标签的6个属性flex-direction: flex布局的方向flex-wrap: 是否可以换行flex-flow: flex-direction 和 flex-wrap 一起写justify-content:横向对齐方式align-items: 纵向对齐方式align-content: 有换行情况下的纵向对齐方…

DR IP-SoC China 2023 Day演讲预告 | 龙智Perforce专家解析芯片开发中的数字资产管理

2023年9月6日(周三),龙智即将亮相于上海举行的D&R IP-SoC China 2023 Day,呈现集成了Perforce与Atlassian产品的芯片开发解决方案,助力企业更好、更快地进行芯片开发。 D&R IP-SoC China 2023 Day 是中国首个…

[论文笔记]ESIM

引言 这是经典论文Enhanced LSTM for Natural Language Inference的笔记。 本篇论文文是建立在自然语言推理(Natural Language Inference,NLI)任务上的。提出了简单的通过基于LSTM的序列推理模型效果到达了当时的SOTA水平。同时基于该模型,在局部推理建模层和推理组合层使用了…

三维模型OBJ格式轻量化压缩在大规模场景的加载和渲染的作用分析

三维模型OBJ格式轻量化压缩在大规模场景的加载和渲染的作用分析 OBJ格式是一种常用的三维模型文件格式,它存储了三维模型的几何信息和纹理坐标等相关属性。在大规模场景中加载和渲染三维模型时,OBJ格式的轻量化压缩对于提高性能和效率起到了重要的作用。…

Java多线程(Thread)详解之启动与中断

在我的前一篇博客中直接介绍了Thread的”五种“打开方式:Thread的”五种“打开方式https://blog.csdn.net/qq_45875349/article/details/132644717?spm1001.2014.3001.5501 但是还没有详细的对Thread类进行说明,这篇博客主要对Thread类进行介绍&#x…

软件产品选型测试POC测试怎么做?

软件poc测试 一、基本概述 软件选型测试是在软件采购的前提或采购过程中,通过对待选软件进行测试比对,筛选出适合的软件。通过对候选的软件进行量化或非量化的横向比对测试,为建设单位选择产品、供货方参加投标提供较直接的依据。 二、测试…

现在的校招面试,管你是不是应届生

作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!😄 一、他,上来打我! 【字节】除了MQ解耦发奖,是否还有比MQ更优的解决方案?【字节】…

算法通关村16关 | 堆与滑动窗口问题结合

1. 堆与滑动窗口问题结合 题目 LeetCode239 给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧,你可以看到在滑动窗口内的k个数字,滑动窗口每次只向右移动一位,返回滑动窗口中的最大值。 思路 对于…

css 文字单行多行超出长度后显示 ...

0.超出… 1、单行文本超出 <div class"content">测试数据&#xff1a;css单行文本超出显示省略号--------</div><style> .content{width: 200px;height: 200px;overflow:hidden;white-space: nowrap;text-overflow: ellipsis;-o-text-overflow:el…

linux信号量

通过学习linux的信号量&#xff0c;对linux的信号量进行了编程。

QT(9.4)tcp通信,数据库,opencv,

作业&#xff1a; 1.服务器 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpSocket>//客户端头文件 #include <QMessageBox>//消息对话框头文件 #include <QTcpServer>//服务器头文件 #include <list>…

docker报错解决方法

ERROR: readlink /var/lib/docker/overlay2/l: invalid argument 注意&#xff1a;会清空已有安装 sudo service docker stop sudo rm -rf /var/lib/docker sudo service docker start

LeetCode 热题 100——无重复字符的最长子串(滑动窗口)

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 从s字符串中&#xff0c;去找出连续的子串&#xff0c;使该子串中没有重复字符&#xff0c;返回它的最长长度。 暴力枚举 依次以第一个、第二个、第三个等等为起点去遍历字符串&a…

Python小知识 - Python爬虫进阶:如何克服反爬虫技术

Python爬虫进阶&#xff1a;如何克服反爬虫技术 爬虫是一种按照一定的规则&#xff0c;自动抓取网页信息的程序。爬虫也叫网页蜘蛛、蚂蚁、小水滴&#xff0c;是一种基于特定算法的自动化程序&#xff0c;能够按照一定的规则自动的抓取网页中的信息。爬虫程序的主要作用就是从一…