Python Tkinter

转自:https://blog.csdn.net/sunshine_lyn/article/details/81429819

Tkinter 是 tk 的 python 接口,使用 python 进行窗口视窗的设计。其操作非常的简单易懂,对于和我一样的初学者来说,是入门之选。

本博文包括Label、Button、Entry、Text、Listbox、Radiobutton、Scale、Checkbutton、Canvas、Manubar、Frame、Messagebox、pack grid place的使用。

窗口主题框架

一个Tkinter主体框架可以包含下面几个部分:

  1. 定义 window 窗口并设置 window的一些属性
  2. 编写窗口内容
  3. 执行window.mainloop()

 
 
  1. import tkinter as tk #导入tkinter模块
  2. window = tk.Tk() #主窗口
  3. window.title( 'my window') #窗口标题
  4. window.geometry( '200x100') #窗口尺寸
  5. ### 这里是窗口的内容###
  6. window.mainloop() #循环消息,让窗口活起来

窗口控件

下面对窗口内容可包括的一些控件操作进行简单的介绍:

  • tk.Label 标签

 
 
  1. l = tk.Label(window,
  2. text= 'OMG! this is TK!', # 标签的文字
  3. bg= 'green', # 背景颜色
  4. font=( 'Arial', 12), # 字体和字体大小
  5. width= 15, height= 2 # 标签长宽
  6. )
  7. l.pack() # 固定窗口位置

如果我们需要通过变量的形式控制Label的显示,那么需要用到var变量,如下:


 
 
  1. var = tk.StringVar() # 文字变量储存器
  2. var.set( 'OMG! This is TK!')
  3. l = tk.Label(window,
  4. textvariable=var, # 使用 textvariable 替换 text, 因为这个是可以变化的
  5. bg= 'green', font=( 'Arial', 12), width= 15, height= 2)
  6. l.pack()

上述的var变量值可以通过编写条件控制语句等进行更改,实现某种功能。

  • tk.Button 按钮

 
 
  1. b = tk.Button(window,
  2. text= 'hit me', # 显示按钮上的文字
  3. width= 15, height= 2,
  4. command=hit_me) # 点击按钮执行的命令
  5. b.pack() # 按钮位置

点击按钮触发事件的函数hit_me,可自行定义相应的功能,由于python执行的顺序是从上往下,所以函数必须要放在按钮的上面。参考如下:


 
 
  1. on_hit = False # 默认初始状态为 False
  2. def hit_me():
  3. global on_hit # on_hit为全局变量
  4. if on_hit == False: # 从 False 状态变成 True 状态
  5. on_hit = True
  6. var.set( 'you hit me') # 设置标签的文字为 'you hit me'
  7. l.config(bg= 'blue') #更改label的背景颜色,也可以更改其他选项
  8. else: # 从 True 状态变成 False 状态
  9. on_hit = False
  10. var.set( '') # 设置 文字为空
  11. l.config(bg= 'red')
  • tk.Entry 输入

创建输入框entry,用户输入任何内容都显示为*


 
 
  1. e = tk.Entry(window, show= '*') #输入框,输入时显示*
  2. e.pack()
  • tk.Text 文本框

创建文本框,用户可输入内容


 
 
  1. t = tk.Text(window,height= 2) #创建文本框,用户可输入内容
  2. t.pack()

如果要实现entry输入的内容显示在text里面,参考如下:


 
 
  1. var = e.get() #从entry获得变量值
  2. t.insert( 'insert', var) #表示在光标选定的位置输入
  3. t.insert( 'end',var) #表示在最后输入
  4. t.insert( 2.2, var) #表示在第二行的第二列输入
  • tk.Listbox 列表

 
 
  1. var2 = tk.StringVar()
  2. var2.set(( 11, 22, 33, 44)) #为变量设置值
  3. #创建Listbox
  4. lb = tk.Listbox(window, listvariable=var2) #将var2的值赋给Listbox
  5. #创建一个list并将值循环添加到Listbox控件中
  6. list_items = [ 1, 2, 3, 4]
  7. for item in list_items:
  8. lb.insert( 'end', item) #从最后一个位置开始加入值
  9. lb.insert( 1, 'first') #插入操作,在第一个位置加入'first'字符
  10. lb.insert( 2, 'second') #在第二个位置加入'second'字符
  11. lb.delete( 2) #删除操作,删除第二个位置的字符
  12. lb.pack()
  • tk.Radiobutton 选择按钮

 
 
  1. var = tk.StringVar()
  2. l = tk.Label(window, bg= 'yellow', width= 20, text= 'empty')
  3. l.pack()
  4. def print_selection():
  5. l.config(text= 'you have selected ' + var.get()) #var.get()即获取到变量 var 的值
  6. r1 = tk.Radiobutton(window, text= 'Option A', variable=var, value= 'A', command=print_selection)
  7. r1.pack()
  8. r2 = tk.Radiobutton(window, text= 'Option B', variable=var, value= 'B', command=print_selection)
  9. r2.pack()
  10. r3 = tk.Radiobutton(window, text= 'Option C', variable=var, value= 'C', command=print_selection)
  11. r3.pack()

其中variable=var,value='A'的意思就是,当我们鼠标选中了其中一个选项,把value的值A放到变量var中,然后赋值给variable

  • tk.Scale 尺度

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

这里的参数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,则会显示为:

  • tk.Checkbutton 勾选项

 
 
  1. l = tk.Label(window, bg= 'yellow', width= 20, text= 'empty')
  2. l.pack()
  3. def print_selection():
  4. if(var1.get() == 1) & (var2.get() == 0):
  5. l.config(text= 'I love only python!')
  6. elif(var1.get() == 0) & (var2.get() == 1):
  7. l.config(text= 'I love only C++!')
  8. elif (var1.get() == 0) & (var2.get() == 0):
  9. l.config(text= 'I do not love either!')
  10. else:
  11. l.config(text= 'I love both!')
  12. var1 = tk.IntVar()
  13. var2 = tk.IntVar()
  14. c1 = tk.Checkbutton(window, text= 'Python', variable=var1, onvalue= 1, offvalue= 0, command=print_selection)
  15. c2 = tk.Checkbutton(window, text= 'C++', variable=var2, onvalue= 1, offvalue= 0, command=print_selection)
  16. c1.pack()
  17. c2.pack()

参数onvalue和前面讲的部件radiobutton中的value相似,当我们选中了这个checkbutton,onvalue的值1就会放入到var1中, 然后var1将其赋值给参数variableoffvalue用法相似,但是offvalue是在没有选中这个checkbutton。

  • tk.Canvas 画布

 
 
  1. canvas = tk.Canvas(window, bg= 'blue', height= 100, width= 200)
  2. image_file = tk.PhotoImage(file= 'ins.gif')
  3. image = canvas.create_image( 10, 10, anchor= 'nw', image=image_file)
  4. x0, y0, x1, y1 = 50, 50, 80, 80
  5. #两点确定一条直线。此处给的就是从坐标(50,50)到(80,80)画一条直线。
  6. line = canvas.create_line(x0, y0, x1, y1)
  7. #画一个圆,填充色为red
  8. oval = canvas.create_oval(x0, y0, x1, y1, fill= 'red')
  9. #从0度到180度画一个扇形
  10. arc = canvas.create_arc(x0+ 30, y0+ 30, x1+ 30, y1+ 30, start= 0, extent= 180)
  11. #创建一个矩形
  12. rect = canvas.create_rectangle( 100, 30, 100+ 20, 30+ 20)
  13. 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则是把图片的左上角作为锚定点,在加上刚刚给的坐标位置,即可将图片位置确定。 最后一个参数的意思大家应该都知道,就是将刚刚存入的图片变量,赋值给image

  • tk.Manubar菜单栏

 
 
  1. #创建一个菜单栏,可以理解成一个容器,在窗口的上方
  2. menubar = tk.Menu(window)
  3. #定义一个空菜单单元
  4. filemenu = tk.Menu(menubar, tearoff= 0)
  5. #将上面定义的空菜单命名为`File`,放在菜单栏中,就是装入那个容器中
  6. menubar.add_cascade(label= 'File', menu=filemenu)
  7. #在File中加入New的小菜单,即我们平时看到的下拉菜单,每一个小菜单对应命令操作。
  8. #如果点击这些单元, 就会触发`do_job`的功能
  9. filemenu.add_command(label= 'New', command=do_job)
  10. filemenu.add_command(label= 'Open', command=do_job)
  11. filemenu.add_command(label= 'Save', command=do_job)
  12. #添加一条分割线
  13. filemenu.add_separator()
  14. filemenu.add_command(label= 'Exit', command=window.quit)
  15. editmenu = tk.Menu(menubar, tearoff= 0)
  16. menubar.add_cascade(label= 'Edit', menu=editmenu)
  17. editmenu.add_command(label= 'Cut', command=do_job)
  18. editmenu.add_command(label= 'Copy', command=do_job)
  19. editmenu.add_command(label= 'Paste', command=do_job)
  20. submenu = tk.Menu(filemenu)
  21. filemenu.add_cascade(label= 'Import', menu=submenu, underline= 0)
  22. #这里和上面也一样,在`Import`中加入一个小菜单命令`Submenu1`
  23. submenu.add_command(label= "Submenu1", command=do_job)
  24. window.config(menu=menubar)

效果如下:

  • tk.Frame 框架

 
 
  1. frm = tk.Frame(window) #在`window`上创建一个frame
  2. frm.pack()
  3. #在刚刚创建的`frame`上创建两个`frame`,我们可以把它理解成一个大容器里套了一个小容器,即`frm`上有两个`frame` ,`frm_l`和`frm_r`
  4. frm_l = tk.Frame(frm)
  5. frm_r = tk.Frame(frm)
  6. #这里是控制小的`frm`部件在大的`frm`的相对位置,此处`frm_l`就是在`frm`的左边,`frm_r`在`frm`的右边
  7. frm_l.pack(side= 'left')
  8. frm_r.pack(side= 'right')
  9. #这里的三个label就是在我们创建的frame上定义的label部件,还是以容器理解,就是容器上贴了标签,来指明这个是什么,解释这个容器。
  10. tk.Label(frm_l, text= 'on the frm_l1').pack()
  11. tk.Label(frm_l, text= 'on the frm_l2').pack()
  12. tk.Label(frm_r, text= 'on the frm_r1').pack()
  • tk.Messagebox 弹窗

给出几种常见形式的弹窗提示:


 
 
  1. tk.messagebox.showinfo(title= '',message= '') #提示信息对话窗
  2. tk.messagebox.showwarning() #提出警告对话窗
  3. tk.messagebox.showerror() #提出错误对话窗
  4. tk.messagebox.askquestion() #询问选择对话窗
  5. print(tk.messagebox.askquestion()) #返回yes和no
  6. print(tk.messagebox.askokcancel()) #返回true和false
  7. print(tk.messagebox.askyesno()) #返回true和false
  8. print(tk.messagebox.askretrycancel()) #返回true和false
  • tk.pack  tk.grid  tk.place 放置位置

tk.pack:按照上下左右的方式排列。


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

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


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

以上的代码就是创建一个四行三列的表格,其实grid就是用表格的形式定位的。这里的参数 row为行,colum为列,padx就是单元格左右间距,pady就是单元格上下间距。

tk.place:给精确的坐标来定位,如此处给的(20,10),就是将这个部件放在坐标为(x,y)的这个位置 后面的参数anchor=nw就是前面所讲的锚定点是西北角。

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

以上就是关于tkinter学习内容的整理。我们可以感受到它的简洁明了,易于初学者上手。之后也会编写一些有趣的窗口进一步的了解tkinter的精髓。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值