利用python中的tkinter创建窗口
1、窗口主体框架
import tkinter as tk
window = tk.Tk() #创建窗口
window.title("this is a test") #窗口标题
window.geometry('500x400') #窗口大小,小写字母x
#窗口的label
k = tk.Label(window,
text = 'this is a window created by tkinter', #文本
bg ='green', #字体的背景颜色
font = ('Arial',12), #字体和大小
width = 30 , height = 2 #字体所占的宽度和高度
)
k.pack() #固定
#以上是窗口的主体
window.mainloop() #结束(不停循环刷新)
2、实现简单的点击计数窗口(添加标签和按钮)
import tkinter as tk
window = tk.Tk() #创建窗口
window.title("this is a test") #窗口标题
window.geometry('500x400') #窗口大小,小写字母x
#窗口的label
textcontent = tk.StringVar() #文字变量储存
k = tk.Label(window,
textvar = textcontent, #文本,可变换
bg ='green', #字体的背景颜色
font = ('Arial',12), #字体和大小
width = 30 , height = 2 #字体所占的宽度和高度
)
k.pack() #固定窗口
hit_state = False
i = 0
textcontent.set(i) #为textcontent置值
def hit_here():
global hit_state, i #指定为全局变量,如果你想要为一个定义在函数外的变量赋值,
# 那么你就得告诉Python这个变量名不是局部的,而是 全局 的。
#我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。
if hit_state == False:
hit_state = True
i+=1
textcontent.set(i)
else:
hit_state = False
i+=1
textcontent.set(i)
#添加按钮
b = tk.Button(
window,
text = 'button',
width = 5 , height = 2,
command = hit_here #执行函数体,而不是得到函数执行的结果
)
b.pack()
#以上是窗口的主体
window.mainloop() #结束(不停循环刷新)
可以通过config对label的内容进行重新设置,如下:
l = tk.Label(window, bg='yellow', width=20, text='empty')
l.pack()
l.config(bg = 'green',text='change ' )
注:调用函数时,不带括号调用的是这个函数本身 ,是整个函数体,是一个函数对象,不须等该函数执行完成
带括号(参数或者无参)调用的是函数的执行结果,须等该函数执行完成的结果,如果没有返回则没有响应
3、添加输入、文本框、列表部件
e = tk.Entry(window,show='*')
e.pack()
t = tk.Text(window,height=2)
t.pack()
e.get() #可以得到输入的内容
t.insert('insert',var) #在文本框的光标处插入var
t.insert('end',var) #在末尾插入var
var2 = tk.StringVar()
var2.set((11,22,33,44)) #设置列表中的内容、
lb = tk.Listbox(window, listvariable=var2) #创建一个选择列表
lb.pack()
value = lb.get(lb.curselection()) #获取选中的列表中的值
注意,列表中的值必须由tk.StringVar() 来设置,直接赋值无法使用
4、添加选择按钮radiobutton
r1 = tk.Radiobutton(window, text='Option A', #按钮的显示名称
variable=var, value='b', #var 的值放在value中
command=action) #执行的操作
r1.pack()
5、scale部件
s = tk.Scale(window,label = 'scale',from_ = 0,to = 10,orient = tk.HORIZONTAL,
length = 200, showvalue = 1,tickinterval = 2,resolution = 0.01,command = showup #触发的功能 )
s.pack()
from_=0,to=10
的意思就是从0到10,即这个滚动条最小值为0,最大值为10(这里使用from_是因为在python中有from这个关键词)orient=tk.HORIZONTAL
在这里就是设置滚动条的方向,如我们所看到的效果图,这里HORIZONTAL
就是横向。length
这里是指滚动条部件的长度,但注意的是和其他部件width表示不同,width表示的是以字符为单位,比如width=4
,就是4个字符的长度,而此处的length=200
,是指我们常用的像素为单位,即长度为200个像素resolution=0.01
保留2位小数,如果保留一位就是resolution=0.1
这里的showvalue
就是设置在滚动条上方的显示。showvalue=0
上方无结果显示,如果改为showvalue=1
,则会显示当前值,下图为效果图6、勾选项checkbutton
tk.IntVar()
c = tk.Checkbutton(window, text='yes', #选项名
variable=var, onvalue=1, #选中时var的值
offvalue=0, #未选中时var的值
command=choice #选中时执行的命令 )
c.pack()
example:
var3 = tk.IntVar()
var4 = tk.IntVar()
def choice():
if(var3.get()==1)&(var4.get()==0):
l.config(bg = 'red',text = "you have choicen 'yes'!")
elif(var3.get()==0)&(var4.get()==1):
l.config(bg = 'red',text="you have choicen 'no'!")
elif(var3.get()==0)&(var4.get()==0):
l.config(bg='red', text='please choice!')
else:
l.config(text='error!you can just choice a answer')
c1 = tk.Checkbutton(window, text='yes', variable=var3, onvalue=1, #选中时var3的值
offvalue=0, #未选中时var3的值
command=choice)
c1.pack()
c2 = tk.Checkbutton(window, text='no', variable=var4, onvalue=1, #选中时var3的值
offvalue=0, #未选中时var3的值
command=choice)
c2.pack()
7、canvas画布
#创建画布
canvas = tk.Canvas(window, bg='blue', height=100, width=200)
#添加图片
image_file = tk.PhotoImage(file='ins.gif')
image = canvas.create_image(10, 10, anchor='nw', image=imagefile)
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) #创建一个扇形
rect = canvas.create_rectangle(100, 30, 100+20, 30+20) #创建一个矩形
#以上为画布的内容
canvas.pack()
image_file = tk.PhotoImage(file='ins.gif')
这一句是创造一个变量存放ins.gif
这张图片。 image = canvas.create_image(10, 10, anchor='nw', image=image_file)
里面的参数10,10
就是图片放入画布的坐标, 而这里的anchor=nw
则是把图片的左上角作为锚定点,在加上刚刚给的坐标位置,即可将图片位置确定。
8、menubar菜单
menubar = tk.Menu(window) #在窗口上添加菜单栏
filemenu = tk.Menu(menubar, tearoff=0) #filemenu放在menu中
submenu = tk.Menu(filemenu) #submenu放在filemenu中
ssubmenu = tk.Menu(submenu) #ssubmenu放在submenu中
menubar.add_cascade(label='File', menu=filemenu) #add_cascade用来创建下拉栏,filemenu命名为File
filemenu.add_command(label='New', command=do_job) #add_command用来创建命令栏,不可有子项
filemenu.add_command(label='Open', command=do_job)
filemenu.add_command(label='Save', command=do_job)
filemenu.add_cascade(label='1',menu = submenu) #submenu 命名为1
submenu.add_cascade(label='2',menu = ssubmenu) #ssubmenu 命名为2
window.config(menu=menubar) #创建完毕
效果图为:
9、Frame
Frame 是一个在 Windows 上分离小区域的部件, 它能将 Windows 分成不同的区,然后存放不同的其他部件. 同时一个 Frame 上也能再分成两个 Frame, Frame 可以认为是一种容器.可以把它看做是一个小的window
#在`window`上创建一个`frame`
frm = tk.Frame(window)
frm.pack()
#在刚刚创建的`frame`上创建两个`frame`,我们可以把它理解成一个大容器里套了一个小容器,即`frm`上有两个`frame` ,`frm_l`和`frm_r`
frm_l = tk.Frame(frm)
frm_r = tk.Frame(frm)
#这里是控制小的`frm`部件在大的`frm`的相对位置,此处`frm_l`就是在`frm`的左边,`frm_r`在`frm`的右边
frm_l.pack(side='left')
frm_r.pack(side='right')
example:
import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('200x200')
tk.Label(window, text='on the window').pack()
frm = tk.Frame(window)
frm.pack()
frm_l = tk.Frame(frm)
frm_r = tk.Frame(frm)
frm_l.pack(side='left')
frm_r.pack(side='right')
def insert_point():
value = lb.get(lb.curselection())
t.insert('insert',value)
def insert_end():
var = e.get()
t.insert('end',var)
#添加按钮
b1 = tk.Button(frm_l,text="insert point",width=15,height=2,command=insert_point)
b1.pack()
b2 = tk.Button(frm_l,text="insert end",command=insert_end)
b2.pack()
e = tk.Entry(frm_l,show='*')
e.pack()
t = tk.Text(frm_l,height=2)
t.pack()
l = tk.Label(frm_r, bg='yellow', width=20, text='empty')
l.pack()
def showup(v):
l.config(bg = 'yellow',text='you have selected ' + v)
s = tk.Scale(frm_r,label = 'scale',from_ = 0,to = 10,orient = tk.HORIZONTAL,
length = 200, showvalue = 1,tickinterval = 2,resolution = 0.01,command = showup)
s.pack()
tk.Label(frm_l, text='左面的部分').pack()
tk.Label(frm_r, text='右面的部分').pack()
window.mainloop()
效果图:
10、messagebox 弹窗以及放置位置pack、grid、place
tk.messagebox.showinfo(title=' ',message=' ')#提示信息对话窗
tk.messagebox.showwarning(title=' ',message=' ')#提出警告对话窗
tk.messagebox.showerror(title=' ',message=' ')#提出错误对话窗
tk.messagebox.askquestion(title=' ',message=' ')#询问选择对话窗
#pack
pack(side='top')#上
pack(side='bottom')#下
pack(side='left')#左
pack(side='right')#右
#grid
grid(row=i, column=j, padx=10, pady=10)
#这里的参数 row为行,colum为列,padx就是单元格左右间距,pady就是单元格上下间距。
#place
place(x=20, y=10, anchor='nw')
#将这个部件放在坐标为(x,y)的这个位置 后面的参数anchor=‘nw’ 意为锚定点是西北角。