python中每个模块都有一个名称_Python通过tkinter列出全部字体名称,及import模块的一些知识...

用Python列出windows系统全部字体,通过 tkinter.font 的 families() 函数实现。具体代码非常简单:

import tkinter

import tkinter.font

tkGUI = tkinter.Tk()

print(tkinter.font.families())

先解释一下为什么需要 tkGUI = tkinter.Tk() 这段代码。tkinter是Python内置的图形界面模块(库),源自 TCL/TK 语言。该模块里的各种函数(大部分是图形界面组件,比如按钮、文字框、输入框等)都依托于Tk(),正常的开发流程是这样的:先创建一个Tk()变量(创建Tk类的实例变量,又称实例化Tk类),然后创建各种图形组件(都要指明从属于Tk实例变量),等整个图形界面都设置的差不多了,调用Tk变量的.mainloop()函数,显示整个界面。

在上面的四行代码里,起关键作用的tkinter.font也从属于Tk(但不需要指明)。也就是说,tkinter.font需要程序里有Tk实例变量的存在,然后才能显示出字体列表。所以实际上只是调用Tk()类的一部分功能,并没有走完整个图形界面的流程,让tkGUI这段代码显得很突兀。

为什么 import 两次?

这个要从Python的模块(库)机制说起,模块是可以包含模块的,这种情况下叫主模块和子模块,tkinter.font就是tkinter的子模块。在import主模块时,是否连带引入了子模块是由开发作者控制的,如果模块配置文件里没有包含子模块,则子模块不会被自动引入。tkinter.font就是需要独立引用的子模块,所以需要improt两次,第一次引入的tkinter是为了引入tkinter.Tk。

注意:Python的import是个隐藏坑,如果自己用Python做点小工作,把py源码都放到一个目录里,能规避许多问题。如果子目录里放py源码,则子目录的py文件需要考虑绝对引用和相对引用的问题。这方面建议搜索import的研究文章,官方的文档并不深入。

简单写法

一次同时引入两个模块

from tkinter import Tk, font

可以同时引入Tk和font,但如果你需要引入的子模块比较多的时候,这种写法不易读,所以关键还是要弄懂原理。另外前面提到的相对引用也是使用 from . import xxx 这种语句引入的,所以在源码目录结构比较复杂的项目里,以避坑的角度来说 from 才是推荐的引用方式。

我个人更建议小项目的py源码应该避免使用子目录结构(没明白import机制之前)。

其它

Python提示没有tkinter模块?

安装的时候没有安装IDLE导致的,我当初就觉得用不上没有装,今天才发现TK库也没有安装。

0ad31592643968ced27c4530b5ae36873f688fe9.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值