GUI小工具-pysimpleGUI + openpyxl实现导入EXCEL的名册 随机选人GUI界面

0. 起因

事情是这样的,我们班级需要选人时,总是找不到好的工具,因为名字一般都在excel表里面,又不好一个个的打,直接用列表随机选择,因此我就想着利用python实现一个GUI界面随机选人,可以导入任意的EXCEL达到选人目的

1. 工具

  1. PySimpleGUI ,2. openpyxl

2. 代码

废话不多说,我们直接上代码

import PySimpleGUI as sg
import time
from openpyxl import load_workbook


class Random_Choose():
    def __init__(self):
        sg.theme('BluePurple')
        layout = [[sg.Text('选择Excel', size=(8, 1)), sg.Input(key='Input'), sg.FileBrowse(key='file_path'),
                   sg.InputCombo([1, 2, 3], default_value='选择列', size=(6, 1), key='combo'),
                   sg.Button('导入', key='import_data')],
                  [sg.Text('')],
                  [sg.Text('', size=(8, 2), font=('Helvetica', 25),
                           justification='center', key='text'), sg.Text('', border_width=10),
                   sg.Button('开始', key='-RUN-PAUSE-', button_color=('white', '#001480'), size=(10, 2)),
                   sg.Exit(button_color=('white', 'firebrick4'), key='Exit', button_text='退出', size=(10, 2))]]
        # [sg.Button('开始', key='-RUN-PAUSE-', button_color=('white','#001480')),
        #  sg.Exit(button_color=('white', 'firebrick4'), key='Exit', button_text='退出')]]
        self.window = sg.Window('随机选人器', layout,
                                auto_size_buttons=False,
                                grab_anywhere=False)
        self.name_num = 0

        self.current_time, self.paused_time, self.paused = 0, 0, False
        self.start_time = self.time_as_int()

        self.ls = []
        self.row_num = 0

    def Excel_handle(self):
        file_path = self.values['file_path']
        wb = load_workbook(file_path)  # 读取工作表
        ws = wb.worksheets[0]

        # print(len(ws["c"]))
        # if row == 1:

        for i in range(2, len(ws[self.row_num])):
            value = ws["{0}{1}".format(self.row_num, i)].value
            self.ls.append(value)
        # print(list1)
        # num = random.randint(0, len(list1))
        # print(list1[num])

    def time_as_int(self):
        return int(round(time.time() * 100))

    def row_judge(self):
        if self.values['combo'] == 1:
            self.row_num = 'a'
        elif self.values['combo'] == 2:
            self.row_num = 'b'
        else:
            self.row_num = 'c'

    def circle_event(self):
        while True:
            # --------- Read and update window --------
            if self.paused:
                event, self.values = self.window.read(timeout=10)
                self.current_time = self.time_as_int() - self.start_time
            else:
                event, self.values = self.window.read()
            # --------- Do Button Operations --------
            if event in (sg.WIN_CLOSED, 'Exit'):  # ALWAYS give a way out of program
                break
            self.row_judge()
            if event == 'import_data':
                self.Excel_handle()
            elif event == '-RUN-PAUSE-':
                self.paused = not self.paused
                if self.paused:
                    self.paused_time = self.time_as_int()
                else:
                    self.start_time = self.start_time + self.time_as_int() - self.paused_time
                    sg.popup_quick_message("恭喜这个B:{}".format(self.ls[self.name_num]), title="提醒")
                # Change button's text
                self.window['-RUN-PAUSE-'].update(
                    '停止' if self.paused else '开始')  # 如果pause==1,则button文本更新为run,否则更新为pause

            self.window['text'].update(self.ls[self.name_num])
            if self.current_time % 3 == 1:
                self.name_num += 1
            if self.name_num == len(self.ls):
                self.name_num = 0

        self.window.close()


if __name__ == '__main__':
    choose = Random_Choose()
    choose.circle_event()

3. 功能介绍

主界面

在这里插入图片描述

按钮介绍

在这里插入图片描述

  1. browse按钮,用来浏览本地文件选择你要导入的EXCEL表
  2. 选择列表按钮,我们知道excel表有很多的列,班级(公司)在制作表格时不一定名字一定在第一列,因此提供了一个这个按钮选择你EXCEL表格所在的那一列
  3. 导入按钮,已经实现上面两个按钮操作后我们才能按这个按钮,点击后我们就可以发现EXCEL的第一个名字信息已经出现在左下角了这个标签上了
    在这里插入图片描述
  4. 开始按钮,用来控制我们选人开始和停止,点击开始后,标签会不断的动态闪过,开始按钮会变成停止按钮
    在这里插入图片描述
    5.停止按钮,当我们按停止按钮时,选择的信息就会停止下载,同时我设置了提示信息
    在这里插入图片描述

代码讲解

看有没有人看吧,这个只是记录一下我写的一个小程序,如果有人看的话,我再继续分模块的写一写代码讲解

如果你电脑没有python环境,我这样打包好的EXE文件↓

链接: https://pan.baidu.com/s/1YDlTUqldZuD3QgKhsQaIuA
提取码: hdtq

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值