Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么Tkinter getvar()返回Booleanvar的字符串类型?

为什么Tkinter getvar()返回Booleanvar的字符串类型?
EN

Stack Overflow用户
提问于 2020-12-13 01:23:43
回答 2查看 245关注 0票数 1

Tkinter为存储在其小部件中的布尔值提供了BooleanVar类型。但是,在命名BooleanVar上使用getvar方法会返回字符串类型。这对我来说没有任何意义,因为BooleanVar getter应该返回一个布尔值。

你能理解为什么Tkinter会变成这样吗?

下面是一个简短的示例代码,它显示了发生的情况:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# importing tkinter module 
from tkinter import *
  
# creating Tk() variable 
master = Tk() 
  
# Tkinter variables 
boolvar = BooleanVar(master, name ="bool") 
Checkbutton(master, 
            text="check", 
            variable=boolvar,
            command=lambda: printvar()).grid(row=0, sticky=W)
  
# Setting values of variables 
master.setvar(name ="bool", value = False)
  
# getting values of each variables using getvar() method
def printvar():
    print("Value of BooleanVar()", master.getvar(name ="bool"))
    print("Type of BooleanVar()", type(master.getvar(name ="bool")))
mainloop()

它会创建一个带有复选框的窗口。单击复选框后,此输出将打印到终端:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Value of BooleanVar() 1
Type of BooleanVar() <class 'str'>
Value of BooleanVar() 0
Type of BooleanVar() <class 'str'>
Value of BooleanVar() 1
Type of BooleanVar() <class 'str'>
Value of BooleanVar() 0
Type of BooleanVar() <class 'str'>

当然,我可以通过解析字符串来解决这个问题,但对于包含的Python库来说,这似乎不是一种优雅的行为方式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-13 03:51:59

这里发生了一些有趣的事情。

首先,作为Tkinter基础的嵌入式Tcl解释器没有布尔值的概念。它使用值0表示false,并使用任何其他数字表示true。BoolVar通过将内部Tcl变量包含的任何内容转换为TrueFalse,在其get方法中处理此问题。

但是,您并没有调用该变量的get方法。相反,您调用的是getvar,它返回存储在tcl解释器中的未转换的原始值。

使问题更加复杂的是,您没有正确配置Checkbutton。因为您没有定义onvalueoffvalue选项,所以它们缺省为字符串"1“和"0”。

如果您正确地将onvalueoffvalue设置为TrueFalse,并调用变量的get方法而不是使用getvar,您将得到一个正确的布尔值。

或者,如果您想使用getvar,则应该像BoolVar一样,使用内部tkinter函数getboolean将值转换为布尔值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Checkbutton(..., onvalue=True, offvalue=False)
...
def printvar():
    ...
    value = master.tk.getboolean(master.getvar(name="bool"))
    print(f"value: {value} type of value: {type(value)}")
票数 2
EN

Stack Overflow用户

发布于 2020-12-13 01:35:04

要获取该值,可以使用变量本身,而不是获取master实例值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# importing tkinter module 
from tkinter import *
  
# creating Tk() variable 
master = Tk() 
  
# Tkinter variables 
boolvar = BooleanVar(master, name ="bool") 
x = Checkbutton(master, 
            text="check", 
            variable=boolvar,
            command=lambda: printvar()).grid(row=0, sticky=W)
  
# Setting values of variables 
master.setvar(name ="bool", value = False)
  
# getting values of each variables using get() method
def printvar():
    print("Value of BooleanVar()", boolvar.get())
    print("Type of BooleanVar()", type(boolvar.get()))
mainloop()

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Value of BooleanVar() True
Type of BooleanVar() <class 'bool'>
Value of BooleanVar() False
Type of BooleanVar() <class 'bool'>

因此,它将变量的类型显示为boolean。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65271556

复制
相关文章
Python 学习之 Tkinter「上 」
阅读文本大概需要 6.6 分钟 最近在跟着学做一个简单的银行系统,做界面要用到 GUI「 图形用户界面编程 」,所以今天先为大家介绍一下相关的知识,很有趣,大家看完后练下手。 百度百科以及查阅的资料介绍: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 。Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行。 Pytho
Python技术与生活认知的分享
2018/07/03
2.3K0
Python 字符串中返回bool类型的函数集合
字符串中返回bool类型的函数集合 isspace 功能: 判断字符串是否是由一个空格组成的字符串 用法: booltype = string.isspace() -> 无参数可传 ,返回一个布尔类型 注意: 由空格组成的字符串,不是空字符串 : “’!=‘’’ istitile 功能: 判断字符串是否是一个标题类型 用法 booltype = String.istitle() -> 无参数可传, 返回一个布尔类型 注意: 该函数只能用于英文 isupper与islower 功能: isupper判断字
Zkeq
2022/05/18
2.4K0
python tkinter 简单实例
# 1920*1080    表示在屏幕在宽度上上有1920个点, 高度上有1080个点
用户7886150
2020/12/28
2.5K0
软件测试|超好用超简单的Python GUI库——tkinter(五)
在之前,我们介绍了tkinter的button控件,label控件,今天我们介绍一下entry控件,entry控件我们可以理解为界面的内容输入框,实现GUI界面与用户的信息交互,最典型的场景就是我们在登录时需要输入的账号密码。
霍格沃兹测试开发Muller老师
2023/04/10
9150
在Java中为什么不同的返回类型不算方法重载?
方法重载是指在同一个类中,定义了多个同名方法,但每个方法的参数类型或者是参数个数不同就是方法重载。 比如以下 4 个 method 方法就可以称之为方法重载,如下代码所示:
磊哥
2022/01/20
3.4K0
在Java中为什么不同的返回类型不算方法重载?
Python 学习之 Tkinter「上 」
,正好我的知识星球球友:知识星球:Python绿色通道 投稿来了,他的公众号名称「Python梦工厂」点击原文可以查看他的文章。
龙哥
2019/07/30
1.9K0
Python 学习之 Tkinter「上 」
协变返回类型
协变返回类型:子类覆写了父类的一个方法,子类中方法的返回值类型可以是父类方法返回值类型的子类。 示例代码(Java编程思想)如下所示:子类WheatMill覆写了父类Mill的process方法,子类proces方法的返回值Wheat是父类proces方法返回值Grain的子类。
用户7886150
2021/01/30
7560
python笔记:可视化界面写作尝试
故事的起因在于和一个朋友的聊天,他拜托我帮他看看一个系统的操作界面代码,然后我就想啊,能不能干脆我自己来写一个简单的操作界面呢?
codename_cys
2021/03/25
4.6K0
数据库返回的整型数据被偷换成了字符串类型
在实现一个多级菜单功能时,发现 Laravel 从 MySQL 获取的整型数据被转换成了 string 类型, 导致使用 collection filter 无法得到对应的数据。但是并不是在所有机器上都能出现,只有在服务器上才会
码农编程进阶笔记
2021/07/20
6340
数据库返回的整型数据被偷换成了字符串类型[通俗易懂]
在实现一个多级菜单功能时,发现 Laravel 从 MySQL 获取的整型数据被转换成了 string 类型, 导致使用 collection filter 无法得到对应的数据。但是并不是在所有机器上都能出现,只有在服务器上才会
全栈程序员站长
2022/07/12
4210
【类型挑战】获取函数返回类型,难度⭐️⭐️
Dear,大家好,我是“前端小鑫同学”,😇长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~ 知识运用: 认识什么是returntypetype。 题目分析: 题目地址:2-medium-return-type 如上图所示,我们需要设计一个通用了类型工具还提取函数类型的返回类型,功能同内置的ReturnType。 题目解答: 测试用例: 给出的测试用例挺多但是没有特殊需要说明的,我们只需要通过设计的类型工具取出到通过Equal来进行比较即可。 /* _____________ 测试用例 _
前端小鑫同学
2022/12/26
1.2K0
【类型挑战】获取函数返回类型,难度⭐️⭐️
mybatis返回结果类型(resulttype返回list)
这样设置返回类型为resultClass=”java.util.HashMap”,查询时执行queryForList
全栈程序员站长
2022/08/01
5.7K0
Python图形编程探索系列-05-用控
程序有了变数才有了心动的地方,blue sky是我们向往的地方,但是雾霾Hazel挡住了我们的视野,今天又是阴天,但我有了改变。
py3study
2020/01/19
4490
Python图形编程探索系列-05-用控
Tkinter 入门之旅
Tkinter 作为 Python 的标准库,是非常流行的 Python GUI 工具,同时也是非常容易学习的,今天我们就来开启 Tkinter 的入门之旅
周萝卜
2021/11/08
6.3K0
JAVA协变返回类型
协回返回类型表示:在导出类中覆盖基类的方法,可以返回基类方法的返回类型的某种导出类。 看一下例子 class zoo { } class animal { zoo speak() { return new zoo(); } } class tiger extends zoo { } class panda extends animal { @Override tiger speak() { return new tiger()
秋白
2018/05/24
1K0
【Rust 基础篇】Rust Never类型:表示不会返回的类型
Rust是一种以安全性和高效性著称的系统级编程语言,其设计哲学是在不损失性能的前提下,保障代码的内存安全和线程安全。在Rust中,Never类型是一种特殊的类型,它表示一个函数永远不会返回。Never类型在Rust中有着重要的应用场景,例如在处理panic、在一些特殊情况下表示程序不会继续执行等。本篇博客将深入探讨Rust中的Never类型,包括Never类型的定义、使用场景、使用方法以及注意事项,以便读者了解如何在Rust中使用Never类型来表示不会返回的情况。
繁依Fanyi
2023/10/12
4280
函数出错返回的数据类型
返回NULL值有各种弊端,对此有一个比较经典的应对策略,就是应用空对象设计模式(Null Object Design Pattern)。
WindCoder
2020/04/09
2.2K0
父类返回子类类型的函数写法
我们有这么一个类,一看就是要写 Builder 模式。不过由于我们的这个 Event 的类型比较多,因此希望写一个父类,来一个子类感受下:
bennyhuo
2020/02/20
4.8K0
为什么1000==1000返回false,100==100返回true?
这可能是个讨论得较多的话题,但是我觉得它很有趣:为什么1000==1000返回false,100==100返回true?
三哥
2018/12/19
1.2K0
Golang 函数返回类型是接口时返回对象的指针还是值
Interface 是一组抽象方法(未具体实现的方法,仅包含方法名参数返回值的方法)的集合,如果实现了 interface 中的所有方法,即该类型就实现了该接口。
恋喵大鲤鱼
2019/06/14
8.1K0

相似问题

来自Tkinter控件的对象:如何超越StringVar,IntVar,DoubleVar,BooleanVar?

10

TypeError和AttributeError在Tkinter应用程序中创建BooleanVar()对象时

20

GUI等待BooleanVar()更改

12

为什么tkinter的.get()函数要返回空字符串

1115

返回特定字符串的按钮[Tkinter]

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文