【Tkinter】终于把StringVar讲明白了

news2024/9/24 23:27:41

文章目录

    • 简介
    • Label使用StringVar
    • Entry输入

简介

初学者在使用tkinter时常犯的一个错误就是

def changeText(evt):
    evt.text = "new Text"

毕竟在创建控件时,text是出现频率很高的参数,换言之,我们会默认控件中有text这个属性,而且这个属性的数据类型是字符串,而且是可以更改的。

然而,这个直觉是错误的,tkinter并没有把text这个属性暴露出来。为了应付对控件的文字内容实时更改的需求,tkinter提供了StringVar这种字符串变量。

import tkinter as tk

root = tk.Tk()
dyTxt = tk.StringVar()
dyTxt.set("点我")
btn = tk.Button(root, width=40, height=10, 
    textvariable=dyTxt, 
    command = lambda: dyTxt.set("啊我被点了"))
btn.pack()
root.mainloop()

其中,dyTxt为可变化的字符串,dyTxt.set即设置字符串内容,textvariable为按钮显示的内容,这个内容是可更改的;command是点击后调用的函数,由于比较简单,这里用了一个lmabda表达式,用于更改点击后的按钮内容。

效果如下

在这里插入图片描述

Label使用StringVar

在最初的案例中,点击按钮让Label的颜色发生了变化,之所以选择这样的操作逻辑,正是因为Labeltext并不能直接更改,但是在讲解完StringVar之后,一切就顺理成章了

root = tk.Tk()
root.geometry("400x150")

txt = tk.StringVar()
txt.set("Label")
label = tk.Label(root,textvariable=txt)
label.grid(row=0,column=0)  #这是一种网格布局方式

def btn_click():
    txt.set("我变了")

btn = tk.Button(root,text="Button",command=btn_click)
btn.grid(row=0,column=1)

root.mainloop()

效果如下

在这里插入图片描述

Entry输入

Tkinter中,Label并不是输入框,而只是个展现的标签,一般来说是不需要更改其内容的。而支持输入操作的控件是Entry,其常规的内容变更方式需要通过deleteset来完成

root = tk.Tk()
root.geometry("400x150")
entry = tk.Entry(root)
entry.grid(row=0,column=0)

def btn_click():
    entry.delete(0, "end")
    entry.insert(0, "最开始的模样")

btn = tk.Button(root,text="Button",command=btn_click)
btn.grid(row=0,column=1)
root.mainloop()

其中,delete(0, "end")表示将内容从0删除到最后;insert(0, xxx)表示将xxx从0位置插入。效果如下

在这里插入图片描述

这个操作也可以用textvariable参数来替代,效果和上面相同,代码如下

root = tk.Tk()
root.geometry("400x150")

txt = tk.StringVar()
entry = tk.Entry(root,textvariable=txt)
entry.grid(row=0,column=0)  #这是一种网格布局方式

def btn_click():
    print(txt.get())
    txt.set("最开始的模样")

btn = tk.Button(root,text="Button",command=btn_click)
btn.grid(row=0,column=1)

root.mainloop()

其中txt.get()可以获取StringVar当前的内容,与set相当于是一对对偶函数。

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

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

相关文章

CDGA/CDGP数据治理认证班将于2/4正式开课,报名从速!

新的一年,从考证开始,为职场竞争增添更多优势! 做数据行业的话,当然推荐考个DAMA-CDGA/CDGP数据管理证书啦! DAMA是全球唯一数据管理方面权威性认证,帮助数据从业者提升数据管理能力。 DAMA认证为数据管理专…

【c语言进阶】文件操作(下)

🚀write in front🚀 📜所属专栏: c语言学习 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对我…

[NOIP2008 提高组] 笨小猴

题目描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设 maxn 是单词中出现次数最多的字母的…

Python 中当前时间表示方法详解

在 Python 中获取当前时间是许多与时间有关的操作的一个很好的起点。一个非常重要的用例是创建时间戳。在本教程中,你将学习如何用 datetime 模块获取、显示和格式化当前时间。我们将学习如何读取当前时间的属性,如年份、分钟或秒。为了使时间更容易阅读…

函数的求导法则——“高等数学”

今天,小雅兰的内容是函数的求导法则,上篇博客我们知道了导数的定义、导数的几何意义及可导与连续关系,这篇博客我们来仔细学习一下求导法则,下面,就让我们进入导数的世界吧 一、函数的和、差、积、商的求导法则 二、反…

Beryl Li 代表 YGG 出席 2023 年世界经济论坛会议

Yield Guild Games(YGG)联合创始人 Beryl Li 代表 YGG 参加了 2023 年 1 月 16 日至 20 日在瑞士达沃斯举行的 2023 年世界经济论坛年会 (WEF23),在全球舞台上分享区块链、通证化、数字资产监管、治理和价值创造的潜力…

C++语法复习笔记-4. C++基本容器

文章目录1.数组声明与定义数组的开闭区间差一错误左闭右开非对称区间原则数组的增删改查一维数组二维数组面向对象的动态数组-vector自动扩容增删改查2. 字符串字符串变量与常量unicode编码字符串指针表示方法指针的表示方法char[]和char* 的区别数组每个值可改指针指向的字符串…

Yann LeCun 新作!大幅超越 MAE,图像语义表示卷出新高度

文|CV酱计算机视觉中,有两种常见的从图像中进行自我监督学习的方法:基于不变性的方法和生成方法。基于不变性的预训练方法优化编码器,使其产生相似的嵌入,用于同一图像的两个或多个视图,其中图像视图通常使…

基于Java+Spring的图书管理系统详细设计和实现

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

【项目精选】基于Web的机票预订系统

文章目录 1 摘 要2 系统相关技术概述2.1 Java web2.2 三大框架SSM2.3 前端框架AngularJS2.4 数据库MySQL2.5 数据库Redis2.6 开发工具Eclipse 3 需求分析3.1 系统实现目标3.2 系统功能分析3.3 系统用列图 4 系统总体设计4.1 软件架构设计4.2 总体功能模块设计4.3 数据库设计4…

python小游戏——怀念经典坦克大战代码

♥️作者:小刘在这里 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放,愿所有的美好&#…

14.集合、泛型、List系列

目录 一.集合类的体系结构 1.1 Collection体系 1.2 Map集合体系 1.3 集合的注意事项 二.泛型 2.1 什么是泛型 2.2 泛型的优点 2.3 泛型可以在哪些地方上定义 2.4 泛型类 2.5 泛型方法 2.6 泛型接口 2.7 泛型通配符 三.Collection集合 3.1 什么是Collection集合 3…

CentOS7没有图形化界面,怎么安装图形化界面

我们在安装CentOS7时,如果选择 “最小化” 安装那么系统就只有命令行界面,但是没有图形化界面,如下图: 解决的完整步骤如下: 1)开启CentOS7并登录root用户(一定要以root用户登录,其…

windows电脑生成ios证书的方法

在uniapp开发进行云打包的时候,打包Ios应用需要p12格式的私钥证书和证书profile文件。无论使用windows电脑,还是mac电脑,生成ios证书,需要苹果开发者账号,假如你还没有苹果开发者账号,你可以参考下文先到苹…

「跨界选手」郭莎莎:我是怎么从服装设计转向智能家居的

作者 | 牧之 编辑 | 小沐 出品 | 智哪儿 zhinaer.cn最近几年,全国各地都在上演智能家居创业热。尤其是很多年轻人,从不同的行业转战而来。他们拥有不同的背景、认知和经验,为智能家居的线下渠道注入了多元活力。而本期「智哪儿」专访的采访对…

vue前端框架课程笔记(四)

目录vue中的内置指令v-textv-htmlv-cloakv-oncev-pre汇总自定义指令全局指令与局部指令使用示例生命周期问题引入生命周期函数简介钩子函数图示过程生命周期函数示例本博客参考尚硅谷官方课程,详细请参考 【尚硅谷bilibili官方】 本博客以vue2作为学习目标&#x…

新公链的加速孵化器有哪些值得期待?

媒体、工程师技术支持、VC、机构投资者,有经验的创业者等。Moonbeam Accelerator团结各方力量,帮助创业者做更好的领导者。 Web3的发展瞬息万变,包括Moonbeam自己也在未知的领域探索。作为区块链创业者,我们都有自己固定的思维和…

【redis6】第十一章(秒杀案例)

计数器和人员记录 秒杀页面 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loo…

RocketMQ5.0.0消息发送

一、消息消息实体类为org.apache.rocketmq.common.message.Message&#xff0c;其主要属性如下。// 消息所属topic private String topic; // 消息Flag&#xff08;RocketMQ不作处理&#xff09;&#xff0c;即&#xff1a;用户处理 private int flag; // 扩展属性 private Map…

零代码实现EDI标准报文转换

在与客户进行沟通的时候&#xff0c;经常有客户对EDI实施很感兴趣&#xff0c;一方面是客户具有相应的IT基础和技术力量&#xff0c;并且后续可能会有更多合作伙伴的EDI接入&#xff0c;因此客户有自主实施的想法&#xff1b;另一方面也可以在一定程度上为企业节约成本。 知行…