使用Tkinter时遇到的问题

checkbutton组循环值总为最后一个即如果checkbuttons>=2则只有最后一个点击有效

  有个场景是需要将数据库的值拿来用for循环生成一组checkbutton,其中有个问题就是在循环中写的checkbutton点击后获取的值有问题,当checkbutton数大于等于2时,只有最后一个chekcbutton点击后能返回正确的值

  如果是分开写每个checkbutton都声明则无问题。虽然搞不懂为什么,一开始以为是创造出来的变量都是同一个,然后打印了一下发现都是不同的,个人认为和一个个声明无区别,也用过globals()[]来动态声明,结果相同。

 1 from Tkinter import *
 2 def callCheckbutton(state):
 3     print state.get()
 4     print states
 5     print checkbuttons
 6 root = Tk()
 7 texts = ['aaa', 'bbb', 'ccc']
 8 states = []
 9 checkbuttons = []
10 for i in range(len(texts)):
11     state = BooleanVar()
12     states.append(state)
13     cb = Checkbutton(root, text=texts[i], variable=state,
14                 command=lambda:callCheckbutton(state))
15     checkbuttons.append(cb)
16     cb.pack()
17 root.mainloop()
示例

截图:

 

  我的解决方法:

  将每个checkbutton绑定鼠标左键点击方法,在event中有一个event.widget可以获得当前点击的部件,然后和chekcbutton列表以及status列表进行对比

 

Entry输入框得到的值的类型是unicode

  其实这个应该算是数据库问题,在把unicode的值存入到mysql过程中,如果是解码成字符存入,mysql会把\给去掉,再从数据库中拿出来自己加上\会导致没法还原成原来的数据,所以把mysql的库、表和字段用COLLATE utf8mb4_unicode_ci 都改为能接受unicode的值即可或者用Sqlite3数据库,可以直接接受unicode值。

posted @ 2018-08-04 12:13  anixtt  阅读(467)  评论(0编辑  收藏  举报