零基础python入门GUI编程:2-3 多路分支

目前我们所学的知识:

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. 多路分支语句的用法

  2. 主题组件的使用

本节作业

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,运行看看?

猜你喜欢

转载自blog.csdn.net/xiaorang/article/details/105722674