重要通知:本站内容已停止更新,请访问新域名dp2px.com

Python图形界面tkinter的使用详解

本文参考自莫烦python视频:https://morvanzhou.github.io/tutorials/python-basic/tkinter/

导入模块

1
import Tkinter  #注意python 3.0改为了tkinter

或者直接这样导入

1
from TKinter import *

最简单的界面

注意我的python版本是:2.7.15

1
2
3
4
5
6
7
#!/usr/bin/python
# -*- coding: UTF-8 -*-

from Tkinter import *

top = Tk()
top.mainloop()

Label和Button

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
#!/usr/bin/python
# -*- coding: UTF-8 -*-

#3.0版本请使用 import tkinter as tk
import Tkinter as tk

window = tk.Tk()
window.title('我的窗口') #添加标题
window.geometry('400x200') #设置window大小

v = tk.StringVar(None, 'i am a label', None) #文字变量存储器

#width=15表示15个字符宽度,heiht=2表示2个字符高度,如果直接设置文本可以用text='labeltext'
lable = tk.Label(window, textvariable=v, bg='green', font=('Arial', 12), width=20, height=2)
lable.pack()

on_hit = False
def click_me(): #按钮点击处理方法
global on_hit
if on_hit == False:
on_hit = True
v.set('clicked you ...')
else:
on_hit = False
v.set('')

button = tk.Button(window, text="click me", width=15, height=2, command=click_me)
button.pack()

window.mainloop()

Entry和Text

Entry就是单行文本输入框,Text就是多行文本输入框,一个简单的使用demo.

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
#!/usr/bin/python
# -*- coding: UTF-8 -*-

#3.0版本请使用 import tkinter as tk
import Tkinter as tk

window = tk.Tk()
window.title('我的窗口') #添加标题
window.geometry('200x200') #设置window大小

entry = tk.Entry(window, show='*')
entry.pack()

def insert_point():
var = entry.get()
text.insert('insert', var)

def insert_end():
var = entry.get()
text.insert('end', var)


button1 = tk.Button(window, text="insert point", width=15, height=2, command=insert_point)
button1.pack()

button2 = tk.Button(window, text='insert end', command=insert_end)
button2.pack()

text = tk.Text(window, height=2)
text.pack()

window.mainloop()

Listbox列表部件

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
#!/usr/bin/python
# -*- coding: UTF-8 -*-

#3.0版本请使用 import tkinter as tk
import Tkinter as tk

window = tk.Tk()
window.title('我的窗口') #添加标题
window.geometry('200x200') #设置window大小

var1 = tk.StringVar() #创建变量
label = tk.Label(window, bg='yellow', width=4, textvariable=var1)
label.pack()


def print_select():
value = lb.get(lb.curselection()) #获取当前选中的文本
var1.set(value)

button = tk.Button(window, text='print select', command=print_select)
button.pack()

var2 = tk.StringVar()
var2.set((11, 22, 33, 44))

lb = tk.Listbox(window, listvariable=var2)

list_items = [1, 2, 3, 4]
for item in list_items:
lb.insert('end', item) #从最后一个位置开始加入值
lb.insert(1, 'first') #在第一个位置加入'first'字符
lb.insert(2, 'second') #在第二个位置加入'second'字符
lb.delete(2) #删除第二个位置的字符
lb.pack()

window.mainloop()

Radiobutton

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
#!/usr/bin/python
# -*- coding: UTF-8 -*-

#3.0版本请使用 import tkinter as tk
import Tkinter as tk

window = tk.Tk()
window.title('我的窗口') #添加标题
window.geometry('200x200') #设置window大小

var = tk.StringVar() #创建变量

label = tk.Label(window, bg='yellow', width=50, text='empty')
label.pack()

def print_selection():
label.config(text='you have selected ' + var.get()) #重新设置属性

#variable是读取值
radiobutton1 = tk.Radiobutton(window, text='Option A', variable=var, value='A', command=print_selection)
radiobutton1.pack()
radiobutton2 = tk.Radiobutton(window, text='Option B', variable=var, value='B', command=print_selection)
radiobutton2.pack()
radiobutton3 = tk.Radiobutton(window, text='Option C', variable=var, value='C', command=print_selection)
radiobutton3.pack()

window.mainloop()

尺度

1
2
scale = tk.Scale(window, label='try me', from_=5, to=11, orient=tk.HORIZONTAL, 
length=200, showvalue=0, tickinterval=2, resolution=0.01, command=print_selection)

这里的参数label是指scale部件的名称,即在这里scale部件名称为try me

  • 参数from_=5,to=11的意思就是从5到11,即这个滚动条最小值为5,最大值为11(这里使用from_是因为在python中有from这个关键词)
  • 参数orient=tk.HORIZONTAL在这里就是设置滚动条的方向,如我们所看到的效果图,这里HORIZONTAL就是横向。
  • 参数length这里是指滚动条部件的长度,但注意的是和其他部件width表示不同,width表示的是以字符为单位,比如width=4,就是4个字符的长度,而此处的length=200,是指我们常用的像素为单位,即长度为200个像素
  • 参数resolution=0.01这里我们可以借助数学题来理解,我们做的很多数学题都会让我们来保留几位小数,此处的0.01就是保留2位小数,即效果图中的5.00 9.00等等后面的两位小数,如果保留一位就是resolution=0.1 这里的showvalue就是设置在滚动条上方的显示。showvalue=0显示的就是效果图,上方无结果显示,如果改为showvalue=1,则会显示为:

Checkbox

Checkbox和Radiobtton类似,一个是多选框,一个是单选框。

1
2
3
var1 = tk.IntVar()
c1 = tk.Checkbutton(window, text='Python', variable=var1, onvalue=1, offvalue=0, command=print_selection)
c1.pack()

Canvas画布

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/python
# -*- coding: UTF-8 -*-

#3.0版本请使用 import tkinter as tk
import Tkinter as tk

window = tk.Tk()
window.title('我的窗口') #添加标题
window.geometry('200x200') #设置window大小

canvas = tk.Canvas(window, bg='blue', height=100, width=200)

image_file = tk.PhotoImage(file='../image/test.gif')
image = canvas.create_image(0, 0, anchor='nw', image=image_file)
canvas.pack()

def moveit():
canvas.move(image, 0, 2)
button = tk.Button(window, text='move', command=moveit).pack()

window.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
38
39
40
41
42
43
44
45
#!/usr/bin/python
# -*- coding: UTF-8 -*-

#3.0版本请使用 import tkinter as tk
import Tkinter as tk

window = tk.Tk()
window.title('我的窗口') #添加标题
window.geometry('200x200') #设置window大小

lable = tk.Label(window, bg='yellow', text='')
lable.pack()

counter = 0
def do_job():
global counter
lable.config(text='do' + str(counter))
counter +=1

##创建一个菜单栏,这里我们可以把他理解成一个容器,在窗口的上方
menubar = tk.Menu(window)

##定义一个空菜单单元
filemenu = tk.Menu(menubar, tearoff=0)

##将上面定义的空菜单命名为`File`,放在菜单栏中,就是装入那个容器中
menubar.add_cascade(label='File', menu=filemenu)

##在`File`中加入`New`的小菜单,即我们平时看到的下拉菜单,每一个小菜单对应命令操作。
##如果点击这些单元, 就会触发`do_job`的功能
filemenu.add_command(label='New', command=do_job)
filemenu.add_command(label='Open', command=do_job)
filemenu.add_command(label='Save', command=do_job)
filemenu.add_separator()
filemenu.add_command(label='Exit', command=window.quit)

editmenu = tk.Menu(menubar, tearoff=0)
menubar.add_cascade(label='Edit', menu=editmenu)
editmenu.add_command(label='Cut', command=do_job)
editmenu.add_command(label='Copy', command=do_job)
editmenu.add_command(label='Paste', command=do_job)

window.config(menu=menubar)

window.mainloop()

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
#!/usr/bin/python
# -*- coding: UTF-8 -*-

#3.0版本请使用 import tkinter as tk
import Tkinter as tk

window = tk.Tk()
window.title('我的窗口') #添加标题
window.geometry('200x200') #设置window大小

tk.Label(window, text='on the window').pack()

frm = tk.Frame(window)
frm.pack()

frm_left = tk.Frame(frm)
frm_right = tk.Frame(frm)
frm_left.pack(side='left')
frm_right.pack(side='right')

tk.Label(frm_left, text='on the frm left 1').pack()
tk.Label(frm_left, text='on the frm left 2').pack()

tk.Label(frm_right, text='on the frm right 1').pack()

window.mainloop()

messagebox弹框

1
2
3
4
tk.messagebox.showinfo(title='',message='')#提示信息对话窗
tk.messagebox.showwarning()#提出警告对话窗
tk.messagebox.showerror()#提出错误对话窗
tk.messagebox.askquestion()#询问选择对话窗

部件放置

pack

pack会按照上下左右的方式排列.

1
2
3
4
tk.Label(window, text='1').pack(side='top')#上
tk.Label(window, text='1').pack(side='bottom')#下
tk.Label(window, text='1').pack(side='left')#左
tk.Label(window, text='1').pack(side='right')#右

grid

grid是方格放置

1
2
3
for i in range(4):
for j in range(3):
tk.Label(window, text=1).grid(row=i, column=j, padx=10, pady=10)

place

place是坐标定位放置

1
tk.Label(window, text=1).place(x=20, y=10, anchor='nw')

anchor的坐标方位如图

您的支持是我创作源源不断的动力
------------ 本文结束#代码永无止境 ------------

此文由 水寒原创 采用 保留署名-非商业性使用-禁止演绎 4.0-国际许可协议
本文首发于[吉格斯实验室] 博客( http://www.dp2px.com ),版权所有,转载请声明作者和原文链接。

0%