Python使用Tkinter实现滚动抽奖器效果
年底,抽奖这个话题很多人都会讨论,都希望可以中奖。
接下来我就使用Python中的Tkinter模块来实现一个简单的滚动抽奖器。
一、Tkinter简介
Tkinter是Python的标准GUI(GraphicalUserInterface,图形用户接口)库,Python使用Tkinter可以快速地创建GUI应用程序。
在Python2和Python3中,Tkinter都在标准库中,无需安装即可使用。在Python2中,这个库叫Tkinter,在Python3中,这个库叫 tkinter,首字母大小写不相同,在导包时需要注意。
虽然 Python的官网已经宣布,2020年4月,Python2会退休,但是在很多公司,依然在使用Python2,所以本文的代码也会兼容Python2和Python3。
Tkinter提供了非常丰富的图形界面功能,实现一个抽奖器,只需要用到里面很少的一部分功能。
二、使用Tkinter实现滚动抽奖器的步骤
1.界面搭建
首先需要搭建一个简单的GUI界面,效果如下图(参考)。
首先创建一个大小适合的窗口,使用 Tkinter.Tk()方法即可创建并返回一个窗口对象window(自定义的对象名)。
使用window对象的 geometry(widthxheight+x+y)方法来设置窗口的大小,geometry()方法中的参数必须按照格式传入才行,参数格式为widthxheight+x+y,如'405x320+250+15',width是窗口的宽度,height是窗口的高度,中间使用乘号连接,如果敲不出这个符号,可以去源码中复制,x和 y用于设置窗口离电脑屏幕左上角的距离。
2.设置文字显示框
抽奖时,要在界面上快速地滚动显示当前的中奖者姓名,所以要设置一个文字显示框。
使用 Tkinter中的 Label类(不一定用Label,实现方法有很多),实例化Label的对象来显示文字,充当显示框。Label标签默认不可点击不可选中也不可编辑,用来显示比较少的内容(人名)是比较适合的。
要设置Label显示的文字,需要实例化一个 StringVar 类的对象,使用StringVar中的value传入初始显示的内容。在 Label中将StringVar对象传给textvariable,这样Label和StringVar就一一对应起来了。
实例化Label时,第一个参数必须是Tkinter窗口对象window,然后使用关键字参数的方式,根据需要设置显示框大小,背景颜色,显示字体等,再通过 Label对象的 place()方法设置它相对于窗口左上角的位置。
需要多个Label时,如法炮制。
3.设置按钮
在界面中,需要两个按钮,一个“开始”按钮,一个“结束”按钮,用来控制抽奖的开始和停止。(当然也可以设置成同一个按钮,实现方法也差不多)
使用 Tkinter中的 Button类,实例化 Button的对象来创建按钮。
实例化Button时,第一个参数也必须是Tkinter窗口对象window,然后根据需要设置按钮大小,背景颜色,显示字体等,最后还是使用place()方法设置它相对于的窗口左上角的位置。
当点击按钮时,抽奖器要开始抽奖或结束抽奖,也就是说点击按钮时,要触发某件事。触发的事件可以使用函数来实现,然后用匿名函数的方式传给 Button中的 command,将点击按钮和事件处理关联到一起。
三、抽奖器代码实现和效果展示
根据上面的简单分析,代码按步骤依次来实现,完整代码如下。
#coding=utf-8 importsys ifsys.version_info[0]==2: importTkinter fromTkinterimport* else: importtkinterasTkinter fromtkinterimport* importrandom data=['风清扬','无崖子','东邪','西毒','南帝','北丐'] going=True is_run=False deflottery_roll(var1,var2): globalgoing show_member=random.choice(data) var1.set(show_member) ifgoing: window.after(50,lottery_roll,var1,var2) else: var2.set('恭喜{}!!!'.format(show_member)) going=True return deflottery_start(var1,var2): globalis_run ifis_run: return is_run=True var2.set('幸运儿是你吗。。。') lottery_roll(var1,var2) deflottery_end(): globalgoing,is_run ifis_run: going=False is_run=False if__name__=='__main__': window=Tkinter.Tk() window.geometry('405x320+250+15') window.title('滚动抽奖器') bg_label=Label(window,width=70,height=24,bg='#ECf5FF') bg_label.place(anchor=NW,x=0,y=0) var1=StringVar(value='即将开始') show_label1=Label(window,textvariable=var1,justify='left',anchor=CENTER,width=17,height=3,bg='#BFEFFF', font='楷体-40bold',foreground='black') show_label1.place(anchor=NW,x=21,y=20) var2=StringVar(value='幸运儿是你吗。。。') show_label2=Label(window,textvariable=var2,justify='left',anchor=CENTER,width=38,height=3,bg='#ECf5FF', font='楷体-18bold',foreground='red') show_label2.place(anchor=NW,x=21,y=240) button1=Button(window,text='开始',command=lambda:lottery_start(var1,var2),width=14,height=2,bg='#A8A8A8', font='宋体-18bold') button1.place(anchor=NW,x=20,y=175) button2=Button(window,text='结束',command=lambda:lottery_end(),width=14,height=2,bg='#A8A8A8', font='宋体-18bold') button2.place(anchor=NW,x=232,y=175) window.mainloop()
代码中主要是按照创建窗口,创建显示框,创建按钮,编写抽奖函数等步骤来实现。
有一个点需要注意一下,当第一次抽奖还没有(点击)结束时,如果点了第二次(或很多次)抽奖,会有多次抽奖并行运行,点结束时,无法使抽奖器正常结束,甚至造成程序出错。所以在代码中设置了两个全局变量going和is_run,分别表示是否可以继续滚动(递归)显示下一个名额和当前抽奖器是否在运行,通过它们控制同时只有一次抽奖在运行。
最后的抽奖器效果如下:
这个程序可以用于抽奖,还可以用于点名等,不同使用场景只需要简单修改就可以了。
总结
以上所述是小编给大家介绍的Python使用Tkinter实现滚动抽奖器效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。