注:本文可转载,转载请注明出处:http://www.cnblogs.com/collectionne/p/6885066.html。格式修改未完成。

Tkinter资料

Python Wiki, TkInter

effbot.org,An Introduction to Tkinter

New Mexico Tech Computer Center, Tkinter 8.5 Reference, a GUI for Python

还有更多资料,详情请访问第一个Python Wiki链接。

Tkinter介绍

Python支持多个图形库,例如Qt、wxWidgets,等等。但是Python的标准GUI库是Tkinter。Tkinter是Tk Interface的缩写。Python提供了tkinter包,里面含有Tkinter接口。

开始写程序

要使用Tkinter,首先需要导入Python提供的tkinter模块:

import tkinter as tk

这个语句导入tkinter模块,但为方便,为它定义了一个别名tk。

GUI系统中,普遍有一个控件(widget)的概念。控件就是指按钮、滚动条、文本框这些东西。特殊地,窗口也是一个控件,窗口可以容纳其它控件。在Tkinter中,用Frame类表示窗口。我们的程序可以直接创建一个Frame对象再向里面添加控件,但习惯上会从Frame类派生出Application类(也可以叫其它名字):

class Application(tk.Frame):

接下来我们需要为Application编写构造函数__init__:

    def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.grid()
self.createWidgets()

首先,__init__有两个参数。第一个是self,即Application对象本身。第二个是master,在Tkinter中,一个控件可能属于另一个控件,这时另一个控件就是这个控件的master。默认一个窗口没有master,因此master有None的默认值。

第二行tk.Frame.__init__(self, master)调用Application的父类Frame的__init__函数初始化Application类的Frame类部分。__init__函数的定义如下:

__init__(self, master=None, cnf={}, **kw)

初始化Frame对象。master为Frame的父控件,默认为None;cnf尚不清楚;kw为命名关键字参数,可接受的参数将在后面提到。

因为这里不是直接用对象调用函数,又不是一般意义的创建对象(例如后面的quitButton),而是初始化自身的一部分,因此需要传入self。我们还传入了Application.__init__的master参数,作为Frame.__init__的master。

第三行self.grid(),显示窗口并使用grid布局。grid方法是从Frame继承来的。Tkinter中有一个概念叫布局(layout),就是控件的排列方式。除了grid(),还有pack等布局。

第四行self.createWidgets(),调用后面定义的createWidgets方法。

然后是createWidgets方法的定义:

    def createWidgets(self):
self.quitButton = tk.Button(self, text='Quit', command=self.quit)
self.quitButton.grid()

createWidgets函数的定义就不讲了,只有一个self参数。

第二行self.quitButton = tk.Button(self, text='Quit', command.self.quit),为Application类创建了一个quitButton属性,类型为Button。Button的构造函数如下:

__init__(self, master=None, cnf={}, **kw)

初始化Button对象。master为Button的父控件,默认为None;cnf尚不清楚;kw为命名关键字参数,可接受的参数有text(标准)、command(按钮特有),其它参数将在以后提到。

这里和前面不同,不是初始化自身,而是创建了quitButton属性,因此不需要写Button.__init__(...),而是直接写Button(...),也不需要像前面一样传入self。那为什么还要传入self呢?这个self并不是对应于Button.__init__中的self参数,而是master参数,表示按钮的父控件是窗口!

我们还传入了text和command两个命名关键字参数。text是显示在按钮上的文字,这里为'Quit';command为点击按钮时调用的函数,这里为Frame类的quit函数,quit函数会使程序退出。

第三行,self.quitButton.grid(),和前面一样,显示按钮并使用grid()布局。

然后就轮到创建Application对象了:

app = Application()
app.master.title = 'First Tkinter'
app.mainloop()

第一行app = Application(),创建一个名为app的Application对象。

第二行app.master.title = 'First Tkinter',将窗口的标题设置为'First Tkinter'。当然可能会因为窗口太小,看不见标题。

第三行app.mainloop(),进入主循环。

现在运行你的程序,看看是不是点击Quit按钮就会退出了。当然你也可以通过点击窗口上方的关闭按钮退出。

主循环

GUI程序中有一个主循环(main loop)的概念。用伪代码的形式表现出来,是类似于这样的:

while noQuitCommands:
checkInput()
updateWidgets()
...

主循环会一直执行,直到出现退出请求。在主循环中,会检查用户输入(例如鼠标、键盘等),并更新控件。这里,如果发现鼠标点击了按钮,就会执行按钮的command,而command是Frame.quit,执行command相当于执行了Frame.quit,循环就结束了,控件全部销毁,程序结束。

最终代码

下面是本课的最终代码,配上完整注释:

# 导入tkinter包,为其定义别名tk
import tkinter as tk # 定义Application类表示应用/窗口,继承Frame类
class Application(tk.Frame):
# Application构造函数,master为窗口的父控件
def __init__(self, master=None):
# 初始化Application的Frame部分
tk.Frame.__init__(self, master)
# 显示窗口,并使用grid布局
self.grid()
# 创建控件
self.createWidgets() # 创建控件
def createWidgets(self):
# 创建一个文字为'Quit',点击会退出的按钮
self.quitButton = tk.Button(self, text='Quit', command=self.quit)
# 显示按钮,并使用grid布局
self.quitButton.grid() # 创建一个Application对象app
app = Application()
# 设置窗口标题为'First Tkinter'
app.master.title = 'First Tkinter'
# 主循环开始
app.mainloop()

 

Python Tkinter学习(1)——第一个Tkinter程序的更多相关文章

  1. swift学习:第一个swift程序

    原文:swift学习:第一个swift程序 最近swift有点火,赶紧跟上学习.于是,个人第一个swift程序诞生了... 新建项目

  2. Python 练习冊,每天一个小程序

    Python 练习冊,每天一个小程序 说明:     Github 原文地址: 点击打开链接 Python 练习冊.每天一个小程序.注:将 Python 换成其它语言,大多数题目也试用 不会出现诸如「 ...

  3. Python学习笔记_一个Tkinter示例,使用FileDialog

    为了使用Python进行数据分析,编写一个图形界面,选择一个Excel文件(或CSV),然后进行后续处理. 一.本示例涵盖如下知识点: 1.FileDialog的使用 2.退出程序 3.消息提示框的示 ...

  4. python flask框架学习(二)——第一个flask程序

    第一个flask程序 学习自:知了课堂Python Flask框架——全栈开发 1.用pycharm新建一个flask项目 2.运行程序 from flask import Flask # 创建一个F ...

  5. python新手第一天学习笔记-第一个ptyhon程序和python变量

    一.python 的注释和第一个python 程序 : 1.单行注释 # Author Xiajq 2.多行注释 ''' ------------注释内容----------------------- ...

  6. Spring学习之第一个AOP程序

    IOC和AOP是Spring的两大基石,AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对 ...

  7. JavaWeb学习系列——第一个JavaWeb程序

    创建JavaWeb项目 Eclipse中新建一个Dynamic Web Project 指定项目名称.依赖环境 勾选生成web.xml选项 更改项目编译输出目录,项目右键 ->propertie ...

  8. c++学习笔记---03---从一个小程序说起2

    从一个小程序说起2 要求:编写一个程序,要求用户输入一串整数和任意数目的空格,这些整数必须位于同一行中,但允许出现在该行中的任何位置.当用户按下键盘上的"Enter"键时,数据输入 ...

  9. c++学习笔记---02---从一个小程序说起

    从一个小程序说起 这一讲的主要目的是帮助大家在C语言的背景知识上与C++建立联系. 问题探索 问题:对一个整型数组求和. 要求:定义一个存储着 n 个元素的数组,要求用C语言完成这个任务. 赶紧的:大 ...

随机推荐

  1. LINUX ON AZURE 安全建议(全)

    本文为个人原创,可以自由转载,转载请注明出处,多谢! 本文地址:http://www.cnblogs.com/taosha/p/6399554.html 1.网络与安全规划 Azure 虚拟网络 (V ...

  2. iOS UITableViewCell点击时子视图背景透明的解决方法

    在做iOS项目的开发中,UITableView控件的应用十分广泛.在进行自定义UITableViewCell时,经常遇到这样的问题:在UITableViewCell上面添加了一个有背景颜色的子视图,当 ...

  3. angular中路由的实现(针对新手)

    最近搜了一下网上的教程,看完总感觉有点糊涂,对于新手来说可能云里雾里,所以写一个最简单的路由来给大家做个指引. 首先当然需要准备angular,下载地址:https://angular.io/ 现在a ...

  4. lua table表

    lua table表 语法结构 创建一个 table 直接使用 "{}" 即可 table1 = {} -- 赋值 table1["name"] = " ...

  5. css伪类的组合用法

    利用伪类组合,可以用css代替js以达到目的,少些一下js .textarea:empty:before { display: block; content: '请输入'; color: #ababa ...

  6. 何为代理?jdk动态代理与cglib代理、spring Aop代理原理浅析

    原创声明:本博客来源为本人原创作品,绝非他处摘取,转摘请联系博主 代理(proxy)的定义:为某对象提供代理服务,拥有操作代理对象的功能,在某些情况下,当客户不想或者不能直接引用另一个对象,而代理对象 ...

  7. 【Spark2.0源码学习】-4.Master启动

         Master作为Endpoint的具体实例,下面我们介绍一下Master启动以及OnStart指令后的相关工作   一.脚本概览      下面是一个举例: /opt/jdk1..0_79/ ...

  8. Mahout源码分析:并行化FP-Growth算法

    FP-Growth是一种常被用来进行关联分析,挖掘频繁项的算法.与Aprior算法相比,FP-Growth算法采用前缀树的形式来表征数据,减少了扫描事务数据库的次数,通过递归地生成条件FP-tree来 ...

  9. 【日常】C++ 的那些“坑” —— delete 与 析构函数 与 virtual 的 9 个小例子

    C++中有无数的坑,但毕竟-- 今天就踩到了,也算是基本问题了,记录一下,顺便以后可以考考自己.你也可以猜猜答案,大牛绕行. 0x1 先看这个: #include <stdio.h> #i ...

  10. Linux学习之竿头直上

    今天第二讲昨天我们讲解了10基础命令,今早上我继续为大家讲解10个linux常见命令 今天主要讲解与网络相关的命令和软件安装的命名 NetworkManager 与rpm 在windows中我们查看网 ...