tkinter 文本框 值改变_带您一起阅读Python标准GUI模块Tkinter的源码(二)

今天继续带领大家走进Python的标准GUI模块----Tkinter。前面一讲,介绍了Tkinter中启动Tk根窗口的原理,本讲来从宏观上,介绍一下Tkinter模块中,各个重要组成部分。

Tkinter的整体架构

Tkinter其实可以看成是Python的一个包(package),我们知道,在Python中,每个包对应一个文件夹,接下来,我们打开该文件夹来看一下。

030d01689c267ffd40b022ab8351899b.png

Tkinter 文件夹中共包含14个py文件,其中主要文件包括: “__init__.py”、“colorchooser.py”、“commondialog.py”、"dialog.py"、“filedialog.py”、“messagebox.py”、“simpledialog.py”、“tix.py”以及“ttk.py”。以上每个文件都会完成一个对应的功能。接下来我们依次分析一下。

Tkinter中的重要模块简介

  1.   “__init__.py”

该文件是整个Tkinter中最重要的文件。在该文件中,主要完成了对Tkinter中最重要的一些类的封装。包括Tk类(根窗口类)、Widget(组件基类)以及一些基础的组件类,例如Button(按钮类)、Label(标签类)等等。当然,这些类之间是有复杂继承关系的,由于该模块的代码太长,比较复杂,我们就不展开来说了。在这里,我列出了该模块所包含的一些类的具体继承关系,如下图所示。

90487182a47d827e3d3ed8cf0b819fcd.png

2. “commondialog.py”

该文件中主要封装了一个对话框类----“Dialog” , 该对话框为一非模态对话框。代码如下:

class Dialog:
    command  = Nonedef __init__(self, master=None, **options):
        self.master  = master
        self.options = optionsif not master and options.get('parent'):
            self.master = options['parent']def _fixoptions(self):pass def _fixresult(self, widget, result):return result def show(self, **options):for k, v in options.items():
            self.options[k] = v
        self._fixoptions()
        w = Frame(self.master)try:
            s = w.tk.call(self.command, *w._options(self.options))
            s = self._fixresult(w, s)finally:try:
                w.destroy()except:passreturn s
容易看出,以上“Dialog”类为一个基类, 其中的类变量command代表的是对话框的类型,command不同,生成与派生出的子类也不同。例如以下代码运行后会弹出提示信息对话框。
from tkinter.commondialog import Dialogfrom tkinter import *
INFO = "info"
message = '提示信息'
root = Tk()
d01 = Dialog(root,message = message,icon=INFO)
Dialog.command = "tk_messageBox"
d01.show()
root.mainloop()

3bd6793b35636a2fdd0d377fdde2860e.png

修改以上代码中comand变量的值,所生成对话框的类型就会改变。
from tkinter.commondialog import Dialogfrom tkinter import *
root = Tk()
d01 = Dialog(root)
Dialog.command = "tk_getOpenFile"
d01.show()
root.mainloop()
代码运行后,会弹出打开文件对话框。

27e3627f0ca5c73d592a56fa8bbc4bf0.png

依据以上原理,由“Dialog”类,我们可以派生出许多各个种类的对话框。其中 “ filedialog.p y”、“messagebox.py”这两个模块中封装的所有类,几乎都是由“Dialog”类派生出来的,具体如下图。

861665da1d876a2166c11cbd70ba70b8.png

好了,鉴于篇幅所限,今天就聊到这里,下次继续聊!bye!

9452da8302eaabc12555372872152cde.png

Python青少年编程
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值