python_ocr文字识别小工具学习笔记 1.4 (TKinter得学习使用之基础学习——标签、组件介绍与按钮)

python_ocr文字识别小工具学习笔记 1.4 (TKinter得学习使用之基础学习——标签、组件介绍与按钮)

组件

  1. 如果⼤家有过 Windows GUI 编程经验,那么对于 控件 ⼀次 ⼀定不会陌⽣,其实组 件和控件是⼀回事,在这⾥我们不加以区分。
  2. 组件的英⽂表述是 widget ,我们常⻅的按钮,⽂本 框等等都可以当做组件。
  3. 我们可以为⼀个窗⼝增加若⼲组件来丰富该窗⼝的功能, 我们往往需要指定这个组 件的⼤⼩和位置,我们还需要通过编程的⽅式,来指定该组件能完成什么功能。

Label 类

标签

  1. 所谓 标签 ,就是贴在物品前⾯的⼀个简短的说明, 它⽤于说明⼀些⽂字信息。
  2. 标签可以说是最简单的窗⼝组件了,它不需要执⾏任何功能,只是⽤来显示信息。
  3. 下⾯是代码示例:
from tkinter import * 
root = Tk() 
root.wm_title("这是⼀个Tkinter程序窗⼝标题") 
wl= Label(root, text = "欢迎") 
wl.pack() 
root.mainloop()

演示效果

代码分析

1.这⾥的 Label 是⼀个类,可以在 init.py ⽂件⾥查看 相应的源代码。
2. wl 是⼀个 Label 的实例,它有⼀个 text 属性 ,⽤来指定 它的⽂本内容。
3. 3. 该类的源代码也⾮常简单,它的源代码截图:

在这里插入图片描述
4. ⼤家可以看到它的标准属性,⽐如有 background , font , bitmap , padx , relief 等等, 还有 underline 等等。
5. 该类有个 pack ⽅法,没错,这个 pack ⽅法我们后⾯会 讲,⼤家可以理解为它的作 ⽤就是找个合适的位置进⾏放置即可,即 pack() 之后就选定位置放上去了。
6. 这⾥的初始化的时候,需要先指定 root,是说 wl 这个组 件是在 root 这个窗⼝的,不 是属于别的窗⼝的,以后我们 有了多窗⼝的应⽤程序,不会混淆。

Widget 类

  1. 我们上⾯发现,Label 类是继承⾃ Widget 类的,并且⾃ ⼰只有⼀个⽅法,就是⽤来 初始化⾃身的,那么要想彻底 理解 Label,就必须彻底理解 Widget。
  2. 我们找到了 Widget 的代码,发现它更加短⼩,甚⾄连个 ⽅法都没有,下⾯是 Widget 的截图:

在这里插入图片描述
3. 通过这个注释,我们可以理解如下:它是⼀个可以指定 位置并且可以使⽤ pack , place 和 grid 来布局管理的窗⼝ 组件。
4. 然后我们找到 BaseWidget ,发现它的代码也很短⼩,代 码截图如下:
在这里插入图片描述
5. 该类继承⾃ Misc ,包含了四个函数,函数的功能通过名 字就可以知道了。⾄于Misc 类,我们后⾯会讲解的。
Misc其实是英⽂ Miscellaneous 的前四个字⺟,杂项、混合体、⼤杂烩的意思。在软件⾥ 经常可以看到与misc相关的⽂件或函数名,使⽤misc来命名主要是表示该⽂件⽬前还没 归类好,不知道将它归到哪个⽅⾯或者放置在哪个地⽅⽐较好,所以暂时⽤misc。

多标签的应⽤程序

  1. 如果我们想要多个标签,该怎么办呢?
  2. 很简单,只需要声明多个标签的实例,然后分别 pack 到 窗⼝上即可。
  3. 下⾯是使⽤了三个标签的代码截图:
from tkinter import * 
root = Tk() 
root.wm_title("这是⼀个Tkinter程序窗⼝标题") 
w1 = Label(root, text = "欢迎", background = "white") 
w2 = Label(root, text = "好好学习,天天向上!", background = "green") 
w3 = Label(root, text = "轻松愉快,就选Python!", background = "red") 
w1.pack() 
w2.pack() 
w3.pack() 
root.mainloop()

组件讲解以及按钮

tkinter 的核⼼组件

  1. 在 Python 的 tkinter 中,有 21 个核⼼组件,它们提供 了最基本的功能,虽然简单, 因为使⽤频率较⾼,因此特 别重要。
  2. 这 21 个核⼼组件是 : Toplevel、Label、Button、 Canvas、Checkbutton、Entry、 Frame、LabelFrame、 Listbox、Menu、Menubutton、Message、OptionMenu、 PaneWindow 、 Radiobutton 、 Scale 、Scrollbar 、Spinbox 、Text、Bitmap、 Image。

组件的使⽤

  1. 各个组件都有相应的类,我们可以通过⾯向对象的⽅式 去使⽤它们。
  2. 这些组件的使⽤也很相似,在实例化这些组件的时候, 第⼀个参数都是⽗窗⼝或者 ⽗组件,后⾯跟着的就是该组 件的⼀些属性,⽐如上⾯我们学到的 Label 的 text 属性和 background 属性。
  3. 多个组件的位置控制⽅式也很相似,我们可以⽤ pack ⽅法来进⾏简单的布局,具体 的个例我们后⾯再说。
  4. 组件也会有些⽅法是共⽤的,⽐如 configure ⽅法来设置属性等等。

按钮

1.按钮也是⾮常重要的组件, 按钮的重要性在于它可以执⾏相应 的功能。 2. 按钮的英⽂表述是 button ,它随处可⻅,当我们单 击的时候,它可以执⾏相应的功 能。
3. 按钮在 tkinter 中有⼀个类专⻔负责它,叫做 Button ,该类也⾮常简短。
在这里插入图片描述

按钮与功能的绑定

  1. 上⽂说到,按钮可以执⾏相应的功能,这⾥的功能我们 可以理解为⼀个函数,或者 这些功能通过相应的函数去实 现。
  2. 绑定⽅式通常有如下⼏种:第⼀种,在按钮组件被声明 的时候⽤ command 属性声 明, command 属性接受⼀个函数名, 注意函数名不要加双引号。第⼆种,使⽤ bind ⽅法,该⽅ 法是 Misc 这个类的⼀个⽅法,下⾯我们仔细讲解。

1. 第⼀种⽅法绑定事件

我们要完成的功能是我们按下这个按钮的时候,就会在 窗⼝上增加⼀个 Label,它显 示“我爱 python”。 代码示例

from tkinter import * 
def myLabel(): 
	global py, i 
	s = Label(py, text = "轻松愉快,就选Python! 重要的事情说 %d 遍!" % i) 
	s.pack() 
	i+=1 # 每次点击后,i的值会⾃增1 
py = Tk() 
i = 1 # 全局变量i 初始化为 1 
b = Button(py, text = "Python", command = myLabel) 
b.pack() 
py.mainloop()

运⾏结果:(⼀开始是只有⼀个按钮的,点击⼀下,就会在这个窗⼝上多⼀个标签,下⾯ 是我点击了三次之后的截图):
在这里插入图片描述

代码解读
  1. 其实很简单,这⾥只需要注意 command 属性后⾯不要加任何的标点符号。
  2. 这⾥的 myLabel 函数中,使⽤了全局的 py 和 i 变量,需要注意。

2. 第⼆种⽅式绑定事件

下⾯使⽤第⼆种⽅式来绑定事件,这个事件完成同样的功能。
代码示例:

from tkinter import * 
def myLabel(event): # 这⾥多了⼀个event参数⽤来接收 
	global py, i 
	s = Label(py, text = "轻松愉快,就选Python! 重要的事情说 %d 遍!" % i) 
	s.pack() 
	i+=1 
py = Tk() 
i = 1 
b = Button(py, text = "Python") # command = myLabel ⽊有了 
b.bind("<Button-1>", myLabel) # 多了这⼀句 
b.pack() 
py.mainloop()

运⾏结果:(和第⼀种⽅法的结果⼀样)

代码解读:

  1. bind这个⽅法是在 Misc 类中的,可以接受三个参数,但是本例中我们只传递了两个 参数。

  2. 第⼀个参数可能对刚使⽤它的⼈来说有点复杂,常⻅的⿏标左键单击如下: <Button- 1> (也就是上⾯的代码⽤到的),或者 等。

  3. 第⼆个参数可以是⼀个函数名,记住,不要加任何的标 点符号,否则运⾏时会报错 的。

  4. 使⽤ bind 函数的时候,第⼆个参数是⼀个函数名,该函数必须接受⼀个参数,即表 示该事件。 这个参数通常⽤ event 来表示,如果我们调⽤的函数不接 受任何参数, 则会报错如下 : TypeError: myLabel() takes no arguments (1 given)
    bind的第⼀个参数是⽤字符串包含的事件类型,它采⽤的描述⽅式是:

    1. 这⾥的 MODIFIER 即键盘或者⿏标修饰符,它的全部取值如下: Control, Mod2, M2, Shift, Mod3, M3, Lock, Mod4, M4, Button1, B1, Mod5, M5 Button2, B2, Meta, M, Button3,B3, Alt, Button4, B4, Double, Button5, B5 Triple , Mod1, M1

      2.TYPE 表示类型,它的全部取值如下: Activate, Enter, Map, ButtonPress, Button, Expose, Motion, ButtonRelease, FocusIn, MouseWheel, Circulate, FocusOut, Property, Colormap, Gravity Reparent, Configure, 18
      组件介绍与按钮 KeyPress, Key, Unmap, Deactivate, KeyRelease Visibility, Destroy,Leave

    2. DETAIL 表示细节,其实也就是对第⼆个参数的⼀些辅助说明。

设置属性

下⾯我们可以设置⼀些属性,这些东⻄随着⼤量的代码示例,⼤家会接触不少的。 ⽐如我们可以设置背景⾊,这⾥直接设置属性,代码截 图:

from tkinter import * 
py = Tk() 
b1 = Button(py, text = "heloop") 
b1["width"] = 20 
b1["height"] = 4 
b1.pack() 
b2 = Button(py, text = "Python") 
b2["width"] = 20 
b2["background"] = "white" 
b2.pack() 
py.mainloop()

总结

  1. 关于按钮,我们重点理解的就是它如何和事件进⾏绑定的。
  2. 当然,使⽤⼀些其他属性来美化按钮也很重要。
  3. 下⾯要讲⼀讲布局⽅⾯的东⻄了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章