Python使用Tkinter实现滚动抽奖器

Python使用Tkinter实现滚动抽奖器

年底,抽奖这个话题很多人都会讨论,都希望可以中奖。

接下来我就使用 Python 中的 Tkinter 模块来实现一个简单的滚动抽奖器。

一、Tkinter简介

Tkinter 是 Python 的标准 GUI(Graphical User Interface,图形用户接口)库,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
import sys
if sys.version_info[0] == 2:
    import Tkinter
    from Tkinter import *
else:
    import tkinter as Tkinter
    from tkinter import *
import random

data = ['风清扬', '无崖子', '东邪', '西毒', '南帝', '北丐']
going = True
is_run = False


def lottery_roll(var1, var2):
    global going
    show_member = random.choice(data)
    var1.set(show_member)
    if going:
        window.after(50, lottery_roll, var1, var2)
    else:
        var2.set('恭喜 {} !!!'.format(show_member))
        going = True
        return


def lottery_start(var1, var2):
    global is_run
    if is_run:
        return
    is_run = True
    var2.set('幸运儿是你吗。。。')
    lottery_roll(var1, var2)


def lottery_end():
    global going, is_run
    if is_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='楷体 -40 bold', 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='楷体 -18 bold', 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='宋体 -18 bold')
    button1.place(anchor=NW, x=20, y=175)
    button2 = Button(window, text='结束', command=lambda: lottery_end(), width=14, height=2, bg='#A8A8A8',
                     font='宋体 -18 bold')
    button2.place(anchor=NW, x=232, y=175)

    window.mainloop()

代码中主要是按照创建窗口,创建显示框,创建按钮,编写抽奖函数等步骤来实现。

有一个点需要注意一下,当第一次抽奖还没有(点击)结束时,如果点了第二次(或很多次)抽奖,会有多次抽奖并行运行,点结束时,无法使抽奖器正常结束,甚至造成程序出错。所以在代码中设置了两个全局变量 going 和 is_run,分别表示是否可以继续滚动(递归)显示下一个名额和当前抽奖器是否在运行,通过它们控制同时只有一次抽奖在运行。

最后的抽奖器效果如下:

这个程序可以用于抽奖,还可以用于点名等,不同使用场景只需要简单修改就可以了。

 

 

  • 15
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
使用Pythontkinter模块可以很方便地实现学生信息管理系统。 首先,我们可以创建一个主窗口,使用tkinter的Tk()方法创建窗口对象,设置窗口的标题和大小等属性。然后,可以通过Frame来将窗口进行分割,方便将不同的组件放置在不同的区域。 接下来,可以创建一些标签(Label)和文本框(Entry)组件,用于输入和展示学生的信息,如学号、姓名、年龄等。可以使用grid()方法将这些组件放置在窗口的指定位置。 同时,可以创建一些按钮(Button)组件,用于实现各种功能,如添加学生信息、删除学生信息、查询学生信息等。可以使用command属性指定按钮的回调函数,实现按钮被点击时执行的操作。 此外,还可以使用Listbox组件展示所有学生的信息列表。可以通过添加和删除学生信息时,更新这个列表的内容,并且可以使用bind()方法,实现当在列表中选中某个学生时,显示该学生的详细信息。 最后,可以在主窗口中添加菜单栏(Menu)和下拉菜单(Cascade)等组件,实现一些额外的功能,如保存学生信息到文件、从文件中读取学生信息等。 总的来说,使用Pythontkinter模块可以方便地创建一个学生信息管理系统的用户界面。通过合理地使用各种组件,可以实现学生信息的添加、删除、查询和展示等功能,提供便捷的学生信息管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小斌哥ge

非常感谢,祝你一切顺利。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值