Python GUI之tkinter(一)

图形用户界面(Graphical User Interface,GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。Python提供了多个图形开发界面的库,几个常用的库如下:

  1. tkinter
  2. wxPython
  3. Jython

这里主要介绍Python的tkinter库。thinker是Python的标准GUI库。由于tkinter是内置到Python的安装包中的,只要安装好Python之后就能加载tkinter库。对于简单的图形界面使用tkinter可以轻松完成。

首先看一个例子

from tkinter import *  # 加载tkinter模块

win = Tk()   # 创建以win为句柄的窗口
win.title(string="古诗鉴赏")
Label(win, text="山气日夕佳,飞鸟相与还。").pack()
Button(win, relief=RIDGE, borderwidth=6, text="关闭", command=win.quit).pack(side="bottom")
win.mainloop()   # 开始窗口事件循环

运行结果

  • 认识tkinter控件
tkinter控件
控件名称说明
Button按钮控件:在程序中显示按钮
Canvas画布控件:用来画图形,如线条、多边形等
Checkbutton多选框控件:用于在程序内提供多项选择
Entry输入控件:定义一个简单的文字输入字段
Frame框架控件:定义一个窗体,以作为其他控件的容器
Label标签控件:定义一个文字或是图片标签
Listbox列表框控件:此控件定义一个下拉方块
Menu菜单控件:定义一个菜单栏、下拉菜单和弹出菜单
Menubutton菜单按钮控件:用于显示菜单项
Message消息控件:定义一个对话框
Radiobutton单选按钮控件:定义一个单选按钮
Scale范围控件:定义一个滑动条,来帮助用户设置数值
Scrollbar滚动条控件:定义一个滚动条
Text文本控件:定义一个文本框
Toplevel此控件与Frame控件类似,可以作为其他控件的容器。但是此控件有自己的最上层窗口,可以提供窗口管理接口

 常用操作:(为了方便演示,此处在一个窗口中完成)

from tkinter import *
win = Tk()
# 创建一个文字与边框距离为20像素的按钮,padx='',command(动作),text(标题文字)
Button(win, padx=20, text="关闭", command=win.quit).pack()
# 边框控件,borderwidth,relief
Button(win, relief=RIDGE,borderwidth=6, text="关闭", command=win.quit).pack()
# 设置鼠标指针的类型,cursor=""
Button(win, cursor="crosshair", text="关闭", command=win.quit).pack()
# 定义Button、Label或Text的高度和宽度height,width
Button(win, height=3, width=10, text="关闭", command=win.quit).pack()
# 定义一个背景颜色为绿色的文字标签background
Label(win, background="#00ff00", text="大漠孤烟直,长河落日圆。").pack()
# 设置文字标签的字体,font
Label(win, font=("细明体", 20, "bold italic underline"), text="举杯邀明月,对影成三人。").pack()
# 设置文本的颜色,foreground
Label(win, foreground="#ff0000", text="海上生明月,天涯共此时。").pack()
win.mainloop()
  •  几何位置的设置

tkinter控件都可以使用下列方法来设置控件在窗口内的几何位置。

  1. pack():将控件放置在父控件内之前,规划此控件在区块内的位置
  2. grid():将控件放置在父控件内之前,规划此控件成一个表格类型的架构
  3. place():将控件放置在父控件的特定位置

pack()方法依照其内的属性设置,将控件放置在Frame控件(窗体)或者窗口内,有下列选项

  1. expand:此选项让控件使用所有剩下的空间。如此当窗口改变大小时,才能让控件使用多余空间。如果expand等于1,当窗口 改变大小时窗体会占满整个窗口剩余的空间。如果expand等于0,当窗口改变大小时窗体保持不变。
  2. fill:此选项决定控件如何填满parcel的空间,可以是X、Y、BOTH或者NONE,此选项必须在expand等于1时才有作用。当fill等于X时,窗体会占满整个窗口X方向剩余的空间。当fill等于Y时,窗体会占满整个窗口Y方向剩余的空间。当fiil等于BOTH时,窗体会占满整个窗口的剩余空间。当fill等于NONE时,窗体保持不变。
  3. ipadx,ipady:此选项与fill选项共同使用,来定义窗体内的控件与窗体边界之间的距离。此选项的单位是像素,也可以是其他测量单位,如厘米、英寸等。
  4. padx,pady:此选项定义控件放置的位置。此选项的单位是像素、也可以是其他测量单位,如厘米、英寸等。
  5. side:此选项定义控件放置的位置,可以是TOP(靠上对齐)、BOTTOM(靠下对齐)、LEFT(靠左对齐)、RIGHT(靠右对齐)。

使用pack()方法创建窗体与按钮

from tkinter import *
# 主窗口
win = Tk()
# 第1个窗体
frame1 = Frame(win, relief=RAISED, borderwidth=2)
frame1.pack(side=TOP, fill=BOTH, ipadx=10, ipady=10, expand=0)
Button(frame1, text="Button 1").pack(side=LEFT, padx=10, pady=10)
Button(frame1, text="Button 2").pack(side=LEFT, padx=10, pady=10)
Button(frame1, text="Button 3").pack(side=LEFT, padx=10, pady=10)
# 第2个窗体
frame2 = Frame(win, relief=RAISED, borderwidth=2)
frame2.pack(side=BOTTOM, fill=NONE, ipadx='1c', ipady='1c', expand=1)
Button(frame2, text="Button 4").pack(side=RIGHT, padx='1c', pady='1c')
Button(frame2, text="Button 5").pack(side=RIGHT, padx='1c', pady='1c')
Button(frame2, text="Button 6").pack(side=RIGHT, padx='1c', pady='1c')
# 第3个窗体
frame3 = Frame(win, relief=RAISED, borderwidth=2)
frame3.pack(side=LEFT, fill=X, ipadx='0.1i', ipady='0.1i', expand=1)
Button(frame3, text="Button 7").pack(side=TOP, padx='0.1i', pady='0.1i')
Button(frame3, text="Button 8").pack(side=TOP, padx='0.1i', pady='0.1i')
Button(frame3, text="Button 9").pack(side=TOP, padx='0.1i', pady='0.1i')
# 第4个窗体
frame4 = Frame(win, relief=RAISED, borderwidth=2)
frame4.pack(side=RIGHT, fill=Y, ipadx='10p', ipady='10p', expand=1)
Button(frame4, text="Button 10").pack(side=BOTTOM, padx='10p', pady='10p')
Button(frame4, text="Button 11").pack(side=BOTTOM, padx='10p', pady='10p')
Button(frame4, text="Button 12").pack(side=BOTTOM, padx='10p', pady='10p')
# 开始窗口的事件循环
win.mainloop()

运行结果

 

grid()方法将控件依照表格的栏列方式来放置在窗体或者窗口内,有下列选项

  1. row:设置控件在表格中的第几列
  2. column:设置控件在表格中的第几栏
  3. columnspan:设置控件在表格中合并栏的数目
  4. rowspan:设置控件在表格中合并列的数目

使用grid()创建5x5安你有数组

from tkinter import *
# 主窗口
win = Tk()
# 创建窗体
frame = Frame(win, relief=RAISED, borderwidth=2)
frame.pack(side=TOP, fill=BOTH, ipadx=5, ipady=5, expand=1)
# 创建按钮数组
for i in range(5):
    for j in range(5):
        Button(frame, text="("+str(i)+","+str(j)+")").grid(row=i, column=j)

# 开始窗口循环
win.mainloop()

运行结果

 

place()方法设置控件在窗体或者窗口内的绝对地址或相对地址。有下列选项

  1. anchor:定义控件在窗体或者窗口内的方位。可以是N、NE、E、SE、S、SW、W、NW或者CENTER。默认值是NW,表示左上角方位。
  2. bordermode:定义控件的坐标是否要考虑边界的宽度。此选项可以是OUTSIDE或者INSIDE,默认值是INSIDE。
  3. height:定义控件的高度,单位是像素。
  4. width:定义控件的宽度,单位是像素。
  5. in(in_):定义控件相对于参考控件的位置。
  6. relheight:定义控件相对于参考控件(使用in_选项)的高度。
  7. relwidth:定义控件相对于参考控件(使用in_选项)的宽度。
  8. relx:定义控件相对于参考控件(使用in_选项)的水平位移。如果没有设置in_选项,则是相对于父控件。
  9. rely:定义控件相对于参考控件(使用in_选项)的垂直位移。如果没有设置in_选项,则是相对于父控件。
  10. x:定义控件的绝对水平位置,默认值是0。
  11. y:定义控件的绝对垂直位置,默认值是0。

下面使用place()方法创建2个按钮。第1个按钮的位置在距离窗体左上角的(40,40)坐标处,第2个按钮的位置在距离窗体左上角的(140,80)坐标处。按钮的宽度是80个像素,按钮的高度是40个像素。

from tkinter import *

win = Tk()

frame = Frame(win, relief=RAISED, borderwidth=2, width=400, height=300)
frame.pack(side=TOP, fill=BOTH, ipadx=5, ipady=5, expand=1)
# 第一个按钮的位置在距离窗体左上角的(40,40)坐标处
button1 = Button(frame, text="Button 1")
button1.place(x=40, y=40, anchor=W, width=80, height=40)
# 第二个按钮的位置在距离窗体左上角的(140,40)坐标处
button2 = Button(frame, text="Button 2")
button2.place(x=140, y=80, anchor=W, width=80, height=40)

win.mainloop()

运行结果

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值