• python 之一道小题目


    今天组长大人丢来了一道题目,说这里面有错

    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() 

    刚开始看又懵逼了。从来没听说过tkinter

    后来稍微了解了下,是PYTHON中自带的GUI控件。

    短短几句话可以创建出一个窗口来,可比我之前知道的Windows编程简洁多了。

    说实话,看这段代码的时候,我连set是干嘛的都忘了,

    赶紧回看了下廖老师写的set与dict,还有tuple和list

    唉用的太少就是记不住。

    tuple:创建就不可修改,除非里面有个元素是list类型

            用()

    list:可以增删改查,append(加到末尾),pop(删除),insert(插入指定位置),

            用[]

    dict:字典,有key有value,key不可变

           用{}

    set:key的集合,不存在value,要创建一个set,需要提供一个list作为输入集合,例如

         

    >>> s = set([1, 2, 3])
    >>> s
    {1, 2, 3}

          可以remove,add,不会有重复元素

          用()

     接下来看看我修改的代码

    from Tkinter import *
    import ttk
    
    def changeItems():
        print cnames.get()
        tnames=['python','TCL','ruby','java']
        cnames.set(tnames)
    
    root = 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()

    可以运行,但是如图是这样

    怎么多出来那么多个符号,分明就是序列的中括号没有起作用呀

    后来在http://jxdeng04.iteye.com/blog/1798066

    终于找到了答案

    原来是stringvar搞的鬼。

    这个函数使用set后会直接把序列变成元祖,

    我们应该在set之前就要把它变成元祖才对。

    所以修改为

    from Tkinter import *
    import ttk
    
    def changeItems():
        print cnames.get()
        tnames=['python','TCL','ruby','java']
        cnames.set(tuple(tnames))
    
    root = 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()
    View Code

    执行如图

  • 相关阅读:
    数据公钥加密和认证中的私钥公钥
    hibernate数据的三种状态
    寄存器和立即数和内存单元
    三条总线作用
    liunx安装redis和gcc
    Python遍历列表
    String.split()分割字符串方法
    Jmeter教程 录制脚本
    Jemeter压力测试
    Jmeter性能测试
  • 原文地址:https://www.cnblogs.com/pheobe/p/6293818.html
Copyright © 2020-2023  润新知