tkinter

tkinter

以下写一下关于标准库tkinter的使用。
这个是python的标准的窗口程序的控件库,相当于VB的各种可以画出来的控件了。写窗口程序各种控件少不了,而tkinter则是一个自带的控件库,会用的话用python写窗口程序非常方便。所以是很必要的。

经典的使用说明有:

权威的资料是官方的英文说明文档:
http://vdisk.weibo.com/s/C5R1f8s9EV8NN
http://pan.baidu.com/s/1mg1CmIc
某大人的tkinter教程:
http://blog.csdn.net/jcodeer/article/details/1811440

还有其他的,自己上网找找说不定也有好东西。

我只写一下用到的部分关键的内容。

首先是窗口类Tk。用root=Tk()创建一个新的窗口实例,然后在最后调用root.mainloop(),窗口就自动运行了,常用的方法是root.title(“title”),设定窗口的标题。

其他各种控件在创建时第一个参数都是其窗口容器,比如按钮控件Button,那么bt=Button(root),就创建了一个在root窗口上的按钮了。后面的参数往往不能省略参数名了。比如常用的text,大部分控件都有,表示的是显示的字符串。比如bt=Button(root,text=”button”)就创建了一个显示的字符串为”button”的按钮。各种控件也可以用config方法改变其各种参数设置,但你得知道其参数的名字,这就要查官方资料了。

对于很多控件来说,如果需要可变的输入输出,那么不能像经典的C#或JAVA,直接读写其属性或调用方法。正确的做法是使用封箱变量IntVar()与StringVar()

这两个是什么东西呢?其实就是整数与字符串的对象。比如IntVar()对象,其实就是一个整数,只不过在读写的时候要用set()和get()方法而已。使用封箱的好处是,可以绑定变量。比如你用一般的变量:
a=”button”。然后让bt的text=a,那么以后改变,text也不可能跟着改变吧?如果是a=StringVar(),a.set(“button”),那就不同了,因为a这时是一个对象了。

对于大部分控件来说,都有一个variable参数,可以用来绑定封箱的变量。这样就可以通过变量去读写控件的参数了。这里用到的是标签控件Label与输入框控件Entry的绑定变量参数textvariable,需要绑定为StringVar()。

另一个用到的比较特殊的variable就是单选按钮了。跟C#与JAVA的单选按钮不同,tkinter的Radiobutton不是自动分组的,其分组与访问方法很特别。
首先,其变量variable必须绑定一个IntVar(),这样所有绑定到同一个IntVar()对象的Radiobutton会自动分为同一组,否则就是不同组的。
其次,Radiobutton有一个参数为value。绑定的IntVar()会自动被设定成选择的Radiobutton的value值。于是通过访问IntVar()就知道是哪个Radiobuton被选择了。注意同一组的Radiobutton的value不要设定为同一数值,否则访问时分辨不出是哪个被选择。

tkinter的控件位置是通过类似JAVA的布局管理器的方法实现的,有时不太好定位每一个控件。
这里用的是官方推荐的grid方法。注意用了grid方法就不要用pack方法了,不然布局会大乱。
控件的grid方法很简单,就是通过row,column参数制定控件的哪一行哪一列,如果重复会被覆盖的。每一行与每一列的宽度与高度都是由该行、列的控件的最大宽度、高度决定的,所以可以看到,由于记录玩家的牌的标签比较长,直接把叫分那里的单选按钮的占位也变长了。要解决的话,按说明可以用rowspan与columnspan设定行宽列宽,但是似乎很难用。

而至于各种控件的事件与设置执行的方法,就要去参考官方手册了。最常用的就是Button控件了。
可以用config(command=function)绑定一个没有参数的方法,这是比较简单的。
另一个方法是bind(“”,function)绑定一个有一个参数的方法。而参数就是常见的event,这个做法是绑定事件”“与方法function,那么自然是会传入一个事件参数了。”“指的是鼠标左键单击事件,还有其他各种字符串表示的事件。而通过event可以读取很多信息,比如产生事件的控件Id,发生时间等等。不过一般可以不管参数照用……

tkinter大致就是这些内容了。

顺便记录一下python的几个常用功能,以免太久不用会忘记:

str()方法,把数字,列表等转化为字符串
list()方法,把字符串或其他(元组,迭代器等)转换为列表
len()方法,返回列表,字符串的长度

x[:]=y[:] 简单地把列表x的内容复制成列表y的内容

import string
string.atoi(x) 把字符串x转为整数
string.atof(x) 把字符串x转为浮点数

import random
random.random() 返回一个0到1的随机浮点数
random.choice(x) 从列表x中随机返回一项
random.shuffle(x) 把列表x中的元素全部随机打乱,注意列表x本身是会乱的,如果不想搞乱x,建议先复制一个副本y再打乱y
小贴士:如果想从列表x中随机抽出n项,怎么办呢?很简单,先把x用shuffle打乱,再取前n项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值