精通Python——GUI编程学习

GUI的Python实现

1 实现

Tkinter是Python的默认GUI库。它基于Tk工具包,该工具包最初是为工具命令语言设计的。Tk 普及后,结合 Tk 的 GUI 开发的可移植性与灵活性,可以让你快速开发和实现很多与商业软件品质相当的 GUI 应用。

让 GUI 程序启动和运行起来需要以下 5 个主要步骤。
1.导入 Tkinter 模块(或 from Tkinter import *)。
2.创建一个顶层窗口对象,用于容纳整个 GUI 应用。
3.在顶层窗口对象之上构建所有的 GUI 组件。
4.通过底层的应用代码将这些 GUI 组件连接起来。
5.进入主事件循环。

import tkinter

top = tkinter.Tk()                              #(小写k)顶窗口
label = tkinter.Label(top,text='Hello GUI')     #控件
label.pack()                                    #布局
top.mainloop()                                  #无限循环

解释:

Tkinter.Tk()返回的对象通常称为根窗口,GUI 程序中可以有多个顶层窗口,但是其中只能有一个是根窗口。

顶层的根窗口对象包含组成 GUI 应用的所有小窗口对象。它们可能是文字标签、按钮、列表框等。这些独立的 GUI 组件称为控件。

Tk 有 3 种布局管理器来帮助控件集进行定位。 Placer:管理器就会将其摆放好;Packer:往行李箱中填充行李的过程;Grid:基于网格坐标

2 控件

  • 控件可以独立存在,也可以作为容器存在。如果一个控件包含其他控件,就可以将其认为是那些控件的父控件。

Frame容器

import tkinter

top = tkinter.Tk() #(小写k)顶窗口
frame = tkinter.Frame()
label = tkinter.Label(frame,text='Hello GUI')#控件
label.pack()#布局
frame.pack()
top.mainloop()#无限循环

其他容器:LabelFrame,Toplevel

  • 通常,控件有一些相关的行为,比如按下按钮、将文本写入文本框等。这些用户行为称为事件,而 GUI 对这类事件的响应称为回调。
import tkinter

def buttonAction(event):                           #事件处理函数(event)
    print(event.x, event.y)

top = tkinter.Tk() #(小写k)顶窗口
frame = tkinter.LabelFrame()
button = tkinter.Button(frame, text='这是一个按钮')
button.bind('<Button-1>', buttonAction)            #绑定事件
button.pack()
frame.pack()
top.mainloop()#无限循环

解释:

控件.bind('<事件代码>',event_handler)        #适用于大多数控件。此外还有bind_all方法。

控件.protocal('事件代码', event_handler)    #这种情况的控件,必需是顶层窗口或者root容器。

常用事件:

鼠标事件:
Event 	        Description
<Button-1> 	鼠标左键
<Button-3> 	鼠标右键
<Button-2> 	鼠标中键
<Button-4> 	鼠标向上滚动
<Button-5> 	鼠标向下滚动
<Double-Button-1> 	鼠标左键双击
<Double-Button-3> 	鼠标右键双击
<Double-Button-2> 	鼠标中键双击
<Triple-Button-1> 	鼠标左键三击
<Triple-Button-3> 	鼠标右键三击
<Triple-Button-2> 	鼠标中键三击
<B1-Motion> 	左键移动
<B3-Motion> 	右键移动
<B2-Motion> 	中键移动
<ButtonRelease-1> 	释放鼠标左键
<ButtonRelease-3> 	释放鼠标右键
<ButtonRelease-2> 	释放鼠标中键
<Enter> 	鼠标光标进入控件时触发
<Leave> 	鼠标光标离开控件时触发
键盘事件:
Event 	Description
<Key> 	响应所有的按键(按下)
<KeyRelease> 	响应所有的按键(松开)
<FocusIn> 	控件或控件的子空间获得键盘焦点.
<FocusOut> 	控件丢失键盘焦点 (焦点移动到另一个控件).
<Return>/<Enter> 	只有回车键响应
<Escape> 	esc键
<space> 	空格键
<Tab> 	        Tab键
<Up>/<Down>/<Left>/<Right> 	上下左右键
<Shitf_L>/<Shift_R> 	        左右Shift键(类似有左右两个键的, 添加_L/_R区分)
<BackSpace> 	           退格
<a>/<b> 	           指定的小写字母键
<A>/<Z> 	           指定的大写字母键
<Control-Alt-a> 	   组合键(可识别任意组合键)

作者:TitanCoder
链接:https://www.jianshu.com/p/6f88eff109e8

enent_handler事件响应的参数:

Tk

Tkinter Event Field

Tk

Tkinter Event Field

%f

focus

%A

char

%h

height

%E

send_event

%k

keycode

%K

keysym

%s

state

%N

keysym_num

%t

time

%T

type

%w

width

%W

widget

%x

x

%X

x_root

%y

y

%Y

y_root

  • 具体控件介绍:

1)button控件

Button ( master, option=value, ... )
master: 按钮的父容器。
options: 可选项,即该按钮的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。

属性:
activebackground 当鼠标放上去时,按钮的背景色
activeforeground 当鼠标放上去时,按钮的前景色
text 按钮的文本内容
font 文本字体
bd   按钮边框的大小,默认为 2 个像素
bg   按钮的背景色
fg   按钮的前景色(按钮文本的颜色)
padx 按钮在x轴方向上的内边距(padding),是指按钮的内容与按钮边缘的距离
pady 按钮在y轴方向上的内边距(padding)
height   按钮的高度
width    按钮的宽度,如未设置此项,其大小以适应按钮的内容(文本或图片的大小)
command  按钮关联的函数,当按钮被点击时,执行该函数
relief   边框样式,设置控件3D效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT。
state    设置按钮组件状态,可选的有NORMAL、ACTIVE、 DISABLED。默认 NORMAL。
anchor   锚选项,控制文本的位置,默认为中心
image    按钮上要显示的图片
justify  显示多行文本的时候,设置不同行之间的对齐方式,可选项包括LEFT, RIGHT, CENTER
underline        下划线。默认按钮上的文本都不带下划线。取值就是带下划线的字符串索引,为 0 时,第一个字符带下划线,为 1 时,前两个字符带下划线,以此类推
wraplength       限制按钮每行显示的字符的数量
highlightcolor   要高亮的颜色
import tkinter
import tkMessageBox
 
def helloCallBack():
   tkMessageBox.showinfo( "弹窗", "Hello !")

top = tkinter.Tk()
B = Tkinter.Button(top, text ="点我", command = helloCallBack)
B.pack()
top.mainloop()

2)Entery

属性:
bg    输入框背景颜色 	
bd    边框的大小,默认为 2 个像素	
fg    文字颜色。值为颜色或为颜色代码,如:'red','#ff0000'
font     文本字体
cursor   光标的形状设定,如arrow, circle, cross, plus 等
width    文本框宽度
justify  显示多行文本的时候,设置不同行之间的对齐方式,可选项包括LEFT, RIGHT, CENTER
relief   边框样式,设置控件3D效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT。
show     指定文本框内容显示为字符,值随意,满足字符即可。如密码可以将值设为 show="*"
state    默认为 state=NORMAL, 文框状态,分为只读和可写,值为:normal/disabled
textvariable       文本框的值,是一个StringVar()对象
selectbackground   选中文字的背景颜色
selectborderwidth  选中文字的背景边框宽度
selectforeground   选中文字的颜色
exportselection    在输入框中选中文本,默认会复制到粘贴板,如果要忽略这个功能刻工艺设置 exportselection=0。
highlightcolor     文本框高亮边框颜色,当文本框获取焦点时显示
xscrollcommand     设置水平方向滚动条,一般在用户输入的文本框内容宽度大于文本框显示的宽度时使用。

常用方法:
get()  获取文件框的值
delete ( first, last=None )  删除文本框里直接位置值
index ( index ) 返回指定的索引值
nsert ( index, s ) 向文本框中插入值,index:插入位置,s:插入值
select_clear()  清空文本框

 

1.3 布局

top.pack() #自适应的布局方案
top.grid() #网格布局方案
top.place() #按坐标的布局方案

1) pack布局的参数:

ipadx  水平方向上的内边距
ipady  垂直方向上的内边距
padx 水平方向上的外边距
pady 垂直方向上的外边距
after       将组件置于其他组件之后
before  将组件置于其他组件之前
anchor组件的对齐方式,顶对齐’tk.N’,底对齐'tk.S’,左'tk.W',右'tk.E' ,中间'tk.CENTER',
side组件在主窗口的位置,可以为’top’,’bottom’,’left’,’right’;
fill 填充方式 (tk.Y垂直填充,tk.X水平填充,tk.BOTH为两边填充,None为不填充)
expand1可扩展,0不可扩展

2) grid布局的参数

sticky    #对齐方向(tk.N上,tk.W右,tk.S下,tk.E左)
column #组件所在的列起始位置;
columnspan  #组件的列宽(占用的列数);
row #组件所在的行起始位置;
rowspan #组件的行宽(占用的行数);

tk.Label.grid(row =0,column=0,sticky=tk.E)
tk.Button.grid(row =1,column=1)

3) place布局的参数

anchor #组件对齐方式,同上;
x  #组件左上角的x坐标;
y   #组件左上角的y坐标;
relx #组件相对于窗口的x坐标,应为0-1之间的小数;
rely   #组件相对于窗口的y坐标,应为0-1之间的小数;
#可以同时使用相对坐标和绝对坐标,此时组件为在相对坐标的基础上作绝对坐标的偏移
width  #组件的宽度;
height #组件的高度;
relwidth  #组件相对于窗口的宽度,0-1之间;
relheight  #组件相对于窗口的高度,0-1之间;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值