• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
dzw9
博客园    首页    新随笔    联系   管理    订阅  订阅
Python GUI编程之Tkinter

GUI编程Tkinter

Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下:

  • Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。
  • wxPython:wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的、功能健全的 GUI 用户界面。
  • Jython:Jython 程序可以和 Java 无缝集成。除了一些标准模块,Jython 使用 Java 的模块。Jython 几乎拥有标准的Python 中不依赖于 C 语言的全部模块。

from tkinter import *
root = Tk()                                        # 创建窗口对象的背景色
li = ['C','python','php','html','SQL','java']
listb  = Listbox(root)                            #  创建列表组件
for item in li:                                   #  第一个小部件插入数据
    listb.insert(0,item)
listb.pack()                                      #  将小部件放置到主窗口中
root.mainloop()                                    #  进入消息循环

Tkinter 组件

Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为控件或者部件。

控件 描述
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() 包装 expand=1控件随窗口缩放,放置在中央
grid() 网格
place() 位置

1.Button按钮组件

w = Button ( master , option=value , ... )

master: 按钮的父容器

1.1 options: 可选项,即该按钮的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。
  • bg 按钮的颜色
  • activebackground 当鼠标点击时按钮的背景色
  • fg 按钮文本的颜色
  • activeforeground 当鼠标点击时按钮文本的颜色
  • bd 按钮边框的大小,默认为 2 个像素
  • command 按钮关联的函数,当按钮被点击时,执行该函数
  • font 文本字体
  • height 按钮的高度
  • width 按钮的宽度,如未设置此项,其大小以适应按钮的内容(文本或图片的大小)
  • highlightcolor 要高亮的颜色
  • image 按钮上要显示的图片
  • justify 显示多行文本时设置不同行之间的对齐方式,可选LEFT,RIGHT, CENTER
  • padx 按钮在x轴方向上的内边距(padding),是指按钮的内容与按钮边缘的距离
  • pady 按钮在y轴方向上的内边距(padding)
  • relief 边框样式,设置控件3D效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT
  • state 设置按钮组件状态,可选的有NORMAL、ACTIVE、 DISABLED。默认NORMAL
  • underline下划线。默认按钮上的文本都不带下划线。取值就是带下划线的字符串索引,为 0 时,第一个字符带下划线,为 1 时,前两个字符带下划线,以此类推
  • wraplength 限制按钮每行显示的字符的数量
  • text 按钮的文本内容
  • anchor 锚选项,控制文本的位置,默认为中心,n,nw,ne,s,nw,ne,center
1.2 组件常用方法
  1. deselect() 清除单选按钮的状态
  2. flash() 在激活状态颜色和正常颜色之间闪烁几次单选按钮,但保持它开始时的状态。
  3. invoke() 可以调用此方法来获得与用户单击单选按钮以更改其状态时发生的操作相同的操作
  4. select() 设置单选按钮为选中。
1.3 示例
import tkinter
import tkinter.messagebox as tkMessageBox
from PIL import Image,ImageTk
root = tkinter.Tk()
root.title("wenyu`s window")
root.geometry("300x500")
def hello():
   tkMessageBox.showinfo( "Hello wenyu","Hello wenyu")
imga=Image.open("benxi.jpg")
img=ImageTk.PhotoImage(imga)
B = tkinter.Button(root,activebackground="yellow",activeforeground="green",bd="2",bg="pink",command = hello,fg="white",font="Arial",height="2",
width="8",highlightcolor="pink",padx="0",pady="0",wraplength="1",justify="left",state="normal",underline="1",text ="菜单")
B.pack()
root.mainloop()

2. Canvas画布

w = Canvas ( master, option=value, ... )
2.1 options
bd , bg , height , highlightcolor , width ,

  • confine 如果为 true (默认), 画布不能滚动到可滑动的区域外
  • cursor 光标的形状设定,如arrow, circle, cross, plus 等
  • relief 边框样式,可选值为FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认FLAT
  • scrollregion 一个元组 tuple (w, n, e, s) ,定义了画布可滚动的最大区域,w 为左边,n 为头部,e 为右边,s 为底部
  • xscrollincrement 用于滚动请求水平滚动的数量值
  • xscrollcommand 水平滚动条,如果画布是可滚动的,则该属性是水平滚动条的 .set()方法
  • yscrollincrement 类似 xscrollincrement, 但是垂直方向
  • yscrollcommand 垂直滚动条

2.2 Canvas 组件支持以下标准选项:

  • arc − 创建一个扇形
canvas=Canvas(root,bg='pink',width=500,height=500)    #初始化canvas
canvas.pack()
coord = 50, 50, 200, 200             #坐标起始点
arc = canvas.create_arc(coord, start=0, extent=90, fill="white",style=PIESLICE,dash=(15,2,5,2),outline='red',width=10)

start: 从x轴正方向(起始方向)开始,单位为度进行绘制
extent: 以start参数给定的角度开始,逆时针延伸角度

create_arc 参数style、dash、outline、width:

  1. style 参数有 ARC、CHORD 以及 PIESLICE;默认情况下为 PIESLICE
  2. dash 参数类型为元组,用于设定虚线线段。例如 dash=(3,4) 中,值3为指定绘制多少个像素的线段,值4为下一条线段绘制需要间隔多少个像素
  3. outline 用于设置绘制的线段颜色,默认为黑色
  4. width设置绘制成的图形边框的粗细,默认单位为像素
  • image − 创建图像
canvas=Canvas(root,bg='pink',width=500,height=500)
canvas.pack()
imga=Image.open("benxi.jpg")
image=ImageTk.PhotoImage(imga)
img=canvas.create_image(5,5,anchor=NW,image=image)
  • line − 创建线条
    line = canvas.create_line(x0, y0, x1, y1, ..., xn, yn, options)
    line=canvas.create_line(5,5,500,500,fill='white')
  • oval − 创建一个圆
    oval = canvas.create_oval(x0, y0, x1, y1, options)
    oval=canvas.create_oval(100,100,200,200,fill='white')
  • polygon − 创建一个至少有三个顶点的多边形
    oval = canvas.create_polygon(x0, y0, x1, y1,...xn, yn, options)
    oval=canvas.create_polygon(100,100,100,200,200,100,fill='white')

2.3 实例

from tkinter import *
import tkinter.messagebox as tkMessageBox 
root=Tk()
cv = Canvas(root,bg='white')       # 创建一个矩形,指定画布的颜色为白色
cv.create_rectangle(50,50,150,150)
cv.pack()
root.mainloop()

3. Checkbutton复选框

w = Checkbutton ( master, option=value, ... )
options: activebackground, activeforeground, bg, bitmap位图,bd,command,cursor, disabledforeground 禁用前景色,font,fg,height,highlightcolor,image是否使用图标,justify,padx,pady,relief,selectcolor,selectimage选中后图片,state,text,underline,width,wraplength,variable=1选中,offvalue,onvalue状态

  • variable 默认设置为1表示选中状态,反之设置为 0。可以使用 onvalue 和 offvalue 选项修改值
var=StringVar()
var.set("T")
c1=Checkbutton(root,text="biu",variable=var,onvalue="T",offvalue="F",height=5,width=20)
c1.pack()

3.1 方法

  • deselect() 取消组件的选中状态,设置 variable 为 offvalue.
  • flash() 在激活状态颜色和正常颜色之间闪烁几次单选按钮,但保持它开始时的状态
  • invoke() 调用command 选项指定的函数或方法,并返回函数的返回值
  • select() 设置按钮为选中,设置 variable 为 onvalue
  • toggle() 切换 Checkbutton 组件的状态(选中 -> 未选中 / 未选中 -> 选中)

3.2 实例

from tkinter import *
import tkinter.messagebox as tkMessageBox
root=Tk()
var=IntVar()
c1=Checkbutton(root,text="biu",variable=var,onvalue=1,offvalue=0,height=5,width=20)
c1.pack()
root.mainloop()

4. Entry文本框

w = Entry( master, option, ... ) 用来让用户输入一行文本字符串
options: bg, bd, cursor, font, fg, highlightcolor, justify, relief, selectbackground, selectborderwidth, selectforeground, state, width, xscrollcommand

  • exportselection 默认情况下,如果在输入框中选中文本,默认会复制到粘贴板,如果要忽略这个功能设置 exportselection=0
  • show 指定文本框内容显示为字符,值随意,满足字符即可。如密码可以将值设为 show="*"
  • textvariable 文本框的值,是一个StringVar()对象

4.1 方法

  • delete ( first, last=None ) #删除文本框里位置值
  • get() 获取文件框的值
  • icursor ( index ) 将光标移动到指定索引位置,只有当文框获取焦点后成立
  • index ( index ) 返回指定的索引值
  • insert ( index, s ) 向文本框中插入值
  • select_adjust ( index ) 选中指定索引和光标所在位置之前的值
  • select_clear() 清空文本框
  • select_from ( index ) 设置光标的位置
  • select_present() 如果有选中,返回 true,否则返回 false
  • select_range ( start, end ) 选中指定索引位置的值
  • select_to ( index ) 选中指定索引与光标之间的值
  • xview ( index ) 该方法在文本框链接到水平滚动条上很有用。
  • xview_scroll ( number, what ) 用于水平滚动文本框。 what 参数可以是 UNITS, 按字符宽度滚动,或者可以是 PAGES, 按文本框组件块滚动。 number 参数,正数为由左到右滚动,负数为由右到左滚动。

4.2 实例

from tkinter import *
root=Tk()
L=Label(root,text="网站名")
L.pack(side=LEFT)
E=Entry(root,bd=5)
E.pack(side=RIGHT)
root.mainloop()

5. Frame框架

w = Frame ( master, option, ... ) 在屏幕上显示一个矩形区域,多用来作为容器。
options:bg, bd, cursor, height, highlightbackground, highlightcolor, highlightthickness, relief, width,

  • takefocus 指定该组件是否接受输入焦点(用户可以通过 tab 键将焦点转移上来),默认为 false

5.1 实例

from tkinter import *
root=Tk()
def say_hi():
    print("hello!")
frame=Frame(root)
hi=Button(frame,text="say hi",command=say_hi)
hi.pack()
frame.pack(padx=1,pady=1)
root.mainloop()

6. Label

w = Label ( master, option, ... ) 标签控件(Label)指定的窗口中显示的文本和图像
options:anchor, bg, bd, bitmap, cursor, font, fg, height, image, justify, pady, padx, relief, text, textvariable, underline, width, wraplength

6.1 实例

from tkinter import *
root=Tk()
w = Label(root, text="Hello WENYU!")
w.pack()
root.mainloop()
posted on 2022-12-29 16:29  dzw9  阅读(137)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3