tkinter是python中可用于构建gui的众多工具集之一。
以上代码可以显示一个空白的根窗口。可以将其看成是应用程序的最外层容器,创建其他插件(widget)的时候就需要用到它。如果关闭屏幕上的窗口,则相应的窗口对象就会被销毁。所有的应用程序都只有一个主窗口;此外,还可以通过toplevel这个小插件来创建额外的窗口。
tkinter小插件包括button, canvas, checkbutton, entry, frame, label, listbox, menu, message, menubutton, text, toplevel等。
在python中字符串、整数、浮点数以及布尔值都是不可变的,于是tkinter自带了一些类型;他们可以就地更新,并可以在其值发生变化时通知相关的插件。
tkinter中的可变类型
不可变类型
可变类型
int
intvar
string
stringvar
bool
booleanvar
double
doublevar
顾名思义,视图用于把信息显示给用户;模型则只是存储数据;控制器则可以更新应用程序的模型,并进而出发相应的视图发生变化。
如下例子实现点击按钮之后标签上的计数增加:
如果我们不仅希望能增加counter的值,还希望能降低它的值。则我们需要添加另一个按钮和另一个控制器函数。代码如下:
上述实现代码看起来有点傻,<code>click_up</code>和<code>click_down</code>做的事情看起来几乎是一样的,应该将它们合成一个。这时,我们应该显示的把counter传递给函数,而不是使用全局变量。
tkinter要求由按钮(以及别的插件)出发的控制器函数不能含有参数,目的就是为了以同一种方式去调用它们。我们要做的事情就是:对这个带有两个参数的函数进行处理,使其变成一个不带参数的函数。
一个好一点的做法是使用lambda函数,它使我们能够创建一个没有名字的单行函数。
这段代码分别为两个按钮创建了一个不带参数的lambda函数,这两个lambda函数会将正确的值传进click。
控制布局,就可以使用pack,也可以使用grid,但是不能两者都用。
可以使用rowspan和columnspan设置插件所占据的行数,默认为1。
几乎所有真实的gui都是以类和对象来建造的:他们讲模型、视图和控制器一起放到一个干净整洁的包(package)中。例如下面的计数器函数,其模型是counter类的一个名为<code>self.state</code>的成员变量,其控制器是<code>upclick</code>和<code>quitclick</code>方法。
参考资料:
《python编程实践》
《practical programming an introduction to computer science using python》
转载:http://blog.csdn.net/foreverling/article/details/44902547