案例介绍

欢迎来的我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用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是用来实现并发操作的吗?

关注我,跟着我每天学习一点点,让你不再枯燥,不再孤单..

全网可搜:小院里的霍大侠, 免费获取简单易懂的实战编程案例。编程/就业/副业/创业/资源。