Tkinter 学习笔记

简介

Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。

注意:

所有的组件都需要加入布局(例如pack()),这样才会显示出来

话需要在括号里面指明是哪一个面板,例如 button = Tkinter.Button(window)

相当于java的加入面板add


mainloop() 相当于 java的 setvisible=True


1.继承Frame类别

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
# -*- coding:utf-8 -*-
import Tkinter
# 继承 Frame 类
class Application(Tkinter.Frame):
# 初始化函数
def __init__(self,master=None):
Tkinter.Frame.__init__(self,master)
self.pack()
self.add()
# 添加组件函数
def add(self):
self.But = Tkinter.Button(self,text='QUIT',command=self.quit,fg='RED')
self.But.pack()
self.Butt = Tkinter.Button(self,text='PRINT',command=self.out,fg='blue')
self.Butt.pack()
self.text = Tkinter.Entry(self)
self.text.pack()
# 调用输出的函数
def out(self):
# 从 Entry 中获取内容
self.content = self.text.get()
print self.content
if __name__ == '__main__':
app = Application()
# 设置窗口标题
app.master.title('hello')
# 主消息循环
app.mainloop()

2.不用类,直接 Tk()

1
2
3
4
# 关键语句
from Tkinter import *
app = Tk(className='test')
app.mainloop()
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
# -*- coding:utf-8 -*-
from Tkinter import *
import tkMessageBox
import sys
# 弹窗退出
def out():
tkMessageBox.showinfo(title='MESSAGE', message='ERROR')
sys.exit(0)
# 命令行问好
def say_hello():
tkMessageBox.showinfo(title='HELLO', message='Love you so much !')
def frame():
app = Tk(className='test')
# 括号里面加上 窗口的名字 进行区分,不然同时多个的话分不清楚
# 创建列表组件
language = ['C','C++','Python','Java','Lua','php']
listb = Listbox(app)
for i in language:
listb.insert(0,i)
listb.pack()
# 创建按钮组件,button1弹窗后退出,button2只是弹窗
button1 = Button(app,text='QUIT',command=out,fg='RED')
button1.pack(side='left',expand=1)
button2 = Button(text='HELLO',command=say_hello,fg='GREEN')
button2.pack(side='right')
app.mainloop()
if __name__ == '__main__':
frame()

窗口主体框架

1
2
3
4
5
6
7
# -*- coding:utf-8 -*-
import Tkinter
window = Tkinter.Tk(screenName=None, baseName=None, className='Hello', useTk=1, sync=0, use=None)
window.geometry('900x600') # 设置面板的大小 /dʒiˈɒmətri/
window['bg'] = 'black' # 设置背景色
window.mainloop() # 显示出来

组件介绍

基本上通用的属性

1
2
3
4
bg = 'black', # 背景色
# bg = '#000000' # 也可以使用颜色代码
fg = 'green', # 前景色
font = ('Arial',15),# 字体和大小

Label 标签

1
2
3
4
5
6
7
8
9
10
label = Tkinter.Label(
window, # 添加组件的面板
text = 'OMG', # 显示的文字
bg = 'green', # 背景颜色
fg = 'red', # 前景色
font = ('Arial',20),# 字体和大小
width = 15, # 宽
height = 2 # 高
)
label.pack(side='bottom',expand=1) # pack固定组件模式的一种,side表示固定的位置(默认top)

Button 按钮

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
button = Tkinter.Button(
window, # 添加组件的面板
text = 'hit me', # 显示内容
bg = 'black', # 背景色
fg = 'green', # 前景色
width = 15, # 宽
height = 2, # 高
font = ('Arial',15),# 字体和大小
command = quit # 执行的函数,quit表示退出
)
button.pack(side='right')
# button['text'] = '233'
# 改变按钮的text

Entry 简单文本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 上面组件的条件大多数适用
# 输入内容,均以 * 显示
e = Tkinter.Entry(window,show='*')
e.pack()
# 输出,显示出输入的内容
e1 = Tkinter.Entry(window)
e1.pack()
# 按钮响应的事件
def dump():
e1.delete('0','end') # 删除e1框的所有内容
e1.insert('insert',e.get()) # 将e中的内容添加到e1中
b = Tkinter.Button(window,text='dump',command=dump)
b.pack()
# e.get 获取框中的内容
# 框中默认显示的内容
# a = Tkinter.StringVar()
# a.set('123')
# Tkinter.Entry(window,textvariable=a).pack()

Text 文本区域

1
2
3
4
5
6
7
8
9
10
# 输入内容
e = Tkinter.Text(window,bg='black',fg='green',height=2,font=15)
e.pack()
def get_text():
print e.get('0.0','end') # 打印出文本里面的所有内容
e.delete('0.0','end') # 删除文本框的内容
b = Tkinter.Button(window,text='hit me',bg='black',fg='green',command=get_text)
b.pack()

Listbox 列表部件

1
2
3
4
5
6
7
8
9
10
11
12
list1 = [1,2,3,4,5,6,7,8,9,0]
# 创建列表部件
l = Tkinter.Listbox(window)
for i in list1:
l.insert('0',i)
l.pack()
def get_num():
print l.curselection() #查看当前选择项
b = Tkinter.Button(window,text='hit it',bg='black',fg='green',font='20',command=get_num)
b.pack()

Radiobutton 选择按钮

1
2
3
4
5
6
7
8
9
10
11
12
13
14
l = Tkinter.Label(window,text='empty',bg='black',fg='green')
l.pack()
def sel():
l['text'] = 'You have select ' + var.get()
var = Tkinter.StringVar()
# variable=var, value='A'的意思就是,当我们鼠标选中了其中一个选项,把value的值A放到变量var中,然后赋值给variable
r1 = Tkinter.Radiobutton(window,text='Option A',variable=var,value='A',command=sel)
r2 = Tkinter.Radiobutton(window,text='Option B',variable=var,value='B',command=sel)
r3 = Tkinter.Radiobutton(window,text='Option C',variable=var,value='C',command=sel)
r1.pack()
r2.pack()
r3.pack()

Scale 尺度(滚动条)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def select(v): # 这里的参数 v 即滚动条定位的数据,自动传入
print v
scale = Tkinter.Scale(
window,
label = 'try_me', # scale 部件的名称
from_ = 5, # 从 5 开始
to = 11, # 到 11 结束
orient = Tkinter.HORIZONTAL, # 设置滚动条的方向为横向
length = 300, # 滚动部件的长度,单位是像素
showvalue = 0, # 0 表示当前数值不在滚动条上方显示,1表示当前数值在滚动条上方显示
tickinterval = 2, # 2个坐标点之间的间隔
resolution = 0.01, # 保留 2 位小数
command = select # 执行的函数
)
scale.pack()

Checkbutton 勾选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var1 = Tkinter.StringVar()
var2 = Tkinter.StringVar()
def select():
if var1.get() == '1' and var2.get() == '1':
print 'GOOD'
else:
print 'ERROR'
checkbutton1 = Tkinter.Checkbutton(
window,
text = 'Python', # 显示内容
variable = var1, # 将后面的 1 或者 0 放入 var1 中
onvalue = 1, # 将 1 传递给 var1
offvalue = 0, # 将 0 传递给 var2
command = select # 执行函数
)
checkbutton2 = Tkinter.Checkbutton(window,text = 'C++',variable = var2,onvalue = 1,offvalue = 0,command = select)
checkbutton1.pack()
checkbutton2.pack()

Canvas 画布

1
2
3
4
5
6
7
8
9
10
11
12
13
14
canvas = Tkinter.Canvas(window,bg='#00FFFF',width=300,height=300)
canvas.pack()
image_file = Tkinter.PhotoImage(file='ins.gif') # 创造一个变量存放 ins.gif
image = canvas.create_image(10,10,anchor='nw',image=image_file) # 10,10是放置的坐标,abchor=nw则是把图片的左上角作为锚定点,在加上刚刚给的坐标位置,即可将图片位置确定
x0, y0, x1, y1= 50, 50, 80, 80
line = canvas.create_line(x0, y0, x1, y1) # 画直线
oval = canvas.create_oval(x0, y0, x1, y1, fill='red') # 创建一个圆,填充色为`red`红色
arc = canvas.create_arc(x0+30, y0+30, x1+30, y1+30, start=0, extent=180)# 创建一个扇形,start=0和extent=180,其实就是从0度到180度
rect = canvas.create_rectangle(100, 30, 100+20, 30+20) #创建一个矩形
1
2
3
4
# 单一标签
menubar = Tkinter.Menu(window)
menubar.add_command(label='quit',command=quit)
window.config(menu=menubar)
1
2
3
4
5
6
7
8
9
10
11
# 分级标签
menubar = Tkinter.Menu(window)
filemenu = Tkinter.Menu(menubar,tearoff=0)
filemenu.add_command(label='quit',command=quit)
filemenu.add_command(label='quit_again',command=quit)
filemenu.add_separator()
filemenu.add_command(label='last_again',command=quit)
menubar.add_cascade(label='QUIT',menu=filemenu)
window.config(menu=menubar)

Frame 窗口

1
2
3
4
5
6
7
8
9
10
11
12
13
Tkinter.Label(window,text='on the window').pack() # 定义一个label显示 on the window
frm = Tkinter.Frame(window) # 在 window 上创建一个面板 frm
frm.pack()
frm_l = Tkinter.Frame(frm) # 在frm上再创建 2 个面板
frm_r = Tkinter.Frame(frm)
frm_l.pack(side='left')
frm_r.pack(side='right')
Tkinter.Label(frm,text='this is frm').pack()
Tkinter.Label(frm_l,text='this is frm_l').pack()
Tkinter.Label(frm_r,text='this is frm_r').pack()

tkMessageBox 弹窗

1
2
3
4
5
6
7
8
9
import tkMessageBox
def hit_me():
tkMessageBox.showinfo(title='HELLO', message='hahaha') # 提示信息对话框
tkMessageBox.showwarning(title='ERROR', message='Dont do this') # 提出警告对话窗
tkMessageBox.showerror(title='emmm', message='error') # 提出错误对话窗
tkMessageBox.askquestion(title='What?', message='Chooise one') # 询问选择对话窗,返回 yes 和 no
Tkinter.Button(window,text='hit_me',command=hit_me).pack()

排版方式 layout

pack()

按照上下左右的方式排列

1
2
3
4
Tkinter.Label(window,text='left').pack(side='left')
Tkinter.Label(window,text='right').pack(side='right')
Tkinter.Label(window,text='top').pack(side='top')
Tkinter.Label(window,text='bottom').pack(side='bottom')

grid

grid 是方格, 所以所有的内容会被放在这些规律的方格中.

1
2
3
4
5
6
# row 表示行,column表示列,padx表示左右间距,pady表示上下间距
Tkinter.Label(window,text='1').grid(row=1,column=1,padx=10, pady=10)
Tkinter.Label(window,text='2').grid(row=2,column=2,padx=10, pady=10)
Tkinter.Label(window,text='3').grid(row=3,column=3,padx=10, pady=10)
Tkinter.Label(window,text='4').grid(row=4,column=4,padx=10, pady=10)
Tkinter.Button(window,text='hit me',command=quit).grid(row=5,column=5,padx=10,pady=10)

place

就是给精确的坐标来定位

1
2
3
# x坐标,y坐标,anchor='nw' ==> north west 西北角开始
Tkinter.Label(window,text='1').place(x=200,y=100,anchor='nw')
Tkinter.Button(window,text='hit me',command=quit).place(x=500,y=300,anchor='nw')

Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2018 Damit5's Blog All Rights Reserved.

UV : | PV :