今天继续带领大家走进Python的标准GUI模块----Tkinter。前面一讲,介绍了Tkinter中启动Tk根窗口的原理,本讲来从宏观上,介绍一下Tkinter模块中,各个重要组成部分。
Tkinter的整体架构
Tkinter其实可以看成是Python的一个包(package),我们知道,在Python中,每个包对应一个文件夹,接下来,我们打开该文件夹来看一下。Tkinter中的重要模块简介
“__init__.py”
该文件是整个Tkinter中最重要的文件。在该文件中,主要完成了对Tkinter中最重要的一些类的封装。包括Tk类(根窗口类)、Widget(组件基类)以及一些基础的组件类,例如Button(按钮类)、Label(标签类)等等。当然,这些类之间是有复杂继承关系的,由于该模块的代码太长,比较复杂,我们就不展开来说了。在这里,我列出了该模块所包含的一些类的具体继承关系,如下图所示。
该文件中主要封装了一个对话框类----“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()
from tkinter.commondialog import Dialogfrom tkinter import *
root = Tk()
d01 = Dialog(root)
Dialog.command = "tk_getOpenFile"
d01.show()
root.mainloop()
代码运行后,会弹出打开文件对话框。