人生苦短,我用python。

一、tkinter模块

主窗口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import tkinter
import time
from tkinter import messagebox
#from tkinter.ttk import * # 加入这行代码为了让 tkinter 在 Windows 平台下运行更像 Windows

# 主窗口:
window = tkinter.Tk() # 使用tkinter.Tk() 生成主窗口
window.title('我是标题') # 修改框体的名字,也可在创建时使用className参数来命名;
window.geometry('400x300+150+120') # 指定主框体大小;('width x height + xoffset + yoffset')
window.resizable(1,1) # 框体大小可调性,分别表示x,y方向的可变性;1表示可变,0表示不可变;
window.update() # 刷新页面
window.update_idletasks() # 即时刷新
window.iconbitmap(r'E:\test.ico') # 修改标题栏的默认图标
window.wm_iconbitmap(r'E:\test.ico')# 修改标题栏的默认图标
window.overrideredirect(1) # 去除边框,参数设为1即可,不过右上角的选项都会不显示
window.mainloop() # 进入消息循环(必需组件)
window.quit() # 退出;(配合响应事件使用)


# tkinter中的核心组件:(在Tkinter中窗口部件类没有分级;所有的窗口部件类在树中都是兄弟。)
# Button 按钮
# Bitmap 位图
# Canvas 绘图形组件,可以在其中绘制图形
# Checkbutton 复选框
# Entry 文本框(单行)
# Frame 框架,将几个组件组成一组
# Label 标签,可以显示文字或图片
# LabelFrame labelframe 是一个简单的容器控件。常用与复杂的窗口布局
# Listbox 列表框
# Image 图片
# Menu 菜单
# Menubutton 它的功能完全可以使用Menu替代
# Message 与Label组件类似,但是可以根据自身大小将文本换行
# OptionMenu
# PanedWindow PanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件
# Radiobutton 单选框
# Scale 滑块;允许通过滑块来设置一数字值
# Scrollbar 滚动条;配合使用canvas, entry, listbox, and text窗口部件的标准滚动条
# Spinbox 输入控件;与Entry类似,但是可以指定输入范围值
# Text 文本框(多行)
# Toplevel 用来创建子窗口窗口组件


# 标准属性:也就是所有控件的共同属性
# Dimension 控件大小;
# Color 控件颜色;
# Font 控件字体;
# Anchor 锚点;
# Relief 控件样式;
# Bitmap 位图;
# Cursor 光标;

组件的放置和排版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 组件的放置和排版(pack,grid,place):
# pack() 包装:使用设置位置属性参数的方法放置组件
# after: 将组件置于其他组件之后;
# before: 将组件置于其他组件之前;
# anchor: 组件的对齐方式,顶对齐'n',底对齐's',左'w',右'e',中间'CENTER'
# side: 组件在主窗口的位置,可以为'top','bottom','left','right'(使用时tkinter.TOP,tkinter.LEFT);
# fill: 填充方式 (y垂直,x水平,both水平+垂直),是否在某个方向充满窗口
# expand 1可扩展,0不可扩展,代表控件是否会随窗口缩放
# pad ipadx内边距x方向,ipady内边距y方向,padx外边距x方向,pady外边距y方向
# grid() 网格:使用行列的方法放置组件的位置
# column: 组件所在的列起始位置;
# columnspan: 组件的列宽;跨列数
# row: 组件所在的行起始位置;
# rowspan: 组件的行宽;rowspam=3 跨3行
# sticky: 对齐方式:NSEW(北南东西)上下左右
# padx、pady: x方向间距、y方向间距(padx=5)
# place() 位置:直接使用坐标来放置组件
# anchor: 组件对齐方式;n, ne, e, se, s, sw, w, nw, or center ; ('n'==N)
# x: 组件左上角的x坐标;
# y: 组件左上角的y坐标;
# relx: 组件左上角相对于窗口的x坐标,应为0-1之间的小数;图形位置相对窗口变化
# rely: 组件左上角相对于窗口的y坐标,应为0-1之间的小数;
# width: 组件的宽度;
# heitht: 组件的高度;
# relwidth: 组件相对于窗口的宽度,0-1之间的小数,图形宽度相对窗口变化;
# relheight:  组件相对于窗口的高度,0-1之间的小数;

account = tkinter.Label(window, text='账号').grid(row=0, sticky='W')
account_input = tkinter.Entry(window).grid(row=0, column=1, stick='E')
password = tkinter.Label(window, text='密码').grid(row=1, sticky='W')
password_input = tkinter.Entry(window).grid(row=1, column=1, stick='E')

#login_button = tkinter.Button(window, text='登录').pack(side='left', expand=1) # 注意:pack和grid在一个窗口中不能同时使用
#forget_password = tkinter.Button(window, text='忘记密码').pack(after=login_button, expand=1)

按钮

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 按钮:
# B = tkinter.Button(master, option=value, ...)
# master: 控件的父容器。
# options: 可选项,即该控件的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。

# 按钮属性
# anchor: 指定按钮上文本的位置;
# activebackground: 当鼠标放上去时,按钮的背景色
# activeforeground: 当鼠标放上去时,按钮的前景色
# background(bg): 指定按钮的背景色;
# bitmap: 指定按钮上显示的位图;
# borderwidth(bd): 指定按钮边框的宽度;
# command: 指定按钮消息的回调函数;
# cursor: 指定鼠标移动到按钮上的指针样式;
# font: 指定按钮上文本的字体;
# foreground(fg) 指定按钮的前景色;
# height: 指定按钮的高度;
# 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。
# text: 指定按钮上显示的文本;
# textvariable: 可变文本,与StringVar等配合着用
# underline: 下划线。默认按钮上的文本都不带下划线。取值就是带下划线的字符串索引,为 0 时,第一个字符带下划线,为 1 时,前两个字符带下划线,以此类推
# width: 按钮的宽度,如未设置此项,其大小以适应按钮的内容(文本或图片的大小)
# wraplength: 限制按钮每行显示的字符的数量

# 按钮方法
# deselect() 清除单选按钮的状态
# flash() 在激活状态颜色和正常颜色之间闪烁几次单选按钮,但保持它开始时的状态。
# invoke() 可以调用此方法来获得与用户单击单选按钮以更改其状态时发生的操作相同的操作
# select() 设置单选按钮为选中。

def hello():
messagebox.showinfo('我是消息框','hello tkinter')
hello_button = tkinter.Button(window, text='hello', command=hello).pack() # 方法1,使用command参数绑定事件函数

def beautiful(event): # 被绑定事件函数需要传入一个参数
messagebox.showinfo('我是消息框','I am beautiful')
beautiful_button = tkinter.Button(window, text='beautiful', background='red')
beautiful_button.bind('<Button-1>', beautiful) # 方法2,使用bind()绑定事件函数
beautiful_button.pack()

事件绑定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 事件绑定:
# bind(sequence,func,add)
# bind_class(className,sequence,func,add)
# bind_all(sequence,func,add)
# sequence 所绑定的事件;
# func 所绑定的事件处理函数;
# add 可选参数,为空字符或‘+’;
# className 所绑定的类;
# bind_all() 全程序级别的绑定,它通常用于全局的快捷键,比如 F1 通常是用来打开帮助文档。
# bind_class() 以绑定某些类别,例如绑定所有的输入框的 Ctrl+V 表示粘贴

# 鼠标键盘事件
# <Button-1> 鼠标左键按下,2表示中键,3表示右键;
# <ButtonPress-1> 同上;
# <ButtonRelease-1> 鼠标左键释放;
# <B1-Motion> 按住鼠标左键移动;
# <Double-Button-1> 双击左键;
# <Enter> 鼠标指针进入某一组件区域;
# <Leave> 鼠标指针离开某一组件区域;
# <MouseWheel> 滚动滚轮;
# <KeyPress-A> 按下A键,A可用其他键替代;
# <Alt-KeyPress-A> 同时按下alt和A;alt可用ctrl和shift替代;
# <Double-KeyPress-A> 快速按两下A;
# <Lock-KeyPress-A> 大写状态下按A;

# 窗口事件
# Activate 当组件由不可用转为可用时触发;
# Configure 当组件大小改变时触发;
# Deactivate 当组件由可用转变为不可用时触发;
# Destroy 当组件被销毁时触发;
# Expose 当组件从被遮挡状态中暴露出来时触发;
# Unmap 当组件由显示状态变为隐藏状态时触发;
# Map 当组件由隐藏状态变为显示状态时触发;
# FocusIn 当组件获得焦点时触发;
# FocusOut 当组件失去焦点时触发;
# Property 当窗体的属性被删除或改变时触发;
# Visibility 当组件变为可视状态时触发;

# 响应事件
# event对象(def function(event)):
# char 按键字符,仅对键盘事件有效;
# keycode 按键名,仅对键盘事件有效;
# keysym 按键编码,仅对键盘事件有效;
# num 鼠标按键,仅对鼠标事件有效;
# type 所触发的事件类型;
# widget 引起事件的组件;
# width,heigh 组件改变后的大小,仅Configure有效;
# x,y 鼠标当前位置,相对于窗口;
# x_root,y_root 鼠标当前位置,相对于整个屏幕

# 解除绑定
# unbind(事件类型)
# 它会解除该绑定事件类型的所有回调函数。

def showLabel(event):
show_L = tkinter.Label(window, text='我是点击标签产生的')
show_L.pack()
L = tkinter.Label(window, text='标签模拟按钮')
L.bind('<Button-1>', showLabel)
L.pack()

画布

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 画布:
# C = tkinter.Canvas(master, option=value, ... )
# master: 控件的父容器。
# options: 可选项,即该控件的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。

# 画布属性
# background(bg) 背景色;
# bitmap 位图;
# borderwidth(bd) 组件边框宽度,单位像素,默认为 2 像素;
# confine 如果为 true (默认), 画布不能滚动到可滑动的区域外。
# cursor 光标的形状设定,如arrow, circle, cross, plus 等
# foreground(fg) 前景色;
# height 高度
# highlightcolor 要高亮的颜色
# image 图片;
# relief 边框样式,可选值为 FLAT、SUNKEN、RAISED、GROOVE、RIDGE。 默认为 FLAT。
# scrollregion 一个元组 tuple (w, n, e, s) ,定义了画布可滚动的最大区域,w 为左边,n 为头部,e 为右边,s 为底部。
# width 组件宽度;
# xscrollincrement 用于滚动请求水平滚动的数量值。
# xscrollcommand 水平滚动条,如果画布是可滚动的,则该属性是水平滚动条的 .set()方法。
# yscrollincrement 类似 xscrollincrement, 但是垂直方向。
# yscrollcommand 垂直滚动条,如果画布是可滚动的,则该属性是垂直滚动条的 .set()方法。

# 绘图方法
# create_arc 椭圆圆弧, create_arc(x1,y1,x2,y2,start=0,extent=120,tag='1'), x1,y1和x2,y2分别为椭圆圆弧外接矩形的左上角和右下角坐标;从0度,扩充到120度;圆弧别名为:‘1’;
# create_bitmap 绘制位图,支持XBM;
# create_image 绘制图片,支持GIF(x,y,image,anchor);
# create_line 绘制直线;(坐标罗列)
# create_oval; 绘制圆;
# create_polygon 绘制多边形(坐标依次罗列,不用加括号,还有参数,fill,outline);
# create_rectangle 绘制矩形((a,b,c,d),值为左上角和右下角的坐标);
# create_text 绘制文字(字体参数font,);
# create_window 绘制窗口;
# delete 删除绘制的图形;delete('all')清除所有图形;或清除指定别名的图形;
# itemconfig 修改图形属性,第一个参数为图形的ID,后边为想修改的参数;
# move    移动图像(1,4,0),1为图像对象,4为横移4像素,0为纵移像素,然后用root.update()刷新即可看到图像的移动,为了使多次移动变得可视,最好加上time.sleep()函数或canvas.after()函数;
# coords(ID) 返回对象的位置的两个坐标(4个数字元组);只要用create_方法画了一个图形,就会自动返回一个ID,创建一个图形时将它赋值给一个变量,需要ID时就可以使用这个变量名。
# after(100) 程序在这里暂停100毫秒

canvas = tkinter.Canvas(window, bg='white') # 创建画布
arc = canvas.create_arc(10, 50, 240, 210, start=0, extent=150, fill='blue') # 绘制圆弧
line = canvas.create_line(10, 50, 240, 210) # 绘制直线
oval = canvas.create_oval(10,10,110,110) # 绘制圆
rectangle = canvas.create_rectangle(10,10,110,110) # 绘制矩形
canvas.pack() # 画布包装

复选框

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 复选框:
# Cb = tkinter.Checkbutton( master, option=value, ... )
# master: 控件的父容器。
# options: 可选项,即该控件的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。

# 复选框属性
# activebackground 当鼠标放上去时,按钮的背景色
# activeforeground 当鼠标放上去时,按钮的前景色
# anchor 文本位置;
# background(bg) 背景色;
# bitmap 位图
# borderwidth(bd) 边框的大小,默认为 2 个像素
# command 关联的函数,当按钮被点击时,执行该函数
# cursor 光标的形状设定,如arrow, circle, cross, plus 等
# disabledforeground 禁用选项的前景色
# font 文本字体
# foreground(fg) 前景色;
# height 组件高度,复选框文本行数,默认为 1。
# highlightcolor 聚焦的高亮颜色
# image 组件中的图片;是否使用图标
# indicatoron 特殊控制参数,当为0时,组件会被绘制成按钮形式;
# justify 显示多行文本的时候,设置不同行之间的对齐方式,可选项包括LEFT, RIGHT, CENTER
# offvalue Checkbutton 的值不仅仅是 1 或 0,可以是其他类型的数值,可以通过 onvalue 和 offvalue 属性设置 Checkbutton 的状态值。
# onvalue Checkbutton 的值不仅仅是 1 或 0,可以是其他类型的数值,可以通过 onvalue 和 offvalue 属性设置 Checkbutton 的状态值。
# padx 按钮在x轴方向上的内边距(padding),是指按钮的内容与按钮边缘的距离,默认为 1 像素。
# pady 按钮在y轴方向上的内边距(padding),默认为 1 像素。
# relief 边框样式,设置控件3D效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT。
# selectcolor 选中后的颜色,默认为 selectcolor="red"。
# selectimage 选中后的图片
# state 状态,默认为 state=NORMAL
# text 显示的文本,使用 "\n" 来对文本进行换行。
# textvariable 可变文本显示,与StringVar等配合着用
# underline 下划线。默认按钮上的文本都不带下划线。取值就是带下划线的字符串索引,为 0 时,第一个字符带下划线,为 1 时,前两个字符带下划线,以此类推
# value 指定组件被选中中关联变量的值;
# variable 指定组件所关联的变量;变量,variable 的值为 1 或 0,代表着选中或不选中
# width 默认宽度是复选框的文本或图像决定的,你可以设置指定字符数。
# wraplength 是否设置包裹。

# 复选框方法
# deselect() 清除复选框选中选项。
# flash() 在激活状态颜色和正常颜色之间闪烁几次单选按钮,但保持它开始时的状态。
# invoke() 可以调用此方法来获得与用户单击单选按钮以更改其状态时发生的操作相同的操作
# select() 设置按钮为选中。
# toggle() 选中与没有选中的选项互相切换

def update():
message = ''
if check1.get() == True:
message += 'test1\n'
if check2.get() == True:
message += 'test2\n'
T.delete(0.0, tkinter.END) # 文本框从第0行的第0位索引开始删除到最后,不然复选框绑定的按钮每选一次都会写一次,这样可以从重头写
T.insert(tkinter.INSERT, message) # 向文本框插入文字
check1 = tkinter.BooleanVar()
check2 = tkinter.BooleanVar()
Cb1 = tkinter.Checkbutton(window, text='test1', variable=check1, command=update) # 绑定变量,便于给绑定事件处理
Cb2 = tkinter.Checkbutton(window, text='test2', variable=check2, command=update)
Cb1.pack()
Cb2.pack()
T = tkinter.Text(window, width=50, height=5)
T.pack()

单选框

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 单选框:
# Rb = tkinter.Radiobutton( master, option=value, ... )
# master: 控件的父容器。
# options: 可选项,即该控件的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。

# 单选框属性
# activebackground 当鼠标放上去时,按钮的背景色
# activeforeground 当鼠标放上去时,按钮的前景色
# anchor 文本位置;
# background(bg) 背景色;
# bitmap 位图
# borderwidth(bd) 边框的大小,默认为 2 个像素
# command 关联的函数,当按钮被点击时,执行该函数
# cursor 光标的形状设定,如arrow, circle, cross, plus 等
# disabledforeground 禁用选项的前景色
# font 文本字体
# foreground(fg) 前景色;
# height 组件高度,复选框文本行数,默认为 1。
# highlightcolor 聚焦的高亮颜色
# image 组件中的图片;是否使用图标
# indicatoron 特殊控制参数,当为0时,组件会被绘制成按钮形式;
# justify 显示多行文本的时候,设置不同行之间的对齐方式,可选项包括LEFT, RIGHT, CENTER
# offvalue Checkbutton 的值不仅仅是 1 或 0,可以是其他类型的数值,可以通过 onvalue 和 offvalue 属性设置 Checkbutton 的状态值。
# onvalue Checkbutton 的值不仅仅是 1 或 0,可以是其他类型的数值,可以通过 onvalue 和 offvalue 属性设置 Checkbutton 的状态值。
# padx 按钮在x轴方向上的内边距(padding),是指按钮的内容与按钮边缘的距离,默认为 1 像素。
# pady 按钮在y轴方向上的内边距(padding),默认为 1 像素。
# relief 边框样式,设置控件3D效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT。
# selectcolor 选中后的颜色,默认为 selectcolor="red"。
# selectimage 选中后的图片
# state 状态,默认为 state=NORMAL
# text 显示的文本,使用 "\n" 来对文本进行换行。
# textvariable 可变文本显示,与StringVar等配合着用
# underline 下划线。默认按钮上的文本都不带下划线。取值就是带下划线的字符串索引,为 0 时,第一个字符带下划线,为 1 时,前两个字符带下划线,以此类推
# value 指定组件被选中中关联变量的值;
# variable 指定组件所关联的变量;变量,variable 的值为 1 或 0,代表着选中或不选中
# width 默认宽度是复选框的文本或图像决定的,你可以设置指定字符数。
# wraplength 是否设置包裹。

# 单选框方法
# deselect() 清除复选框选中选项。
# flash() 在激活状态颜色和正常颜色之间闪烁几次单选按钮,但保持它开始时的状态。
# invoke() 可以调用此方法来获得与用户单击单选按钮以更改其状态时发生的操作相同的操作
# select() 设置按钮为选中。
# toggle() 选中与没有选中的选项互相切换

def update():
message = ''
if check.get() == 1:
message += 'test1\n'
if check.get() == 2:
message += 'test2\n'
T.delete(0.0, tkinter.END) # 文本框从第0行的第0位索引开始删除到最后,不然复选框绑定的按钮每选一次都会写一次,这样可以从重头写
T.insert(tkinter.INSERT, message) # 向文本框插入文字
check = tkinter.IntVar()
Rb1 = tkinter.Radiobutton(window, text='test1', value=1, variable=check, command=update) # 绑定变量,便于给绑定事件处理
Rb2 = tkinter.Radiobutton(window, text='test2', value=2, variable=check, command=update)
Rb1.pack()
Rb2.pack()
T = tkinter.Text(window, width=50, height=5)
T.pack()

单行文本框

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 单行文本框:
# E = tkinter.Entry( master, option, ... )
# master: 控件的父容器。
# options: 可选项,即该控件的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。

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

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

L = tkinter.Label(window, text='网站名').pack(side='left')
E = tkinter.Entry(window, bd=5).pack(after=L)

多行文本框

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 多行文本框:
# T = tkinter.Text( master, option, ... )
# master: 控件的父容器。
# options: 可选项,即该控件的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。

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

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

T = tkinter.Text(window, width=50, height=20).pack()

标签

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 标签:
# L = tkinter.Label( master, option, ... )
# master: 控件的父容器。
# options: 可选项,即该控件的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。

# 标签属性
# anchor 标签中文本的位置;
# background(bg) 背景色;
# bitmap 标签中的位图;
# borderwidth(bd) 边框宽度;
# font 字体;例如('Times',10,'bold','italic')依次表示字体、字号、加粗、倾斜
# foreground(fg) 前景色;
# width 标签宽度;
# height 标签高度;
# image 标签中的图片;
# justify 多行文本的对齐方式;
# text 标签中的文本,可以使用'\n'表示换行
# textvariable 显示文本自动更新,与StringVar等配合着用

L = tkinter.Label(window, text='test')
L.pack()

菜单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# 菜单:
# M = tkinter.Menu( master, option, ... )
# master: 控件的父容器。
# options: 可选项,即该控件的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。

# 菜单属性
# activebackgound 点击时背景,同样有activeforeground,activeborderwidth,disabledforeground
# background(bg) 背景色;
# borderwidth(bd) 边框宽度
# cursor 当子菜单分离原窗时,鼠标在子菜单栏上的形状arrow、circle、clock、cross、dotbox、exchange、fleur、heart、heart、man、mouse、pirate、plus等图形
# font 字体
# foreground(fg) 前景色;
# postcommand 点击菜单的回调函数
# relief 当子菜单分离原窗时的3D效果,relief=RAISED,SUNKEN,FLAT,RIDGE,SOLID,GROOVE
# selectcolor 选中时背景
# takefocus
# tearoff   分窗,0为在原窗,1为点击分为两个窗口
# title 当子菜单分离原窗时的标题
# type

# 菜单方法
# menu.add_cascade 添加子菜单(label参数为级联标签,menu参数为子菜单对象)
# menu.add_command 添加命令(label参数为显示内容,command参数为响应函数)
# menu.add_separator 添加分隔线
# menu.add_checkbutton 添加复选按钮,使菜单变为复选菜单,效果为:点击时打钩(variable参数决定绑定变量)
# menu.add_radiobutton 添加单选按钮,使菜单变为单选菜单,效果为:点击时打钩(variable参数决定绑定变量)
# menu.post(event.x, event.y)
# delete 删除

menu_bar = tkinter.Menu(window) # 定义主菜单
file_menu = tkinter.Menu(menu_bar) # 定义子菜单
for item in ['新建','打开','保存','另存为']:
file_menu.add_command(label=item) # 给子菜单添加标签
edit_menu = tkinter.Menu(menu_bar)
for item in ['复制','粘贴','剪切']:
edit_menu.add_command(label=item)
view_menu = tkinter.Menu(menu_bar)
for item in ['默认视图','新建视图']:
view_menu.add_command(label=item)
about_menu = tkinter.Menu(menu_bar)
for item in ['版权信息','其他说明']:
about_menu.add_command(label=item)
menu_bar.add_cascade(label='文件', menu=file_menu) # 将子菜单添加到主菜单
menu_bar.add_cascade(label='编辑', menu=edit_menu)
menu_bar.add_cascade(label='视图', menu=view_menu)
menu_bar.add_cascade(label='关于', menu=about_menu)
window['menu'] = menu_bar # 主窗口显示主菜单,因为menu是顶层窗口,不能用pack()包装

def lovePython():
tkinter.Label(window, text='I love python').pack()
def loveJava():
tkinter.Label(window, text='I love java').pack()
right_menu = tkinter.Menu(window) # 定义鼠标右键菜单
right_menu.add_command(label='python', command=lovePython) # 给菜单添加标签和绑定事件
right_menu.add_separator() # 该菜单添加分割线,以表示菜单功能不同
right_menu.add_command(label='java', command=loveJava)
def pop(event):
right_menu.post(event.x, event.y) # menu.post()根据窗体的鼠标位置显示菜单
window.bind('<Button-3>', pop) # 主窗体绑定鼠标右键和菜单显示事件

消息弹框

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 消息弹框:

# 消息弹框方法
# tkinter.messagebox.showinfo() 信息提示对话框
# tkinter.messagebox.showerror() 错误提示对话框
# tkinter.messagebox.showwarning() 警告对话框
# tkinter.messagebox.askquestion() 回答问题;有返回值yes、no
# tkinter.messagebox.askyesno() 回答是非题;有返回值True、False
# tkinter.messagebox.askokcansel() 确认或取消;有返回值True、False
# tkinter.messagebox.askretrycansel() 重试或取消;有返回值True、False
# tkinter.messagebox.askyesnocancel() 是、否或取消,有返回值True、False、None

# messagebox._show函数的控制参数
# default 指定消息框按钮;
# icon 指定消息框图标;
# message   指定消息框所显示的消息;
# parent 指定消息框的父组件;
# title 标题;
# type 类型;

# simpledialog模块参数
# title 指定对话框的标题;
# prompt  显示的文字;
# initialvalue 指定输入框的初始值;

# filedialog模块参数
# filetype    指定文件类型;
# initialdir    指定默认目录;
# initialfile   指定默认文件;
# title     指定对话框标题

# colorchooser模块参数
# initialcolor  指定初始化颜色;
# title 指定对话框标题;

tkinter.messagebox.showinfo(title='消息标题', message='我是消息')

子窗口

1
2
3
4
5
6
7
8
9
# 子窗口:
# Tl = tkinter.Toplevel(master, option=value, ...):
# master: 控件的父容器。
# options: 可选项,即该控件的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。

Tl = tkinter.Toplevel(window, width=100, height=50)
Tl.title('我是子窗口标题')
Tl_L = tkinter.Label(Tl, text='我是子窗口的标签')
Tl_L.pack()

滚动条

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 滚动条:
# Sb = tkinter.Scorllbar(master, option=value, ...)
# master: 控件的父容器。
# options: 可选项,即该控件的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。

# 滚动条属性
# background(bg) 背景色,如bg=”red”, bg="#FF56EF"
# borderwidth(bd) 边框宽度设;bd(bordwidth)缺省为1或2个像素
# command Scrollbar移动的响应函数
# orient 控制Scrollbar的位置,可以为Tkinter.HORIZONTAL水平的scrollbar,Tkinter.VERTICAL垂直的
# relief 指定外观装饰边界附近的标签,默认是平的,可以设置的参数:flat、groove、raised、ridge、solid、sunken
# width 设置显示宽度,如果未设置此项,其大小以适应内容标签

# 滚动条方法
# 为某个组件上安装垂直滚动条,需要做两件事:
# (1)设置该组件的 yscrollbarcommand 选项为 Scrollbar 组件的 set() 方法
# (2)设置 Scrollbar 组件的 command 选项为该组件的 yview() 方法

Sb = tkinter.Scrollbar(window)
Sb.pack(side=tkinter.RIGHT, fill=tkinter.Y)
Lb = tkinter.Listbox(window, yscrollcommand=Sb.set) # 1、设置组件的 yscrollcommand=Scrollbar.set
for line in range(100):
Lb.insert(tkinter.END, 'current line num '+ str(line))
Lb.pack(side=tkinter.LEFT, fill=tkinter.BOTH)
Sb.config(command=Lb.yview) # 2、设置Scrollbar的 command=Listbox.yview

列表框

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 列表框:
# Lb = tkinter.Listbox(master, option=value, ...)
# master: 控件的父容器。
# options: 可选项,即该控件的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。

# 列表框属性
# background(bg) 背景色,如bg=”red”, bg="#FF56EF"
# borderwidth(bd) 边框宽度;bd(bordwidth)缺省为1或2个像素
# foreground(fg) 前景色,如fg=”red”, fg="#FF56EF"
# height 设置显示高度、如果未设置此项,其大小以适应内容标签
# listvariable 设置listvariable属性,用于设置列表框中的值,或是获取列表框的值,通过set()与get()函数实现
# relief 指定外观装饰边界附近的标签,默认是平的,可以设置的参数:flat、groove、raised、ridge、solid、sunken
# selectmode 选择模式 SINGLE(单选)、BROWSE(也是单选,但拖动鼠标或通过方向键可以直接改变选项)、MULTIPLE(多选)和EXTENDED(也是多选,但需要同时按住Shift键或Ctrl键或拖拽鼠标实现)。默认是BROWSE
# selectbackground 选中选项的背景色
# state 设置组件状态;正常(normal),激活(active),禁用(disabled)
# width 设置显示宽度,如果未设置此项,其大小以适应内容标签

# 列表框方法
# insert 追加item,如listbox.insert(0,"addBox1","addBox2")
# delete 删除item,如listbox.delete(3,4),删除全部(0,END)
# select_set 选中,如listbox.select_set(0,2)
# select_clear 取消选中如listbox.select_clear(0,1)
# get 返回制定索引的项值,如listbox.get(1);返回多个项值,返回元组,如listbox.get(0,2);返回当前选中项的索引listbox.curselection()
# curselection() 返回当前选中项的索引,元组类型,如listbox.curselection()
# selection_includes 判断当前选中的项目中是否包含某项,如listbox.selection_includes(4)

names = ("梅长苏","誉王","飞流","夏冬","霓凰郡主","蒙挚","萧景睿","谢玉")
players = ("胡歌","黄维德","吴磊","张龄心","刘涛","陈龙","程皓枫","刘奕君")

name_list = tkinter.StringVar(value=names) # 定义字符串变量
player_list = tkinter.StringVar(value=players)

name_listbox = tkinter.Listbox(window, height=len(names), listvariable=name_list, selectmode='browse') # 姓名列表框设置行数、关联变量、单选模式
player_listbox = tkinter.Listbox(window, height=len(players), listvariable=player_list, selectmode='extended') # 演员列表框设置行数、关联变量、多选模式

name_listbox.grid(row=1, column=1, padx=(10,5), pady=10)
player_listbox.grid(row=1, column=2, padx=(5,10), pady=10)

name_listbox.select_set(0) # 为姓名列表框设置初始默认选项

for i in range(len(players)): # 设置演员列表框设置颜色
player_listbox.itemconfig(i, fg='blue') # 每个选项设置前景色
if i%2:
player_listbox.itemconfig(i, bg='#f0f0ff') # 隔行设置背景色

def show_msg(*args):
indexs = name_listbox.curselection() # 获得姓名列表框选中索引的元组
index = int(indexs[0]) # 取出当前选中的索引
player_listbox.see(index) # 调整演员列表框的位置,以便索引引用的行可见
player_listbox.select_set(index) # 演员列表框跟随姓名列表框选择项显示
name_listbox.bind("<<ListboxSelect>>", show_msg) # 为姓名列表框绑定事件

框架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 框架:
# F = tkinter.Frame(master, option=value, ...)
# master: 控件的父容器。
# options: 可选项,即该控件的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。

# 框架属性
# background(bg) Frame控件的背景颜色
# borderwidth(bd) 边框宽度,默认为0
# class_ 默认是Frame
# colormap
# container 设为True,意味着该窗口将被用作容器,一些其他应用程序将被嵌入。默认为False
# cursor 当鼠标在Frame控件区域时需要显示的样式
# height Frame控件的高度,默认0
# highlightbackground 指定当Frame没有获得焦点时高亮边框的颜色
# highlightcolor 指定当Frame获得焦点时高亮边框的颜色
# highlightthickness 指定高亮边框的宽度
# padx 水平方向的边距
# pady 垂直方向的边距
# relief 指定外观装饰边界附近的标签,默认是平的,可以设置的参数:flat、groove、raised、ridge、solid、sunken
# takefocus 指定该组件是否接受输入焦点(用户可以用tab键将焦点转移上来),默认False
# visual 为窗口指定视觉信息,该选项没有默认值
# width Frame控件的宽度,默认0

frame_root = tkinter.Frame(window)
frame_l = tkinter.Frame(frame_root)
frame_r = tkinter.Frame(frame_root)

tkinter.Label(frame_l, text='中国', bg='red', font=('Arial', 12), width=10, height=2).pack(side=tkinter.TOP)
tkinter.Label(frame_l, text='日本', bg='green', font=('Arial', 12), width=10, height=2).pack(side=tkinter.TOP)
tkinter.Label(frame_r, text='美国', bg='green', font=('Arial', 12), width=10, height=2).pack(side=tkinter.TOP)
tkinter.Label(frame_r, text='德国', bg='green', font=('Arial', 12), width=10, height=2).pack(side=tkinter.TOP)

frame_l.pack(side=tkinter.LEFT)
frame_r.pack(side=tkinter.RIGHT)
frame_root.pack()

持续更新…

最后更新: 2018年12月05日 11:39

原始链接: http://pythonfood.github.io/2017/12/30/python图形界面/

× 多少都行~
打赏二维码