Python-100-Day ③ 常用/内置模块


图形用户界面和游戏开发

tkinter

待补充

基本上使用tkinter来开发GUI应用需要以下5个步骤:

  1. 导入tkinter模块中我们需要的东西。
    1
    2
    import tkinter
    import tkinter.messagebox
  2. 创建一个顶层窗口对象并用它来承载整个GUI应用。
    1
    2
    # 创建顶层窗口
    top = tkinter.Tk()
  3. 在顶层窗口对象上添加GUI组件。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 设置窗口大小
    top.geometry('240x160')
    # 设置窗口标题
    top.title('小游戏')
    # 创建标签对象并添加到顶层窗口
    label = tkinter.Label(top, text='Hello, world!', font='Arial -32', fg='red')
    label.pack(expand=1)
    # 创建一个装按钮的容器
    panel = tkinter.Frame(top)
  4. 通过代码将这些GUI组件的功能组织起来。
    1
    2
    3
    4
    5
    6
    # 创建按钮对象 指定添加到哪个容器中 通过command参数绑定事件回调函数
    button1 = tkinter.Button(panel, text='修改', command=change_label_text)
    button1.pack(side='left')
    button2 = tkinter.Button(panel, text='退出', command=confirm_to_quit)
    button2.pack(side='right')
    panel.pack(side='bottom')
  5. 进入主事件循环(main loop)。
    1
    2
    # 开启主事件循环
    tkinter.mainloop()

pygame

TODO

文件和异常

打开文件

通过Python内置的open函数,可以指定文件名、操作模式、编码信息等来获得操作文件的对象,接下来就可以对文件进行读写操作了

1
2
3
4
5
6
7
8
9
10
open(
file, # 文件名
mode='r', # 操作模式, 默认为 'rt'
buffering=-1, # 缓存, 0为不缓存, 1为缓存一行
encoding=None, # 编码, 一般使用 utf8
errors=None, # 报错级别
newline=None, # 区分换行符
closefd=True, # 传入的file参数类型
opener=None,
)

对于操作模式, 可以参考:

字符 作用
‘r’ 读文件 (默认)
‘w’ 写文件, 首先会将文件截断
‘x’ 新建文件, 然后以写模式打开
‘a’ 写文件, 如果文件已存在, 则追加到文件末尾
‘b’ 二进制模式
‘t’ 文本模式 (默认)
‘+’ 更新文件 (可读可写)
‘U’ universal newline mode (deprecated)

使用一些模式的组合, 可以实现简单的功能:

  1. 默认模式为 'rt', 即以只读文本形式打开
  2. 使用 'w+b', 可以截断二进制文件
  3. 使用 'r+b', 不截断二进制文件
  4. 模式 'x' 包含 'w', 但会当文件已经存在时, 抛出 FileExistsError 异常

20190619141328.png

对于文本文件, 常用的打开模式如下:

1
2
3
4
5
6
7
8
9
try:
with open('test.txt', 'r', encoding='utf-8') as f:
print(f.read())
except FileNotFoundError:
print('无法打开指定的文件!')
except LookupError:
print('指定了未知的编码!')
except UnicodeDecodeError:
print('读取文件时解码错误!')

在读取文件时, 可能会出现的异常有:

异常 含义
FileNotFoundError 文件不存在
FileExistsError 文件已经存在 ('x'模式)
LookupError 制定了未知编码
UnicodeDecodeError 读取文件时解码错误

读取文本文件

打开一个文本文件后, 可以通过 read() 函数读取文件的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 参数变量
name # 文件名
mode # 模式
buffer # 缓存
encoding # 文件编码格式
errors # 报错级别
newlines # 区分换行符

line_buffering # 行缓存
closed # 文件是否关闭
write_through #

# 函数
close() # 关闭文件对象
flush() # 清理写入缓存
fileno() # 返回一个整型的文件描述符
isatty() # 判断是否连接到一个终端设备
truncate([size])
# 无 size 时, 从当前位置截断, 删除后面内容
# 有 size 时, 从开头偏移 size 处截断

# 读取
readable() # 判断文件是否为可读模式
read([size]) # 读取文件内容, size未指定或为负则全部读取
readline() # 读取一行
readlines() # 以列表形式返回所有行

# 文件指针
tell() # 返回当前文件指针位置
seekable() # 判断文件是否可以随机访问
seek(offset, whence=0) # 设置文件指针位置
# whence 可以接收相对位置的起点
# 0 -- 开始处 (默认值); 此时 offset >= 0
# 1 -- 当前文件位置; 此时 offset 可正可负
# 2 -- 结尾处; 此时 offset < 0

# 写入
writable() # 文件是否可写
write(str) # 将 str 写入文件, 返回写入的长度
writelines(seq) # 将序列按序写入文件, 如需换行须在序列中自行加入

# 重新配置文件模式
reconfigure(
*,
encoding=None,
errors=None,
newline=None,
line_buffering=None,
write_through=None,
)

通过以上这些函数, 可以实现对文本的多种读取方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 一次性读取整个文件内容
with open('致橡树.txt', 'r', encoding='utf-8') as f:
print(f.read())

# 通过for-in循环逐行读取
with open('致橡树.txt', mode='r') as f:
for line in f:
print(line, end='')
time.sleep(0.5)
print()

# 读取文件按行读取到列表中
with open('致橡树.txt') as f:
lines = f.readlines()
print(lines)

文本的写入也很简单, 使用 write() 函数即可, 不再赘述.

JSON 处理

使用 json 模块, 可以实现JSON格式数据的处理.

1
2
3
4
5
6
7
# JSON 文件  <- ->  Python 对象 (常为 dict)
dump(obj, fp) Python 对象 -> JSON格式文件 fp
load(fp) JSON格式文件 fp -> Python 对象

# JSON str <- -> Python 对象
dumps(obj) Python 对象 -> JSON格式字符串 str
loads(str) JSON格式字符串 str -> Python 对象

Python-100-Day ③ 常用/内置模块

http://blog.czccc.cc/p/53e0edd6/

作者

Cheng

发布于

2019-06-11

更新于

2022-08-06

许可协议

评论