目前我们所学的知识:
python语法:
- 创建函数(1-2,2-1)
- 数学计算(1-2,2-1)
- 分支判断(2-2)
常见类型:
- 文本与整数、浮点数的类型互相转换(1-2)
- 整数:进制转换(2-1)
GUI模型:
- 组件 组件颜色(2-1)
- 几何 行列布局法(1-2) 留白(2-2)
- 事件 按钮绑定事件(1-2)
GUI类型:
- 窗口(Tk):主窗口(1-1)
- 标签(Label):用于提示和输出,以及设置Label文本的方法(1-2)
- 文本输入(Entry):用于输入,提取Entry输入的方法(1-2)
- 按钮(Button)用于触发动作,将Button动作关联于函数的方法(1-2)
编程思考方式:
- 软件互动模式:输入,按钮,计算,输出(1-2,2-1)
很多时候,事情不是只有两种情况,比如这个需求。
考试成绩在85分以上评定为优秀
75分以上评定为良好
60分以上评定为及格
少于60分则是不及格
在python中,通过elif(否则如果)来实现多路判断的功能。
if 条件1:
满足条件1执行的语句
elif 条件2:
不满足条件1,但满足条件2执行的语句
elif 条件3:
不满足条件1,2,但满足条件3执行的语句
else:
不满足上面所有条件执行的语句
注意,elif与if一样,也是“冒号”语句。所有的冒号语句后面跟的语句,应当再缩进4个空格。如果有多条语句,每条都应该同等地缩进4个空格。
在Python中,空格不是没有含义可以随便省略的。
我们的成绩评定,可以使用这样的算法:
# 函数定义
def calculate():
# get方法获得的对象是文本类型,必须转换为整数类型(int)
value = int(entry.get())
# 评定逻辑
if value > 100:
lbLevel['text']= '超过了满分'
elif value >= 85:
lbLevel['text']= '优秀'
elif value >= 75:
lbLevel['text']= '良好'
elif value >= 60:
lbLevel['text']= '及格'
else:
lbLevel['text']= '不及格'
上节课,我们在组件周围加上了留白后,窗口显得美观一些了,tkinter还有办法让界面更漂亮一点。
我们先对比一下效果。
是不是显得更上档次一些?因为在这个界面中,我们使用了“主题”组件。让窗口有了一种扁平化的效果。我们看到的是vista主题,此外还有几种系统内置的主题效果。
为了使用主题组件,首先必须引入“主题”组件库(ttk)
from tkinter import ttk
这里我们看到导入语句的两种不同用法。
# 引入tkinter的所有组件
from tkinter import *
# 从tkinter中引入另外一个库
from tkinter import ttk
然后,在创建所有组件的时候,都从ttk中创建,即前面加ttk.例如:
entry = ttk.Entry(root)
完整源代码如下:
# 引入tkinter的所有组件
from tkinter import *
# 引入“主题”组件库
from tkinter import ttk
# 函数定义
def calculate():
# get方法获得的对象是文本类型,必须转换为整数类型(int)
value = int(entry.get())
# 评定逻辑
if value > 100:
lbLevel['text']= '超过了满分'
elif value >= 85:
lbLevel['text']= '优秀'
elif value >= 75:
lbLevel['text']= '良好'
elif value >= 60:
lbLevel['text']= '及格'
else:
lbLevel['text']= '不及格'
# root 是主窗口
root = Tk()
# 给主窗口定一个标题
root.title("成绩评定")
# 纯提示用的标签(类型Label),属于root窗口,不必起名字,定义后直接布局
ttk.Label(root, text="请输入成绩:").grid(column=1, row=1, padx=10, pady= 10)
# 输入,单行文本输入框(类型Entry),它属于root窗口
entry = ttk.Entry(root)
entry.grid(column=2, row=1, padx=10, pady= 10)
print(entry['style'])
# 输出用的标签(类型Label),属于root窗口
lbLevel= ttk.Label(root, text=" ")
lbLevel.grid(column=2, row=2, padx=10, pady= 10)
# 按钮(类型Button),属于root窗口,显示文字是“检测”,按下去动作(command)是函数calculate
# 无须起名,因为后面不用访问按钮本身
ttk.Button(root, text="评定", command=calculate).grid(column=1, row=2, padx=10, pady= 10)
# 这一句是运行窗口
root.mainloop()
小结
-
多路分支语句的用法
-
主题组件的使用
本节作业
1、我们目前只使用Label输出单行文本,其实输出多行文本也是没有问题的。
在python中,我们可以用一对“三引号”来轻松输入多行文本,(单双均可,’’'或""")。
例如:
quiz= ttk.Label(root)
quiz.grid(column=1, row=1, padx=10, pady= 10)
quiz['text']='''
题目:外面下起非常大的雨,但家中的伞都是坏的,你的选择是?
A、有一个大洞的伞
B、有一个小洞的伞
C、伞柄弯曲了的伞
D、伞柄不弯曲但是很短的伞
'''
参考例题,做一个《心理测试》软件。
2、尝试把某个elif条件中的value改为value1,运行看看,在什么情况下报错,什么情况下不报错?
3、尝试把某个elif改为elif1,运行看看?