python GUI编程(一)

图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。

interface  界面,接口,交界面

Tkinter模块已经在python中内置,所以在使用前直接导入即可,两种导入方式: 
import tkinter as tk—-导入tkinter,但没有引入任何组件,在使用时需要使用tk前缀,如需要引入按钮,则表示为:tk.Button 
from tkinter import *—-将tkinter中的所有组件一次性导入。

构建和运行GUI程序的步骤

-导入tkinter模块 
-创建一个顶层窗口 
-在顶层窗口的基础上构建所需的GUI模块和功能 
-将每个模块与底层代码关联起来 
-执行主循环

tkinter主要的组件及组建的属性、集合管理方法
主要组件
Button 按钮控件;在程序中显示按钮。 
Canvas 画布控件;显示图形元素如线条或文本 
Checkbutton 多选框控件;用于在程序中提供多项选择框 
Entry 输入控件;用于显示简单的文本内容 
Frame 框架控件;在屏幕上显示一个矩形区域,多用来作为容器 
Label 标签控件;可以显示文本和位图 
Listbox 列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户 
Menubutton 菜单按钮控件,由于显示菜单项。 
Menu 菜单控件;显示菜单栏,下拉菜单和弹出菜单 
Message 消息控件;用来显示多行文本,与label比较类似 
Radiobutton 单选按钮控件;显示一个单选的按钮状态 
Scale 范围控件;显示一个数值刻度,为输出限定范围的数字区间 
Scrollbar 滚动条控件,当内容超过可视化区域时使用,如列表框。 
Text 文本控件;用于显示多行文本 
Toplevel 容器控件;用来提供一个单独的对话框,和Frame比较类似 
Spinbox 输入控件;与Entry类似,但是可以指定输入范围值 
PanedWindow PanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。 
LabelFrame labelframe 是一个简单的容器控件。常用与复杂的窗口布局。 
tkMessageBox 用于显示你应用程序的消息框。
 

标准属性
Dimension 控件大小; 
Color 控件颜色; 
Font 控件字体; 
Anchor 锚点; 
Relief 控件样式; 
Bitmap 位图; 
Cursor 光标;

几何管理
Tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,一下是Tkinter公开的几何管理类:包、网格、位置 
几何方法 描述 
pack() 包装; 
grid() 网格; 
place() 位置;
 

注意
Tk使用了一种包管理所有的组件当定义完组件之后,需要调用pack()方法来控制组件的显示方式,若不调用pack()方法,组件将不会显示 
在交互环境下,编写Tkinter测试代码时,运行过Tk()之后即进入主循环,可以看到顶层窗口,而若运行py文件,一定要调用mainloop()方法进入主循环,方可拷打顶层窗口 
顶层窗口也称为根窗口,包括一个标题栏和窗口管理器和窗口装饰部分,一个Tkinter开发的应用程序中,值需要创建一个顶层窗口,并且此窗口必须建立其他窗口建立之前
 

创建GUI应用程序窗口代码的模块

from Tkinter import 
tk=TK() 
… 
tk.mainloop()

 

Label组件常用参数
height 组件高度 
width 组件宽度 
fg 前景字体颜色 
bg 背景颜色 
justify 多行文本的对齐方式,可选参数有:LEFT、CENTER、RIGHT 
padx 文本左右两侧的空格数 
pady 文本上下两侧的空格数 

框架(Frame)

框架相对于其他组件而言,它只是个容器,因为它没有方法,但它可以捕获键盘和鼠标的事件来进行回调 
框架一般用作包含一组空间的主体,且可以制定外观 

1.Label 控件

示例1:

#!/user/bin/env python

import Tkinter
top=Tkinter.Tk()     #进行实例化,创建顶层窗口
label=Tkinter.Label(top,text='Hello World!')
label.pack()
Tkinter.mainloop()            #一般这是程序运行的最后一段代码;加入服务

 

按钮(Button)

按钮可以禁用,如果将按钮放在 TAB群里,就可以使用TAB键来进行跳转和定位

Button组件参数
height 组件高度 
width 组件宽度 
fg 前景字体颜色 
bg 背景颜色 
activebackground 按钮按下时的背景颜色 
avtiveforeground 按钮按下时前景颜色 
justify 多行文本的对齐方式,可选参数:LEFT、CENTER、RIFGT 
padx 文本左右两侧的空格数(默认为1) 
pady 文本上下两侧的空格数(默认为1) 
state 设置组件状态,默认为NORMAL,可设置为:DISABLED–禁用组件
 

2.Button 控件

#!/user/bin/env python

import Tkinter
top=Tkinter.Tk()
quit=Tkinter.Button(top,text='Hello World!',command=top.quit)   

 #Tkinter.quit()方法,该参数会给按钮安装一个回调函数,当按钮被按下(并且释放)后,整个程序就会退出。
quit.pack()
Tkinter.mainloop()


3.Label 和Button控件

#!/user/bin/env python
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

 #fill参数告诉Packer让QUIT按钮占据剩余的水平空间,而expand参数则会引导它填充整个水平可视空间,将按钮拉伸到左右窗口边缘。

Tkinter.mainloop()
 

4.Label、Button和Scale控件

#!/usr/bin/env python

from Tkinter import *

def resize(ev=None):
    label.config(font='Helvetica -%d bold' % \
        scale.get())

#resize()回调函数,该函数会依附于Scale控件。当Scale控件的滑块移动时,这个函数就会被激活,用来调整Label控件中的文本大小。

top = Tk()
top.geometry('250x150')

#定义顶层窗口的大小为250*150

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)

#Scale滑块用来控制Label控件中中文字体大小的工具

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

#activebackground 按钮按下时的背景颜色 ;avtiveforeground 按钮按下时前景颜色 
quit.pack()

mainloop()

 

输入框(Entry)

可以为输入框设置默认值,也可以禁止用户输入,当用户输入的内容一行显示不下的时候,输入框自动生成滚动条 

Entry组件常用参数
height 组件的高度 
width 组件的宽度 
fg 前景字体颜色 
bg 背景颜色 
show 将Entry框中的文本替换为制定字符,用于输入密码等,如设置show=“*” 
state 设置组件状态,默认为NORMAL,可设置为:DISABLED–禁用组件,READONLY–只读
 

5.偏函数应用示例

#!/usr/bin/env python

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)
#简单地说:%r是repr,而%s是str;也就是说用%r的占位符将显示带引号的字符串,而用%s的占位符显示的是字符串的内容

top.mainloop()

补充:

(1)占位符%r和%s:
例:

>>> str = 'Hello, world!'
>>> print '%s' % str
Hello, world!   # 不带引号
>>>print '%r' % str
'Hello, world!' # 带引号的字符串

 (2) 

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值