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

【Tkinter系列13/15】标准化外观和选项数据库

27. 标准化外观和选项数据库

可以轻松地将颜色、字体和其他选项应用于 小部件,当您创建它们时。然而

  • 如果您希望很多小部件具有相同的 背景颜色或字体,指定每个都很乏味 每次选项,以及

  • 让用户覆盖您的选择是很好的 他们最喜欢的配色方案、字体和其他选择。

因此,我们使用选项的想法 数据库以设置默认选项值。

  • 应用程序可以指定文件(例如 使用的标准文件 X 窗口系统),其中包含用户的 偏好。您可以将应用程序设置为读取 该文件并告诉 Tkinter 使用这些默认值。看 上文关于 .option_readfile() 方法的部分在 第 26 节 “通用小部件方法”部分,用于 此文件的结构。.Xdefaults

  • 您的应用程序可以直接为一个指定默认值 或使用 .option_add() 方法的多种类型的小部件;请参阅第 26 节 “通用小部件方法”下的此方法。

在我们讨论如何设置选项之前,请考虑问题 一般自定义 GUI 的外观。我们可以 为应用程序中的每个小部件命名,然后询问 用户指定每个名称的每个属性。但是这个 很麻烦,并且还会使应用程序难以 重新配置 - 如果设计器添加新微件,则 用户必须描述每个新属性的每个属性 控件。

因此,选项数据库允许程序员和用户 指定描述的一般模式 要配置的小组件。

这些模式对小部件的名称进行操作,但是 小部件使用两个并行命名 命名方案:

  1. 每个小部件都有一个类名。 默认情况下,类名与类相同 构造函数:用于按钮、框架等。但是,你 可以创建新的小部件类,通常继承 从课堂上,并给他们新的 你自己创作的名字。有关详细信息,请参见第 27.1 节 “如何命名小部件类”。'Button''Frame'Frame

  2. 您还可以为任何小部件提供一个实例 名称。小组件的默认名称为 通常是一个无意义的数字(请参见第 5.11 节 “窗口名称”)。但是,与小部件一样 类,您可以为任何小部件指定名称。请参阅的 第 27.2 节 “如何命名小部件实例”部分了解详细信息。

因此,每个应用程序中的每个小部件都有两个 名称的层次结构 - 类名层次结构和 实例名称层次结构。例如,按钮 嵌入在文本小部件中,该小部件本身嵌入在 框架将具有类层次结构。它可能还有一个实例 层次结构有点像如果你这么命名 所有实例。初始点代表根 窗;有关更多信息,请参见第 5.11 节 “窗口名称” 有关窗口路径名的信息。Frame.Text.Button.mainFrame.messageText.panicButton

选项数据库机制可以使用任一类 定义选项时的名称或实例名称,以便您可以 使选项适用于整个类(例如,所有按钮都有 蓝色背景)或特定实例(例如, 紧急按钮上有红色字母)。在我们看了如何 为了命名类和实例,在第 27.3 节 “资源规范行”中,我们将讨论选项 数据库确实有效。

27.1. 如何命名小部件类

例如,假设这是一个新的 已创建的小组件类。这可能是最好的 让新的小部件类从类继承,所以对 Tkinter 来说,它就像一个框架, 您可以排列其他小部件,例如标签, 条目和其中的按钮。JukeboxFrame

您可以通过传递名称来设置新小部件的类名 作为父级的选项 新类的构造函数中的构造函数。这是一个 定义新类的代码片段:class_

class Jukebox(tk.Frame):def __init__(self, master):'''Constructor for the Jukebox class'''tk.Frame.__init__(self, master, class_='Jukebox')self.__createWidgets()

27.2. 如何命名小部件实例

为特定小部件提供实例名称 应用程序,设置该小部件的选项 到包含名称的字符串。name

下面是实例名称的示例。假设你是 在应用程序中创建多个按钮,并且您希望 实例名称为 .对构造函数的调用可能会 看起来像这样:panicButton

  self.panic = tk.Button(self, name='panicButton', text='Panic', ...)

27.3. 资源规范行

选项文件中的每一行指定一个或 一个或多个应用程序中的更多选项,并且具有 这些格式:

app option-pattern: value
option-pattern: value

仅当名称为 应用程序匹配 ;第二种形式 设置所有应用程序的选项。app

例如,如果您的应用程序称为 xparrot,则表单的行

xparrot*background: LimeGreen

将 Xparrot 应用程序中的所有选项设置为 Lime 绿。(使用选项上的选项 启动应用程序时的命令行以设置 名称到 .)background-name'xparrot'

该部分具有以下语法:option-pattern

{{*|.}name}...option

也就是说,每个都是一个 零个或多个名称的列表,每个名称前面都有 星号或句点。该系列中的姓氏是 您正在设置的选项的名称。其余的每个人都 的名称可以是:option-pattern

  • 小部件的名称(大写),或

  • 实例的名称(小写)。

期权模式的工作方式有点复杂。 让我们从一个简单的例子开始:

*font: times 24

这一行说所有选项 应默认为 24 点倍。这称为松散绑定符号,表示此选项模式适用于任何应用程序中任何位置的任何选项。 比较此示例:font*font

*Listbox.font: lucidatypewriter 14

和之间的周期称为紧 绑定符号,这意味着这个规则 仅适用于微件的选项 在课堂上.ListboxfontfontListbox

再举一个例子,假设你的 xparrot 应用程序有 类的小部件的实例。在 为了为所有设置默认背景颜色 该类的小部件,您可以 在选项文件中放一行,如下所示:JukeboxJukebox

xparrot*Jukebox*background: PapayaWhip

和之间的松散绑定 () 符号使 规则适用于以下任何选项 . 比较此选项行:*JukeboxbackgroundbackgroundJukebox

xparrot*Jukebox.background: NavajoWhite

此规则将应用于构成小部件本身的框架,但由于 紧密绑定符号 它不适用于以下小部件 位于小部件内。JukeboxJukebox

在下一节中,我们将讨论 Tkinter 如何计算 如果存在,请准确列出要使用的选项值 适用的多个资源规范行。

27.4. 资源匹配规则

创建小部件时,未指定 某些选项和两个或多个资源的值 规格适用于该选项,最具体 一个适用。

例如,假设您的选项文件包含这两个 线:

*background: LimeGreen
*Listbox*background: FloralWhite

这两个规范都适用于小部件中的选项,但 第二个更具体,所以它会赢。backgroundListbox

通常,资源规范中的名称是 序列 N 1, N 2, N3, ..., o 其中每个 ni 是一个 类或实例名称。类名的排序自 从最高到最低级别,O 是选项的名称。

但是,当 Tkinter 创建一个小部件时,它所拥有的只是 该小组件的类名和实例名。

以下是资源的优先规则 规格:

  1. 选项的名称必须与 的 o 部分匹配。 例如,如果规则是option-pattern

    xparrot*indicatoron: 0

    这将仅匹配名为 的选项。indicatoron

  2. 紧密绑定运算符()更多 比松散绑定运算符 () 特定。例如,一行比一行更具体 为。.**Button.font*Button*font

  3. 对实例的引用比 对类的引用。例如,如果您有 按钮的实例名称为 ,规则比 的规则。panicButton*panicButton*font*Button*font

  4. 具有更多级别的规则更具体。为 示例,IS 的规则 比 的规则更具体。*Button*font*font

  5. 如果两个规则具有相同数量的级别,则名称 列表中较早的比较较晚的更具体 名字。例如,规则比规则更具体 为。xparrot*font*Button*font

相关文章:

【Tkinter系列13/15】标准化外观和选项数据库

27. 标准化外观和选项数据库 可以轻松地将颜色、字体和其他选项应用于 小部件,当您创建它们时。然而 如果您希望很多小部件具有相同的 背景颜色或字体,指定每个都很乏味 每次选项,以及 让用户覆盖您的选择是很好的 他们最喜欢的配色方案、字…...

springboot 集成dubbo

上一篇我们一起认识了Dubbo与RPC,今天我们就来一起学习如何使用Dubbo,并将Dubbo集成到Spring Boot的项目中。我们来看下今天要使用到的软件及版本: 软件 版本 说明 Java 11 Spring Boot 2.7.13 Spring Boot 3.0版本开始,最…...

基于YOLOV8模型和CCPD数据集的车牌目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要:基于YOLOV8模型和CCPD数据集的车牌目标检测系统可用于日常生活中检测与定位车牌目标,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算…...

net user安全隐患

net user test 123456 /add #添加一个test账户,密码是123456net user test /delete #删除test账户windows administrator权限下删除其他账户,难道不需要知道该账户的密码吗? 以前没太注意,但是这算不算是一个漏洞呢? 另外&#…...

深入剖析Kubernetes之资源模型和GPU 管理

文章目录 资源模型QoS 模型GPU 管理 资源模型 在 Kubernetes 里,Pod 是最小的原子调度单位。这也就意味着,所有跟调度和资源管理相关的属性都应该是属于 Pod 对象的字段。而这其中最重要的部分,就是 Pod 的 CPU 和内存配置,如下所…...

Springboot整合HBase

Springboot整合HBase数据库 1、添加依赖 <!-- Spring Boot HBase 依赖 --> <dependency><groupId>com.spring4all</groupId><artifactId>spring-boot-starter-hbase</artifactId> </dependency> <dependency><groupId>…...

在不同操作系统上如何安装符号表提取工具(eu-strip)

前言 C开发的小伙伴都知道符号表在调试和解决崩溃时扮演着非常重要的角色&#xff0c;那么如何提取和保存发布应用程序的符号表就变得非常重要。今天就来聊一下如何在不同的操作系统上使用eu-strip提取应用程序中的符号表信息。 正文 问题 如何在不同操作系统上安装符号表提…...

钡铼R40边缘计算网关与华为云合作,促进物联网传感器数据共享与应用

场景说明 微型气象是不可预测的&#xff0c;基本上不能通过人工手段来分析其变化&#xff0c;因此必须运用新技术&#xff0c;对气象进行实时监测&#xff0c;以便采取相应的措施来避免或解决事故的发生。而常规气象环境数据采集容易造成数据损失、人力成本高、数据安全性差、…...

图表背后的故事:数据可视化的威力与影响

数据可视化现在在市场上重不重要&#xff1f;这已经不再是一个简单的问题&#xff0c;而是一个不可忽视的现实。随着信息时代的来临&#xff0c;数据已经成为企业和组织的核心资产&#xff0c;而数据可视化则成为释放数据价值的重要工具。 在当今竞争激烈的商业环境中&#xf…...

C++ 信号处理

信号是由操作系统传给进程的中断&#xff0c;会提早终止一个程序。在 UNIX、LINUX、Mac OS X 或 Windows 系统上&#xff0c;可以通过按 CtrlC 产生中断。 有些信号不能被程序捕获&#xff0c;但是下表所列信号可以在程序中捕获&#xff0c;并可以基于信号采取适当的动作。这些…...

电源模块的降额曲线

大家好&#xff0c;这里是大话硬件。 今天想写这篇文章来分享在前段时间了解的一个知识点——电源模块的降额曲线。 为什么要写这个呢&#xff1f;对于专门做电源的同学来说&#xff0c;肯定觉得很简单。但是对于一个非电源行业的人来说&#xff0c;曲线应该如何解读&#xff…...

uni-app 之 安装uView,安装scss/sass编译

uni-app 之 安装uView&#xff0c;安装scss/sass编译 image.png image.png image.png 点击HBuilder X 顶部&#xff0c;工具&#xff0c;插件安装&#xff0c;安装新插件 image.png image.png 安装成功&#xff01; 注意&#xff0c;一定要先登录才可以安装 image.png 1. 引…...

CSS中如何隐藏元素但保留其占位空间(display:nonevsvisibility:hidden)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 隐藏元素但保留占位空间⭐ display: none;⭐ visibility: hidden;⭐ 总结⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&a…...

【rust/egui】(八)使用panels给你的应用划分功能区块

说在前面 rust新手&#xff0c;egui没啥找到啥教程&#xff0c;这里自己记录下学习过程环境&#xff1a;windows11 22H2rust版本&#xff1a;rustc 1.71.1egui版本&#xff1a;0.22.0eframe版本&#xff1a;0.22.0上一篇&#xff1a;这里 panel是啥 panel是ui上的一块区域&…...

QT实现任意阶贝塞尔曲线绘制

bezier曲线在编程中的难点在于求取曲线的系数&#xff0c;如果系数确定了那么就可以用微小的直线段画出曲线。bezier曲线的系数也就是bernstein系数&#xff0c;此系数的性质可以自行百度&#xff0c;我们在这里是利用bernstein系数的递推性质求取&#xff1a; 简单举例 两个…...

【Java 基础篇】Java 数组使用详解:从零基础到数组专家

如果你正在学习编程&#xff0c;那么数组是一个不可或缺的重要概念。数组是一种数据结构&#xff0c;用于存储一组相同类型的数据。在 Java 编程中&#xff0c;数组扮演着非常重要的角色&#xff0c;可以帮助你组织、访问和操作数据。在本篇博客中&#xff0c;我们将从零基础开…...

基于Citespace、vosviewer、R语言的文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…...

docker_python-django_uwsgi_nginx_浏览器_网络访问映过程

介绍 1&#xff1a;介绍docker中使用uwsgi服务器启动django 设置了uwsgi的脚本 2&#xff1a;介绍启动uwsgi后&#xff0c;使用本地浏览器去访问这个容器中的端口 3&#xff1a;分别使用了3个ip地址去访问这个服务 1&#xff1a;使用本地连接*2 2&#xff1a;使用windows系统里…...

Python爬取天气数据并进行分析与预测

随着全球气候的不断变化&#xff0c;对于天气数据的获取、分析和预测显得越来越重要。本文将介绍如何使用Python编写一个简单而强大的天气数据爬虫&#xff0c;并结合相关库实现对历史和当前天气数据进行分析以及未来趋势预测。 1 、数据源选择 选择可靠丰富的公开API或网站作…...

基础算法-递推算法-学习

现象&#xff1a; 基础算法-递推算法-学习 方法&#xff1a; 这就是一种递推的算法思想。递推思想的核心就是从已知条件出发&#xff0c;逐步推算出问题的解 最常见案例&#xff1a; 一&#xff1a;正向递推案例&#xff1a; 弹力球回弹问题&#xff1a; * 弹力球从100米高…...

L1-056 猜数字(Python实现) 测试点全过

前言&#xff1a; {\color{Blue}前言&#xff1a;} 前言&#xff1a; 本系列题使用的是&#xff0c;“PTA中的团体程序设计天梯赛——练习集”的题库&#xff0c;难度有L1、L2、L3三个等级&#xff0c;分别对应团体程序设计天梯赛的三个难度。更新取决于题目的难度&#xff0c;…...

第 361 场 LeetCode 周赛题解

A 统计对称整数的数目 枚举 x x x class Solution { public:int countSymmetricIntegers(int low, int high) {int res 0;for (int i low; i < high; i) {string s to_string(i);if (s.size() & 1)continue;int s1 0, s2 0;for (int k 0; k < s.size(); k)if …...

07-架构2023版-centos+docker部署Canal 实现多端数据同步

canal 工作原理 canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )canal 解析 binary log 对象(原始为 byte 流)基于日志增量订阅和消费的业务包括 数据库镜…...

过滤器的应用-Filter

过滤器 1.工作原理 2.创建Filter 2.1通过注解的方式实现 //创建一个类&#xff0c;实现Filter接口 WebFilter(urlPatterns "/myfilter") //urlPatterns表示需要拦截的路径 public class MyFilter implements Filter {Overridepublic void doFilter(ServletReques…...

leetcode236. 二叉树的最近公共祖先(java)

二叉树的最近公共祖先 题目描述递归法代码演示 上期经典 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q …...

spacy安装旧版本en_core_web_sm的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

Qt +VTK+Cmake 编译和环境配置(第一篇 采坑)

VTK下载地址&#xff1a;https://vtk.org/download/ cmake下载地址&#xff1a;https://cmake.org/download/ 版本对应方面&#xff0c;如果你的项目对版本没有要求&#xff0c;就不用在意。我就是自己随机搭建的&#xff0c;VTK选择最新版本吧&#xff0c;如果后面其他的库不…...

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书南宁师范大学图书馆

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书南宁师范大学图书馆...

C++/C# : C#和C++的不同

C#和C是两种不同的编程语言&#xff0c;虽然在某些方面它们具有相似之处&#xff0c;但它们也有一些明显的不同点&#xff0c;如下&#xff1a; C是一种静态类型编程语言&#xff0c;而C#是一种动态类型编程语言。 C允许开发者手动管理内存的分配和释放&#xff0c;但是C#的垃…...

PCL-直通滤波器原理及实验

文章目录 原理使用过程代码实验总结 原理 直通滤波器的作用是过滤在指定维度方向上取值不在给定值域内的点&#xff0c;即点云数据有xyz三维坐标&#xff0c;选择一个方向的维度的数据&#xff0c;设置一个范围&#xff0c;在这个范围中的点云会被保留&#xff0c;不在此范围内…...