案例介绍
欢迎来的我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用Python编程实战案例,做一个简易的随机提问器。随机提问器主要实现随机,乱序,提取的功能。通过实战我们将学会Python内置tkinter的语法知识。
案例演示
我们点击“开始”,学生名字开始滚动;点击“停”,被抽中的学生将“中奖”
案例设计
Python实战案例-随机提问我们来看此案例的思维导图设计,包括案例描述,页面设计和源码学习。其中源码学习包含了random,time,tkinter三部分代码。
源码学习
进入核心代码学习,我们先来看利用random的核心代码。该段代码首先创建了学生列表,再利用赋值将该列表的值赋值给t,最后利用random.shuffle()函数对该列表进行乱序。
students = ['张三', '李四', '王五', '赵六', '周七', '钱八']
# 变量,用来控制是否滚动显示学生名单
root.flag = False
def switch():
root.flag = True
while root.flag:
# 随机打乱学生名单
t = students[:]
random.shuffle(t)
t = itertools.cycle(t)
然后我们来编写核心的tkinter代码,通过btnStop.place用来滚动显示学生名单的3个Label组件,然后利用红色Label组件,表示中奖名单。
def btnStopClick():
# 单击“停”按钮结束滚动显示
root.flag = False
time.sleep(0.3)
tkinter.messagebox.showinfo('恭喜', '本次中奖:'+lbSecond['text'])
btnStop = tkinter.Button(root, text='停', command=btnStopClick)
btnStop.place(x=150, y=10, width=80, height=20)
# 用来滚动显示学生名单的3个Label组件
# 可以根据需要进行添加,但要修改上面的线程函数代码
lbFirst = tkinter.Label(root, text='')
lbFirst.place(x=80, y=60, width=100, height=20)
# 红色Label组件,表示中奖名单
lbSecond = tkinter.Label(root, text='')
lbSecond['fg'] = 'red'
lbSecond.place(x=80, y=90, width=100, height=20)
lbThird = tkinter.Label(root, text='')
lbThird.place(x=80, y=120, width=100, height=20)
# 启动tkinter主程序
root.mainloop()
总结思考
学习点 1、time.sleep(secs):位于 time 模块中的 sleep (secs) 函数,可以实现令当前执行的线程暂停 secs 秒后再继续执行
# 单击“停”按钮结束滚动显示
root.flag = False
time.sleep(0.3)
tkinter.messagebox.showinfo('恭喜', '本次中奖:'+lbSecond['text'])
2、threading:提供了一个比thread模块更高层的API来提供线程的并发性,这些线程并发运行并共享内存
# 每次单击“开始”按钮启动新线程
t = threading.Thread(target=switch)
t.start()
3、Itertools:Python中,迭代器(Iterator)是常用来做惰性序列的对象,只有当迭代到某个值的时候,才会进行计算得出这个值
t = itertools.cycle(t)
# 滚动显示
问答 1、time.sleep(secs)可以实现令当前执行的线程暂停 secs 秒后再继续执行对吗?2、threading是用来实现并发操作的吗?
关注我,跟着我每天学习一点点,让你不再枯燥,不再孤单..
全网可搜:小院里的霍大侠, 免费获取简单易懂的实战编程案例。编程/就业/副业/创业/资源。