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

10天速通Tkinter库——Day 5:使用config进行OptionMenu美化

在Day3中,我们使用tk.OptionMenu组件做了一个简单的菜单

看起来丑丑的,所以今天尝试对菜单进行美化

1.  OptionMenu 组件参数

老规矩,先看看这个组件可以用的参数,比起其他组件,这个参数真的少得可怜。

class OptionMenu(master: Misc | None,variable: StringVar,value: str,*values: str,command: ((StringVar) -> object) | None = ...
)
  • master 参数指定了该组件所属的父窗口或框架。
  • variable 是一个 StringVar 类型的变量,用于存储当前选中的值。
  • value 是初始选中的值。
  • *values 表示可选的多个值选项。
  • command 是一个可选的回调函数,当选择的值发生改变时会被调用。

可以看到,无法直接对组件进行美化。

2. config 和 configure

在 Tkinter 中,config 和 configure 方法可以设置或获取大量控件的参数,这些参数用于控制控件的外观和行为。

通用参数:

  • activebackground:活动状态下的背景颜色。
  • activeforeground:活动状态下的前景颜色。
  • background:背景颜色。
  • bd:边框宽度。
  • cursor:光标形状。
  • disabledbackground:禁用状态下的背景颜色。
  • disabledforeground:禁用状态下的前景颜色。
  • font:字体设置。
  • foreground:前景颜色。
  • height:控件的高度(以像素为单位)。
  • highlightbackground:高亮背景颜色。
  • highlightcolor:高亮颜色。
  • highlightthickness:高亮边框的厚度。
  • image:要显示的图像。
  • justify:文本对齐方式(left, right, center, justify)。
  • relief:边框样式(sunken, raised, solid, groove, ridged, flat)。
  • selectbackground:选择区域的背景颜色。
  • selectborderwidth:选择边框的宽度。
  • selectforeground:选择区域的前景颜色。
  • state:控件状态(normal, disabled, hidden, active)。
  • takefocus:控件是否可以接收焦点。
  • text:控件的文本内容。
  • textvariable:与控件关联的变量。
  • troughcolor:滑动条槽的颜色。
  • width:控件的宽度(以像素为单位)。

3. OptionMenu主体美化

在这个案例中,我们定义了一个包含三个选项的下拉列表和一个回调函数弹窗

def optionmenu_example(root):def on_option_change(value):method_id = options.index(value) + 1messagebox.showinfo("选择", "选项"+ str(method_id) + ": "+value)# 创建 OptionMenu 的变量,字符串类型options = [" 默认杂交方式 "," 强化杂交方式 ", " 随机杂交方式 "]selected_value = tk.StringVar()selected_value.set(" 杂交方式选择 ")# 创建 OptionMenuoption_menu = tk.OptionMenu(root, selected_value, *options, command=on_option_change,)option_menu.pack(side=tk.TOP,pady=20)

美化第一步:用字符串作为选项值时,尽量让options和默认选项等长,不然这个框会随字符串长短变化。

美化第二步:使用config对下拉列表背景颜色和字体进行设置

    option_menu.config(font=("华文新魏", 29, "bold"),bg="darkslategray",activebackground="gray",fg="limegreen", activeforeground="lime")

 

美化第三步:去边框,有的时候白色边框真的很突兀,所以我一般都会去掉,其实只需要下面这两个设置

borderwidth=0,
highlightthickness=0

美化第四步:美化选项框

我们看到,当时我们对选择图标设置大小(字体尺寸)后,选项框还是默认的,这时候我们只需获取选项,并用config进行同样的设置(保留了白色边框)。

# 获取 OptionMenu 的菜单对象    
menu = option_menu['menu']
# 设置菜单背景颜色
menu.config(bg="darkslategray", fg="lime", font=("华文新魏", 25, "bold"))

 4. 总结

在我们设计组件的时候,我们可以养成好习惯,统一使用config或者configure进行美化,大多数组件都是支持这些参数的,非常的好用。

完整代码

import tkinter as tk
from Day2 import *def optionmenu_example(root):def on_option_change(value):method_id = options.index(value) + 1messagebox.showinfo("选择", "选项"+ str(method_id) + ": "+value)# 创建 OptionMenu 的变量,字符串类型options = [" 默认杂交方式 "," 强化杂交方式 ", " 随机杂交方式 "]selected_value = tk.StringVar()selected_value.set(" 杂交方式选择 ")# 创建 OptionMenuoption_menu = tk.OptionMenu(root, selected_value, *options, command=on_option_change,)# 美化界面option_menu.config(font=("华文新魏", 29, "bold"),bg="darkslategray",activebackground="gray",fg="limegreen", activeforeground="lime",borderwidth=0, highlightthickness=0)# 获取 OptionMenu 的菜单对象menu = option_menu['menu']# 设置菜单背景颜色menu.config(bg="darkslategray", fg="lime", font=("华文新魏", 25, "bold"))option_menu.pack(side=tk.TOP,pady=20)if __name__=="__main__":root = tk.Tk()window_width = 400window_height = 300title_and_icon(root)window_size(root,window_width,window_height)window_location(root,window_width,window_height)root.configure(bg='lightBlue')  # 设置窗口背景颜色为红色optionmenu_example(root)root.mainloop()

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Minio web控制台实现授权管理
  • 使用 nginx 搭建代理服务器(正向代理 https 网站)指南
  • 【Java】—— 使用Java编写程序找出100以内的质数
  • 理解类方法和静态方法:Python 中的高级函数
  • Nginx负载均衡调度状态
  • 哇哦--一起学习接口叭
  • XSS总结知识点+例题实操
  • 探索 HarmonyOS 的层叠布局:灵活的 Stack 容器
  • Vmware WorkStations 17 ,centos 安装 vmware tools
  • FFmpeg的入门实践系列一
  • 序列建模之循环和递归网络 - 渗漏单元和其他多时间尺度的策略篇
  • 帆软报表设计器函数相关问题
  • OLED整体刷新到结合switch刷新方式演变
  • Swin-Transformer论文阅读
  • 打印空心正方形(c语言)
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 4个实用的微服务测试策略
  • 5、React组件事件详解
  • dva中组件的懒加载
  • Fundebug计费标准解释:事件数是如何定义的?
  • MaxCompute访问TableStore(OTS) 数据
  • Promise初体验
  • springMvc学习笔记(2)
  • swift基础之_对象 实例方法 对象方法。
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 第十八天-企业应用架构模式-基本模式
  • 分类模型——Logistics Regression
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 前端面试之闭包
  • 让你的分享飞起来——极光推出社会化分享组件
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 云大使推广中的常见热门问题
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • (14)Hive调优——合并小文件
  • (2)STM32单片机上位机
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (3)llvm ir转换过程
  • (HAL库版)freeRTOS移植STMF103
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (南京观海微电子)——I3C协议介绍
  • (十)c52学习之旅-定时器实验
  • (四)opengl函数加载和错误处理
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)http-server应用
  • (转)创业的注意事项
  • *** 2003
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • /tmp目录下出现system-private文件夹解决方法