python核心编程--第十九章

19.2 Tkinter与python编程 python

19.2.1 Tkinger模块:把Tk引入您的程序 编程

要建立并运行您的GUI程序,下面五步是基本的: 框架

1. 导入Tkinter模块 函数

2. 建立一个顶层窗口对象,来容纳您的整个GUI程序 oop

3. 在您的顶层窗口对象上建立全部的GUI模块。 ui

4. 把这些GUI模块与顶层程序相链接 code

5. 进入主事件循环 对象

19.2.2 GUI程序开发简介 事件

一般,组件会有一些相应的行为,例如按钮被按下,或者文本框被写入。这种形式的用户行为被称为事件,而GUI程序对事件所采起的响应动做被称为回调。 图片

用户操做包括按下按钮,移动鼠标等等,全部的这些从系统角度都被看做时间。GUI程序正是由这伴随其始末的整套事件体系所驱动的。这个过程被称做事件驱动处理。

19.2.4 TK组件

组件 描述
Button 按钮。相似标签,但提供额外的功能,例如鼠标掠过、按下、释放以及键盘操做/事件
Canvas 画布。提供绘图功能(直线、椭圆、多边形、矩形);能够包含图形或位图
Checkbutton 选择按钮。一组方框,能够选择其中的任意个(相似HTML 中的checkbox)
Entry 文本框。单行文字域,用来收集键盘输入(相似HTML 中的text)
Frame 框架。包含其余组件的纯容器
Label 标签。用来显示文字或图片
Listbox 列表框。一个选项列表,用户能够从中选择
Menu 菜单。点下菜单按钮后弹出的一个选项列表,用户能够从中选择
Menubutton 菜单按钮。用来包含菜单的组件(有下拉式、层叠式等等)
Message 消息框。相似于标签,但能够显示多行文本
Radiobutton 单选按钮。一组按钮,其中只有一个可被“按下”(相似HTML 中的radio)
Scale 进度条。线性“滑块”组件,可设定起始值和结束值,会显示当前位置的精确值
Scrollbar 滚动条。对其支持的组件(文本域、画布、列表框、文本框)提供滚动功能
Text 文本域。多行文字区域,可用来收集(或显示)用户输入的文字(相似HTML 中的textarea)
Toplevel 顶级。相似框架,但提供一个独立的窗口容器。
咱们来看看第一个GUI的例子:

import Tkinter
top = Tkinter.Tk()
label = Tkinter.Label(top, text = "hello world!")
label.pack()
Tkinter.mainloop()
程序输出:

19.3 Tkinter举例

19.3.2 按钮组件

import Tkinter
top = Tkinter.Tk()
quit = Tkinter.Button(top, text = "hello world!", command = top.quit)
quit.pack()
Tkinter.mainloop()
程序输出:

19.3.3 标签和按钮组件

import Tkinter
top = Tkinter.Tk()

hello = Tkinter.Label(top, text = "hello world!")
hello.pack()

quit = Tkinter.Button(top, text = "quit", command = top.quit, bg = "red",fg = "white")
quit.pack(fill = Tkinter.X, expand = 1)

Tkinter.mainloop()
程序输出:

19.3.4 标签,按钮和进度条组件

虽然整个程序看的有点懂,可是总感受缺乏点什么,就是缺乏点感受:

from Tkinter import *
def resize(ev = None):
    label.config(font = "Helvetica -%d bold" % scale.get())
top = Tk()
top.geometry("250x150")

label = Label(top, text = "hello world!", font = "Helvetica -12 bold")
label.pack(fill = Y, expand = 1)
scale = Scale(top, from_ = 10, to = 40, orient = HORIZONTAL, command=resize)
scale.set(12)
scale.pack(fill = X, expand = 1)

quit = Button(top, text = "QUIT", command = top.quit, activeforeground = "white",
              activebackground = "red")
quit.pack()

mainloop()
程序输出:

19.3.5 偏函数的使用

from functools import partial as pto
from Tkinter import Tk, Button,X
from tkMessageBox import showinfo, showwarning, showerror

WARN = "warn"
CRIT = "crit"
REGU = "regu"

SIGNS = {
    "do not enter" : CRIT,
    "railroad crossing" : WARN,
    "55\nspeed limit" : REGU,
    "wrong way" : CRIT,
    "merging traffic" : WARN,
    "one way" : REGU,
    }

critCB = lambda: showerror("error","error button pressed!")
warnCB = lambda: showwarning("warning","warning button pressed!")
infoCB = lambda: showinfo("info","info button pressed!")

top = Tk()
top.title("road signs")
Button(top, text = "quit", command = top.quit, bg = "red", fg = "white").pack()

MyButton = pto(Button, top)
CritButton = pto(MyButton, command = critCB, bg = "white", fg = "red")
WarnButton = pto(MyButton, command = warnCB, bg = "goldenrod1")
ReguButton = pto(MyButton, command = infoCB, bg = "white")

for eachSign in SIGNS:
    signType = SIGNS[eachSign]
    cmd = "%sButton(text = %r%s).pack(fill = X, expand = True)" %\
          (signType.title(), eachSign,".upper()" if signType == CRIT else ".title()")
    eval(cmd)
top.mainloop()
程序输出:

这个程序很帅!


19.3.6 中级Tkinter范例

GUI文件遍历系统

相关文章
相关标签/搜索