Chinaunix首页 | 论坛 | 博客
  • 博客访问: 72091
  • 博文数量: 26
  • 博客积分: 628
  • 博客等级: 中士
  • 技术积分: 315
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-22 11:57
文章分类

全部博文(26)

文章存档

2012年(4)

2011年(19)

2010年(3)

我的朋友

分类: Python/Ruby

2011-04-15 11:02:05


Tkinter编程思想 (这里借用一下java编程思想的译法 -.+)

我已经尝试着通过很多书来学习Tkinter, 并且我发现这玩意远比我想的要难的多.

主要是由于这些书的作者都只是在告诉我tkinter里的一些控件, 但从没说过一些基本的概念. 他们从来不解决怎样用tkinter来思考.

这里只是一些小程序来解释一下tkinter编程思想. 我并不试图罗列所有控件啊, 属性啊, 方法啊, 我也不会写一个tkinter的入门教程, 我只是想告诉你一些tkinter最基本的概念.

注意这里的焦点主要集中在pack上, 而不会讨论grid或replace这些布局方法.


四大基本图形编程任务

当你开发一个图形程序时, 你必须完成四个主要的任务.

1) 你必须确定你的程序应该长成什么样.

2) 你必须确定你的程序应该有什么功能.

3) 你必须将界面上的控件与功能连接起来.

4) 你必须写一点代码来等待用户的输入.


一些图形编程术语

图形编程有一些与上述任务相关的术语.

1) 我们通过调整我们想要显示的控件的布局来完成我们的第一个任务. 控件这个词已经成为了图形化编程接口控件最常见的术语. 控件包括窗口, 按钮, 菜单和菜单项, 图标, 下拉列表, 滚动条等.

2) 完成图形界面上的工作的函数被称为回调处理器, 或事件处理器. 事件主要指输入的事件, 如鼠标点击或键盘按下. 这些函数被称为处理器是因为他们处理了这些事件.

3) 把一个事件处理器和一个控件关联起来, 我们称为绑定. 粗略的说, 一个绑定过程需要三个元素:
   a) 事件类型(如鼠标左键按下等)
   b) 一个控件
   c) 一个事件处理器

比如说, 我们想要把a)一个鼠标左键单击事件绑定在"关闭"按钮上, 并用"closeProgram"这个函数来处理,

4) 一个事件循环来处理用户的输入.


事件循环

你应该看过一些电影, 电影里每个小城镇都会有一个老妇人整天地盯着面前的窗口看. 她看到所有发生在邻里间的事情. 但她看得最多的还是街上走来走去的人们, 这相当无聊. 但在这其中还是有一些有趣的事的, 比如街对面一对刚结婚夫妇的吵架. 当这些有趣的事情发生的时候, 这个老太太会立即把这个新闻告诉警察或她的邻居们.

事件循环跟这个老太太很像. 事件循环会监视所有发生的事件, 大多数事件是引不起它的注意的. 但是一旦它看到了自己感兴趣的事件(也就是此事件有绑定好的处理函数), 那么它会立即调用事件处理函数来处理它.


示例程序

下面这个简单的程序会展示给你图形编程中的这些最基本的东西是如何实现的. 这个程序不使用tkinter或其他的图形编程工具. 它只是在命令行中显示一个菜单, 并处理一个简单的键盘输入. 即使如此, 你也能看到上面提到的四个图形编程的任务.

  1. #----- task 2: define the event handler routines ---------------------
  2. def handle_A():
  3.     print "Wrong! Try again!"

  4. def handle_B():
  5.     print "Absolutely right! Trillium is a kind of flower!"
  6.     
  7. def handle_C():
  8.     print "Wrong! Try again!"

  9. # ------------ task 1: define the appearance of the screen ------------
  10. print "\n"*100 # clear the screen
  11. print " VERY CHALLENGING GUESSING GAME"
  12. print "========================================================"
  13. print "Press the letter of your answer, then the ENTER key."
  14. print
  15. print " A. Animal"
  16. print " B. Vegetable"
  17. print " C. Mineral"
  18. print
  19. print " X. Exit from this program"
  20. print
  21. print "========================================================"
  22. print "What kind of thing is 'Trillium'?"
  23. print

  24. # ---- task 4: the event loop. We loop forever, observing events. ---
  25. while 1:

  26.     # We observe the next event
  27.     answer = raw_input().upper()

  28.     # -------------------------------------------------------
  29.     # Task 3: Associate interesting keyboard events with their
  30.     # event handlers. A simple form of binding.
  31.     # -------------------------------------------------------
  32.     if answer == "A": handle_A()
  33.     if answer == "B": handle_B()
  34.     if answer == "C": handle_C()
  35.     if answer == "X":
  36.         # clear the screen and exit the event loop
  37.         print "\n"*100
  38.         break

  39.     # Note that any other events are uninteresting, and are ignored
阅读(615) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~