当你想写大一点的程序的时候,将你的代码封装到一个或者多个类里会是一个不错的办法。下面'hello world'这个例子来自Matt Conway的Tkinter Life Preserver.

  1. from Tkinter import *
  2. class App:
  3. def __init__(self, master):
  4. frame = Frame(master)
  5. frame.pack()
  6. self.button = Button(
  7. frame, text="QUIT", fg="red", command=frame.quit
  8. )
  9. self.button.pack(side=LEFT)
  10. self.hi_there = Button(frame, text="Hello", command=self.say_hi)
  11. self.hi_there.pack(side=LEFT)
  12. def say_hi(self):
  13. print "hi there, everyone!"
  14. root = Tk()
  15. app = App(root)
  16. root.mainloop()
  17. root.destroy() # optional; see description below

当你运行程序时,会出现下面的窗口。

如果你点击右边的按键, “hi there, everyone!” 将会输出在控制台。 如果你点击左边的按键,程序就会终止。

程序讲解:

这个简单的程序是用类写的. 构造器 (__init__ 方法) 接受一个主窗口作为参数(root), 然后创建了几个子控件。 构造器首先创建了一个 Frame控件。frame是一个简单的容器,在这个例子中,他仅仅用来防止其它2个控件。

class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()

我们通过Frame类创建一个实例,并把它保存为实例的局部变量 frame. 之后,我们对其使用pack方法使其可见。

然后我们创建2个Button,作为frame的子控件。

self.button = Button(frame, text="QUIT", fg="red", command=frame.quit)
self.button.pack(side=LEFT) self.hi_there = Button(frame, text="Hello", command=self.say_hi)
self.hi_there.pack(side=LEFT)

这一次我们通过关键字参数的形式给构造函数船体几个参数。 第一个button的text属性为“QUIT”,并设置前景色为红色。第一个button的text属性为“Hello”.。这两个Button的command选型也都设置了参数。这个选项用来设置一个函数或者绑定的方法,当button被点击时,相应的函数或者方法就会调用。

这两个button实例作为实例属性存储。他们都使用pack方法,但这次还使用了 side=LEFT参数。这意味着他们将会被尽可能的放置在frame的左边; 第一个button会被放在frame的左边,第二个button会紧贴着第一个button放置。一般来说,控件被放置的位置都是相对于他们的主控件而言的。如果没有指定side选项,默认为side=TOP.

“hello” button 的回调函数如下所示。当用鼠标点击button时,它至是简单的想控制台输出一行信息:

def say_hi(self):
print "hi there, everyone!"

最后,我们写一些代码创建 Tk root 窗口, 并把它作为参数传递给App类,它会成为其它控件的父窗口。

root = Tk()

app = App(root)

root.mainloop()
root.destroy()

调用 mainloop 使Tk进入事件循环, 当点击QUIT或者关闭窗口时程序才会终止。

destroy只有你在特殊的环境下运行这个例子才需要;当时间循环被终止的时候,它会明确的释放这个窗口。 一些开发环境只有调用这个方法才会终止Python进程。

Python TK编程第一部分 Hello Again的更多相关文章

  1. 少儿编程:python趣味编程第一课

    本文仅针对8-16岁的青少年,所以流程是按如何去教好中小学生走的,并不适合成人找工作学习,因为进度也是按照青少年走的 大家好,我是C大叔,从事少儿编程行业三年有余(2016年从事少儿编程行业,少儿编程 ...

  2. Python 中的 TK编程

    可爱的 Python:Python 中的 TK编程 http://www.ibm.com/developerworks/cn/linux/sdk/python/charm-12/ python che ...

  3. Python 编程第一步

    Python  编程第一步 在前面的教程中我们已经学习了一些 Python3 的基本语法知识,下面我们尝试来写一个斐波纳契数列. # Fibonacci series: 斐波纳契数列 # 两个元素的总 ...

  4. python核心编程一书笔记之第一篇

    #!/usr/bin/env python# -*- coding:utf-8 -*- #env 是一个命令用来寻找系统中的python解释器.第二条解释使用utf-8编码 在类unix系统中允许py ...

  5. Python GUI 编程

    Python GUI编程(Tkinter) Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的 ...

  6. Python GUI编程(Tkinter) windows界面开发

    Python实现GUI简单的来说可以调用Tkinter库,这样一般的需求都可以实现,显示简单的windows窗口代码如下: python_gui.py 1 #!C:\Python27\python.e ...

  7. python GUI编程tkinter示例之目录树遍历工具

    摘录 python核心编程 本节我们将展示一个中级的tkinter应用实例,这个应用是一个目录树遍历工具:它会从当前目录开始,提供一个文件列表,双击列表中任意的其他目录,就会使得工具切换到新目录中,用 ...

  8. Python黑客编程2 入门demo--zip暴力破解

    Python黑客编程2 入门demo--zip暴力破解 上一篇文章,我们在Kali Linux中搭建了基本的Python开发环境,本篇文章为了拉近Python和大家的距离,我们写一个暴力破解zip包密 ...

  9. Python学习(22)python网络编程

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

随机推荐

  1. HTML5新标签与特性---新表单+新属性----综合案例1

    HTML5新标签与特性 兼容性问题 (ie9 以上的版本) 文档类型设定 document HTML: sublime 输入 html:4s XHTML: sublime 输入 html:xt HTM ...

  2. [转]Doing more with Outlook filter and SQL DASL syntax

    本文转自:https://blogs.msdn.microsoft.com/andrewdelin/2005/05/10/doing-more-with-outlook-filter-and-sql- ...

  3. 【Servlet】JavaWeb应用的执行流程

    Tomcat与Servlet简介 Tomcat Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.S ...

  4. 记录C#泛型

    常见的泛型类型 泛型类 class MyClass<T> { //...... } 泛型接口 interface GenericInterface<T> { void Gene ...

  5. vue-router Uncaught (in promise) NavigationDuplicated 错误

    使用 vue-router 编程式实现页面跳转 this.$router.replace({ path: '/pub' }); 出现错误如下图 原因:vue-router 在 3.1 版本之后把 th ...

  6. adb的常见命令和异常报错操作

    adb连接状态 adb devices , 获取设备列表及设备状态 设备的状态有 3 种 device , 设备连接正常 offline , 设备离线,连接出现异常 unauthorized 设备为进 ...

  7. golang数据结构和算法之LinkedList链表

    差不多自己看懂了,可以自己写测试了.:) LinkedList.go package LinkedList //"fmt" type Node struct { data int ...

  8. 原生表格table

    1).table{         width: 100%;//让表格里面的内容充满整个区域        border-collapse:collapse; 去掉html表格之table间的空隙} ...

  9. 19.Java基础_封装概念

  10. 第十三周博客作业 <西北师范大学| 周安伟>

    第十三周助教作业 助教博客链接https://home.cnblogs.com/u/zaw-315/ 本周点评作业数量无 本周点评困难的博客作业无 本周工作情况制作实验七 团队作业3的千帆图和成绩排名 ...