1. StringVar属于Tkinter下的对象。

2、StringVar的作用

在使用界面编程的时候,有些时候是需要跟踪变量的值的变化,以保证值的变更随时可以显示在界面上。由于python无法做到这一点,所以使用了tcl的相应的对象,也就是StringVar、BooleanVar、DoubleVar、IntVar所需要起到的作用

下面是一个例子,点击button之后,listbox的可选项变成4项,多出一个java选项:

def changeItems():
print cnames.get()
tnames = 'python','TCL','ruby','java'
cnames.set(tnames)

root = Tkinter.Tk()
root.geometry('+400+200')
root.minsize(400,200)
root.title("test")

tnames = 'python','TCL','ruby'
cnames = StringVar()
cnames.set(tnames)
l = Listbox(root, listvariable = cnames,height = 10).grid()

ttk.Button(root,text = "submit",command = changeItems).grid()

root.mainloop()

3.这个例子中,给StringVar变量的赋值使用的是Tuples类型,但是这种类型是不能进行修改的,这会带来了一个问题,就是变量如何被修改呢?

于是将程序进行了修改,初步赋值使用的是一个list,结果出现了。

tnames = ['python','TCL','ruby']
cnames = StringVar()
cnames.set(tnames)
l = Listbox(root, listvariable = cnames,height = 10).grid()
        这段程序执行的结果,listbox中显示的list的第一个是['python',  而第二个是'TCL',  第三个是'ruby']
        这个事情诡异的是,确实是分解成了三段,但是三段包含了list定义所需要的[],字符串的'',以及分割的, !

于是,将程序进行了修改,去掉了字符定义的[],见下面:

tnames = 'python','TCL','ruby'
cnames = StringVar()
cnames.set(tnames)
l = Listbox(root, listvariable = cnames,height = 10).grid()
        结果,程序显示正确

到底这个事情是怎么弄的呢?将代码修改一下,打印几个东西

def changeItems():
print cnames.get()
tnames = 'python','TCL','ruby','java'
cnames.set(tnames)

root = Tkinter.Tk()
root.geometry('+400+200')
root.minsize(400,200)
root.title("test")

tnames = ['python','TCL','ruby']
print tnames.__class__
cnames = StringVar()
cnames.set(tnames)
l = Listbox(root, listvariable = cnames,height = 10).grid()

ttk.Button(root,text = "submit",command = changeItems).grid()

root.mainloop()

执行上面的代码,从控制台中输出了如下的内容:

<type 'list'>
("['python',", "'TCL',", "'ruby']")

这个说明什么呢?StringVar类型调用set函数时,先将变量转变成了tuples类型的数据。所以,实际上最好是调用set函数之前就直接使用Tuples类型的数据,这样或许更好点。

那么怎么实现函数变量的修改呢?其实很简单了,定义一个list,然后将list转换成tuples即可。修改后的函数如下:

def changeItems():
tnames.append('java')
cnames.set(tuple(tnames))

root = Tkinter.Tk()
root.geometry('+400+200')
root.minsize(400,200)
root.title("test")

tnames = ['python','TCL','ruby']
cnames = StringVar()
cnames.set(tuple(tnames))
l = Listbox(root, listvariable = cnames,height = 10).grid()

ttk.Button(root,text = "submit",command = changeItems).grid()

root.mainloop()

TK-StringVar相关推荐

  1. 对于tk.StringVar()理解

    StringVar是Tk库内部定义的字符串变量类型,在这里用于管理部件上面的字符: 这个可以跟踪变量值的变化,普通的python变量不能即时地显示在屏幕上面. StringVar并不是python内建 ...

  2. python3 gui tk代码_【基础】学习笔记30-python3 tkinter GUI编程-实操12

    import tkinter as tk win = tk.Tk() menu = tk.Menu(win)  # 创建顶层菜单 filemenu = tk.Menu(menu, tearoff=0) ...

  3. python tk文本框_python图形界面tk 1.5 文本框(Text box | Entry)

    在tkinter中,文本框被称为Entry #!/usr/bin/env python # -*- coding: utf-8 -*- import tkinter as tk from tkinte ...

  4. python:tkinter —— Tcl/Tk 的 Python 接口

    python:tkinter -- Tcl/Tk 的 Python 接口 架构 Tkinter 模块 Tkinter 拾遗 Hello World 程序 重要的 Tk 概念 了解 Tkinter 如何 ...

  5. python中stringvar的用法_Python tkinter.StringVar方法代码示例

    本文整理汇总了Python中tkinter.StringVar方法的典型用法代码示例.如果您正苦于以下问题:Python tkinter.StringVar方法的具体用法?Python tkinter ...

  6. tk基础--标签、按钮

    本节内容: 明白标签.按钮的使用 实现简单的点击界面 Tkinter 简称tk,在python中属于内置模块,不需要进行安装,可直接引用,import tkinter 一. 首先我们做一个如图所示的图 ...

  7. python中tk窗口刷新_用按钮刷新tk窗口

    这是我让这个脚本工作的唯一方法,否则我会在"self"未定义时出错.有没有其他方法可以在点击刷新时添加函数?在 `class MAIN(object): def __init__( ...

  8. python tk教程_【转】【Python】Tkinter教程

    什么是Tkinter? Tkinter 是 Python 的标准 GUI 库.Python 使用 Tkinter 可以快速的创建 GUI 应用程序. 由于 Tkinter 是内置到 python 的安 ...

  9. python tk模块 小作业

    import tkinter as tk import tkinter.messagebox window=tk.Tk() window.title('简单控制系统') window.geometry ...

  10. python Tk 登录

    我们首先要引入tkinter库和tkinter库中的messagebox import tkinter as tk import tkinter.messagebox import pickle 接下 ...

最新文章

  1. 2014/08/13 – Backbonejs
  2. 什么是HTML5?HTML5发展前景如何?
  3. 林海峰老师python课件密码
  4. 我的C语言可变参数的实现
  5. Java智能卡 技术_java智能卡APDU学习笔记
  6. 【算法分析与设计】经典排序算法实现
  7. SAP License:BCS进阶第三篇-BCS合并过程(一)
  8. mysql不定参数函数_可变参数函数(一)
  9. Mybatis 中经典的 9 种设计模式!面试可以吹牛了!
  10. 机器学习之BP神经网络算法实现图像分类
  11. python如何截长图_python 截长图、H5页面截长图
  12. U盘无法格式化的原因及解决方法
  13. npm install 提示 path .../node_modules/node-sass command failed
  14. 如何通过热点打造爆款笔记?6个好写易爆的热点类型
  15. 项目总结“遇见江小丽”
  16. 【BZOJ2069】ZAW(POI2004)-最短路+二进制分组
  17. 刻意学习:持续行动让你人生逆袭
  18. TSN网络中的Qbu和IEEE 802.3br帧抢占是如何工作的?
  19. 微雪CM4-IO-WIRELESS-BASE 配置
  20. 2021年英语六级作文(附翻译)

热门文章

  1. SAP MM模块常用表总结
  2. 第4章 JavaScript表达式与运算符
  3. 滑动门套滑动门css,JS+CSS实现带小三角指引的滑动门效果
  4. 记一次 .NET 某智能交通后台服务 CPU爆高分析
  5. htc系统Android 7.1,这款HTC太强大,被誉为刷机之王,一路升到安卓7.1
  6. 从头开始,彻底理解服务端渲染原理
  7. php artisan怎么用,php artisan常用方法
  8. java个人博客系统代码下载_java个人博客系统代码
  9. TheFourthJavaText
  10. 当下的事,就是最重要的事,安下心,用良知去处理