simpledialog组件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def askname():
result = tkinter.simpledialog.askstring(title = '获取信息',prompt = '请输入用户名',initialvalue = '匿名')
print(result)
#添加按钮
btn1 = tkinter.Button(root,text = '获取用户名',command = askname)
btn1.pack()

def askage():
result = tkinter.simpledialog.askinteger(title = '获取信息',prompt = '请输入年龄',initialvalue = 18)
print(result)
#添加按钮
btn2 = tkinter.Button(root,text = '获取年龄',command = askage)
btn2.pack()

def askheight():
result = tkinter.simpledialog.askfloat(title = '获取信息',prompt = '请输入身高(单位:米)',initialvalue = 0)
print(result)
#添加按钮
btn3 = tkinter.Button(root,text = '获取身高',command = askheight)
btn3.pack()

filedialog组件

1
2
3
4
5
6
7
8
9
10
11
12
13
askdirectory(**options)
获取一个文件夹的路径
askopenfile(mode='r', **options)
打开文件获取单个文件指针,具有open()的作用
askopenfiles(mode='r', **options)
打开文件获取多个文件指针,具有open()的作用
askopenfilename(**options)
选择单个文件,获取其路径
askopenfilenames(**options)
选择多个文件,获取其路径
asksaveasfile(mode='w', **options)
asksaveasfilename(**options)
选择保存文件的路径
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
#定义函数
def filename():
path = tkinter.filedialog.askopenfilename()
print(path)
#添加按钮触发
btn1 = tkinter.Button(root,text = 'filename',command = filename)
btn1.pack()

#定义函数
def filenames():
paths = tkinter.filedialog.askopenfilenames()
print(paths)
#添加按钮触发
btn2 = tkinter.Button(root,text = 'filenames',command = filenames)
btn2.pack()

#定义函数
def file():
fp = tkinter.filedialog.askopenfile(mode = 'r')
print(fp)
#添加按钮触发
btn3 = tkinter.Button(root,text = 'file',command = file)
btn3.pack()

#定义函数
def dir():
path = tkinter.filedialog.askdirectory()
print(path)
#添加按钮触发
btn4 = tkinter.Button(root,text = 'dir',command = dir)
btn4.pack()

#定义函数
def saveas():
path = tkinter.filedialog.asksaveasfilename()
print(path)
#添加按钮触发
btn5 = tkinter.Button(root,text = 'saveas',command = saveas)
btn5.pack()

#定义函数
def filename():
path = tkinter.filedialog.askopenfilename(initialdir = 'c:/',initialfile = 'abc.exe',title = '打开你心意的文件',filetypes = (('可执行文件','*.exe'),('python file','*.py'),('所有文件','*.*')))
print(path)
#添加按钮触发
btn1 = tkinter.Button(root,text = 'filename',command = filename)
btn1.pack()

colorchooser组件

1
2
3
4
5
6
7
8
9
10
#函数
def color():
result = tkinter.colorchooser.askcolor(color = '#ff9900')
print(result)
#设置界面背景颜色
root['bg'] = result[1]

#添加按钮
btn = tkinter.Button(root,text = '选择颜色',command = color)
btn.pack()

事件

1
2
3
4
以按钮为例:
1.为按钮添加一个【点击时候】的操作 ->事件类型
2.使用按钮的【command参数指定类函数】 ->事件绑定函数
3.按钮操作过程中的信息 ->事件对象
  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
鼠标事件类型
<Button-1> 按下了鼠标左键 <ButtonPress-1>
<Button-2> 按下了鼠标中键 <ButtonPress-2>
<Button-3> 按下了鼠标右键 <ButtonPress-3>
<Enter> 鼠标进入组件区域
<Leave> 鼠标离开组件区域
<ButtonRelease-1> 释放了鼠标左键
<ButtonRelease-2> 释放了鼠标中键
<ButtonRelease-3> 释放了鼠标右键
<B1-Moion> 按住鼠标左键移动
<B2-Moion> 按住鼠标中键移动
<B3-Moion> 按住鼠标右键移动
<Double-Button-1> 双击鼠标左键
<Double-Button-2> 双击鼠标中键
<Double-Button-3> 双击鼠标右键
<MouseWheel> 滚动鼠标滚轮
键盘事件类型
<KeyPress> 表示任何键盘按下
<KeyPress-A> 表示按下键盘A键 A可以设置为其他的按键
<Alt-KeyPress-A> 表示同时按下Alt和A键 A可以设置为其他的按键
<Control-KeyPress-A> 表示同时按下Ctrl和A键 A可以设置为其他的按键
<Shift-KeyPress-A> 表示同时按下Shift和A键 A可以设置为其他的按键
<Double-KeyPress-A> 表示双击键盘A键 A可以设置为其他的按键
<Lock-KeyPress-A> 表示开启大写之后键盘A键 A可以设置为其他的按键
<Alt-Control-KeyPress-A> 表示同时按下alt+Ctrl和A键 A可以设置为其他的按键

注意:键盘事件除了entry和text组件其他组件的事件最好绑定在主界面上

窗口和组件相关事件类型
Activate 当中组件由不可以用变为可用时 针对于state的变值
Deactivate 当组件由可用变为不可用时触发
Configure 当组件大小发生变化时触发
Destory 当组件销毁时触发
FocusIn 当组件获取焦点时触发 针对于Entry和Text有效
Map 当组件由隐藏变为显示时触发
UnMap 当组件由显示变为隐藏时触发
Perproty 当窗口属性发生变化时触发
  1. 事件对象
1
2
3
4
5
6
7
8
x,y              当前触发事件时鼠标相对触发事件的组件的坐标值
x_root,y_root 当前触发事件时鼠标相对于屏幕的坐标值
char 获取当前键盘事件时按下的键对应的字符
keycode 获取当前键盘事件时按下的键对应的的ascii码
type 获取事件的类型
num 获取鼠标按键类型 123 左中右
widget 触发事件的组件
width/height 组件改变之后的大小和configure()相关
  1. 事件绑定函数(3个)
1
2
3
4
5
6
7
组件.bind('事件类型',事件函数)
为一个组件绑定一个操作
组件.bind_class('组件类型','事件类型',事件函数)
为一类组件绑定一个操作
组件类型就是创建组件的方法名 例如按钮组件:Button
组件.bind_all('事件类型',事件函数)
为所有组件绑定一个操作(所有操作都会当作对主界面的操作)
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
#单行文本
entry = tkinter.Entry(root)
entry.pack()

#事件函数
def changered(eventobj):
eventobj.widget['bg'] = 'red'
def changegreen(eventobj):
eventobj.widget['bg'] = 'green'

#事件绑定
entry.bind('<FocusIn>',changered) #entry获取焦点组件 变红
entry.bind('<FocusOut>',changegreen)#entry失去焦点组件 变绿

#注意:通过绑定函数操作,对应的事件函数,必须有形参接受事件对象。
#事件函数必须在绑定之间定义

#变红色
def changer(eventobj):
print('#@@@@@@@@@@@@@@')
eventobj.widget['bg'] = 'red'
#变绿色
def changeg(eventobj):
print('#@@@@@@@@@@@@@@')
eventobj.widget['bg'] = 'green'

root.bind('<Control-KeyPress-r>',changer)
root.bind('<Control-KeyPress-R>',changer)
root.bind('<Control-KeyPress-g>',changeg)
root.bind('<Control-KeyPress-G>',changeg)
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
#按钮1
btn1 = tkinter.Button(root,text = '1')
btn1.place(x = 20,y = 20,width = 40,height = 40)
#按钮2
btn2 = tkinter.Button(root,text = '2')
btn2.place(x = 80,y = 20,width = 40,height = 40)
#按钮3
btn3 = tkinter.Button(root,text = '3')
btn3.place(x = 140,y = 20,width = 40,height = 40)
#按钮4
btn4 = tkinter.Button(root,text = '4')
btn4.place(x = 20,y = 80,width = 40,height = 40)
#按钮5
btn5 = tkinter.Button(root,text = '5')
btn5.place(x = 80,y = 80,width = 40,height = 40)
#按钮6
btn6 = tkinter.Button(root,text = '6')
btn6.place(x = 140,y = 80,width = 40,height = 40)

def changebg(e):
e.widget['bg'] = 'green'
def changebg(e):
e.widget['bg'] = 'yellow'

#绑定按钮鼠标进入有事件
btn1.bind_class('Button','<Enter>',changebg)
#绑定按钮鼠标离开有事件
btn1.bind_class('Button','<Leave>',changebg)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#按钮
btn = tkinter.Button(root,text = '##########')
btn.pack()
#输入框
entry = tkinter.Entry(root)
entry.pack()
#文本
text = tkinter.Text(root,width = 20,height = 5)
text.pack()

#函数
def changeentry(e):
entry['bg'] = 'cyan'

#事件绑定
btn.bind_all('<Button-1>',changeentry)