Python图形用户界GUI大解密(下篇)

开发 后端
这篇文章紧接着上篇文章继续围绕tkinter知识进行展开。希望能够帮助到你!

[[403616]]

上篇文章我们主要介绍了tkinter的安装、基本部件、下拉菜单、画布等内容,Python图形用户界GUI大解密(上篇),这篇文章紧接着上篇文章继续围绕tkinter知识进行展开。

十、框架

又称窗口,它是在原先的基础上又创建一个窗口,一般课用于多个窗户交互,如聊天,打游戏,我们来看下:

  1. fm = tk.Frame(root)  #在root上创建一个frame 
  2. fm.pack() #添加进去 
  3.   
  4. #在刚刚创建的frame上创建两个frame 
  5. f1= tk.Frame(fm) 
  6. f2= tk.Frame(fm) 
  7.   
  8. #添加部件 
  9. f1.pack() 
  10. f2.pack() 
  11.  
  12. 分别给两个frame添加两个部件并且颜色不同,以便于区分 
  13. tk.Label(f1, text='标签一', bg='green').pack() 
  14. tk.Button(f1, text='按钮一', bg='green').pack() 
  15. tk.Label(f2, text='标签二', bg='red').pack() 
  16. tk.Button(f2, text='按钮二', bg='red').pack() 

 

我们可以简单的理解为在主窗口中放置了一个父窗口,然后这个父窗口又增添了两个子窗口,每个子窗口都创建了两个部件。这个部件在我们进行交互时还是挺有用的。

十一、弹窗,输入

1.messagebox

接下来我们要说的就是弹窗了,我们一般需要提示的地方都需要窗口,还有确认返回什么的,下面来看看:

要想正常使用这些功能,我们需要先引入一个模块messagebox(消息盒子),弹窗我们可以把它分为以下几种:

注意先必须导入messagebox:

  1. from tkinter  import messagebox 

1.提示信息

  1. messagebox.showinfo(title='提示',message='你需要这么做'

2.警告

  1. messagebox.showwarning(title='警告',message='你不能这么做'

3.错误

  1. messagebox.showerror(title='错误',message='你做错了'

前面几个都是提示弹窗,下面介绍集中与用户交互,可以让用户选择的弹窗:

4.询问选择

  1. messagebox.askquestion(title='选择',message='你是否这样做'

5.确定或取消

  1. messagebox.askokcancel(title='选择',message='你是否这样做'

6.是,否

  1. messagebox.askyesno(title='选择',message='你是否这样做'

7.重试,取消

  1. messagebox.askretrycancel(title='选择',message='你是否这样做'

若是你想把这所有的类型集中到一个函数中设置了,也有,它就是_show()函数,用法如下:

  1. messagebox._show函数的控制参数: 
  2. default         消息框按钮 
  3. icon            消息框图标 
  4. message        消息框所显示的消息 
  5. parent          消息框的父组件 
  6. title           标题 
  7. type            类型 

2.simpledialog

为了提高用户的交互,我们需要设置一些方框供用户选择,simpledialog是你必不可少的,来看下:

导入模块:

  1. from tkinter import simpledialog 

simpledialog提供三种类型输入,即字符串 整数 浮点。我们来写下:

  1. simpledialog.askinteger(title='显示',prompt='输入',initialvalue='12'

总体来说相当简单,没什么可说的。

十二、文件对话框

用于打开文件对话框,选择文件或者文件夹,下面看看它有哪些用法吧:

首先我们先导入选择文件模块:

  1. from tkinter import filedialog 

1.返回文件名

  1. filedialog.askopenfilename() 

2.返回文件流对象

  1. filedialog.askopenfile() 

3.返回多个文件流对象

  1. filedialog.askopenfiles() 

4.返回多个文件名对象

  1. filedialog.askopenfilenames() 

5.返回目录名

  1. filedialog.askdirectory() 

6.返回文件流并创建文件

  1. filedialog.asksaveasfile() 

7.返回文件名保存

  1. filedialog.asksaveasfilename() 

8.打开文件对话框显示当前目录所有文件文件夹

  1. filedialog.LoadFileDialog(root).go() 

9.保存文件对话框

  1. filedialog.SaveFileDialog(root).go() 

十三、树型列表

它就好像一棵树一样,将它的子元素包裹在里面,同样它的模块也是在ttk里面,请看:

  1. from tkinter import ttk 
  2. t = ttk.Treeview(root)  #加载树型控件 
  3. t.pack() 
  4. n=t.insert('',0,text="hello",values=("1")) #插入一个值到控件中 
  5. n1=t.insert(n,1,text="cq",values=("2"))  #插入一个属于它的子元素也就是二级元素 
  6. n2=t.insert(n,1,text="sc",values=("2")) 
  7. t.insert(n1,2,text='fd',values=("3"))  #插入一个属于它的三级元素 
  8. t.insert(n1,2,text='we',values=("3")) 
  9. t.insert(n2,2,text='1',values=("3")) 
  10. t.insert(n2,2,text='2',values=("3")) 

 

就这样可以一直循环插入,这样就方便咱们列出大型项目的目录了,你比如说磁盘目录就可以用这个。

十四、颜色对话框

选择颜色时使用,丰富的色彩可以让你处理图片画图,非常好用:

  1. from tkinter  import colorchooser #导入模块 
  2. colorchooser.askcolor() #打开颜色选择对话框 

十五、组件排版

基本上所有的组件我们都介绍完了,相信大家通过对这章的学习应该对tkinter有了个深入的了解。

除了组件的用法之外,最重要的莫过于组件的排版了,下面我们来说一下,如何让组件放对位置。

组件有三种排列方式:pack grid place.

1.pack

它是按照上下左右的方式来排列的,例如:

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

而且它还可以设置组件填充方式,如:

  1. tk.Label(root, text='1').pack(fill='y')    #垂直填充 
  2. tk.Label(root, text='2').pack(fill='x')    #水平填充 
  3. tk.Label(root, text='3').pack(fill='both') #水平垂直填充 
  4. tk.Label(root, text='4').pack(fill='none') #不填 

2.grid

它是一种网格布局,划分为几行几列的样子。所以它一般就是设置行,列。例如:

  1. tk.Label(root, text='1').grid(row=3, column=3)#第三行第三列插入一个1 

还可以设置组件所跨越的行列数和内外部间隔距离:

  1. tk.Label(root, text='1').grid(row=3, column=3,rowspan=3,ipadx=6)#跨3行单元格距离6 
  2. tk.Label(root, text='2').grid(row=4, column=4,columnspa=3,pady=8)#跨3列边框距离 

3.place

这是一种最简单灵活的布局,使用组件坐标来放置组件的位置。

  1. tk.Label(root,text='43').place(x=100,y=200,width=10,height=5) #距离左边100,上边200宽高为10X5 

十六、鼠标键盘事件

讲完布局接着该说说最重要的东西了,绑定事件,没有这个东西组件都是没有灵魂的。我总结了以下几点:

  1. bind(sequence,func,add
  2. bind_class(className,sequence,func,add
  3. bind_all(sequence,func,add
  4. 事件参数:   
  5. sequence              所绑定的事件;如‘<Control-n>’寓意为ctrl+N键 或者<Button-3> 右键 
  6. func                   所绑定的事件处理函数; 
  7. add                    可选参数,为空字符或‘+’; 
  8. className             所绑定的类; 
  9.  
  10.  
  11. 鼠标键盘事件 
  12.     <Button-1>            鼠标左键按下,2表示中键,3表示右键; 
  13.     <ButtonPress-1>        同上; 
  14.     <ButtonRelease-1>    鼠标左键释放; 
  15.     <B1-Motion>           按住鼠标左键移动; 
  16.     <Double-Button-1>     双击左键; 
  17.     <Enter>               鼠标指针进入某一组件区域; 
  18.     <Leave>               鼠标指针离开某一组件区域; 
  19.     <MouseWheel>         滚动滚轮; 
  20.     <KeyPress-A>         按下A键,A可用其它键替代; 
  21.     <Alt-KeyPress-A>      同时按下alt和A;alt可用ctrl和shift替代; 
  22.     <Double-KeyPress-A>    快速按两下A; 
  23.     <Lock-KeyPress-A>     大写状态下按A; 
  24.      
  25.     
  26. 窗口事件 
  27.     Activate             当组件由不可用转为可用时触发; 
  28.     Configure            当组件大小改变时触发; 
  29.     Deactivate          当组件由可用转变为不可用时触发; 
  30.     Destroy              当组件被销毁时触发; 
  31.     Expose              当组件从被遮挡状态中暴露出来时触发; 
  32.     Unmap              当组件由显示状态变为隐藏状态时触发; 
  33.     Map                  当组件由隐藏状态变为显示状态时触发; 
  34.     FocusIn              当组件获得焦点时触发; 
  35.     FocusOut            当组件失去焦点时触发; 
  36.     Property             当窗体的属性被删除或改变时触发; 
  37.     Visibility           当组件变为可视状态时触发; 
  38.  
  39. 响应事件 
  40. event对象(def function(event)): 
  41.     char                按键字符,仅对键盘事件有效; 
  42.     keycode            按键名,仅对键盘事件有效; 
  43.     keysym             按键编码,仅对键盘事件有效; 
  44.     num                鼠标按键,仅对鼠标事件有效; 
  45.     type                 所触发的事件类型; 
  46.     widget               引起事件的组件; 
  47.     width,heigh        组件改变后的大小,仅Configure有效; 
  48.     x,y                鼠标当前位置,相对于窗口; 
  49.     x_root,y_root       鼠标当前位置,相对于整个屏幕 

好了,以上就是我学习tkinter所总结的所有知识点,可能还有部分地方未补充清楚,希望大家多多指正。

 

责任编辑:姜华 来源: Python爬虫与数据挖掘
相关推荐

2021-06-01 09:02:06

PythonClassPython基础

2012-02-01 08:56:32

2016-07-12 10:09:13

OpenManage大

2016-06-20 15:36:01

OpenManage大

2017-12-14 09:35:10

58速运订单调度

2023-11-29 07:30:08

Python用户界面

2022-01-26 00:02:00

PythonGUI界面

2024-09-24 10:00:55

2024-10-28 16:03:24

2017-11-22 12:40:02

PythonGUI框架

2021-06-27 17:12:27

PythonGUI图形界面

2024-06-26 12:17:48

深度学习GUI

2009-03-10 08:43:38

Erwise图形浏览器

2021-01-04 09:19:06

WindowsLinuxGUI程序

2010-06-17 16:06:18

串口协议

2011-01-18 17:47:35

2009-06-10 18:18:43

Java GUI用户界面

2011-05-17 14:38:52

身份认证校园网

2010-09-07 12:06:46

PPPoE协议

2012-05-03 08:44:31

点赞
收藏

51CTO技术栈公众号