AI 摘要

这篇文章介绍了一款功能强大的点名软件,它可以随机点名,支持单人抽取和多人抽取(不重复)。另外,它还提供了名单管理功能,用户可以自定义点名名单。此外,软件还支持创建多个名单,并可以在不同场景下进行切换使用。😊 还有,软件界面经过多次优化,使用起来非常方便。如果你是老师,你还可以将点名的历史记录导出为文本,方便记录和分析。🎉 最新的5.9版本还提供了语音播报和名单校验功能,防止名单被恶意篡改。🚀 更棒的是,这款软件是免费的,无广告,而且还是开源的。老师们可以私信免费获取定制版本哦!👩‍🏫
  1. 点名功能:可以单人抽取或选择抽取多人(不重复),实现随机点名的功能。
  2. 名单管理:软件提供了名单管理功能,用户可以通过编辑名单功能来自定义点名名单。
  3. 多名单功能: 用户可以创建多个名单并切换名单,实现在不同场景下使用不同名单的需求。
  4. 自动检查更新: 软件支持自动检查更新,用户可以通过配置文件关闭更新提示。
  5. UI优化和用户体验:软件界面经过多次优化,基本达到能看的程度...
  6. 导出功能: 用户可以将点名的历史记录导出为图表或文本,方便记录和分析。
  7. 背景音乐:软件支持单抽时的背景音乐,用户可以在按照提示开启该功能。
最新版下载地址:
https://yish.lanzouw.com/b038hjo8f
密码:cmti
32位版本下载(支持旧版系统):
https://yish.lanzouw.com/b03979r0b
密码:e4ch
32位版本未经过广泛验证,如果在使用过程中遇到任何问题,请在本篇下方评论区留言
最低系统要求:Win7 32位

如果32位也无法使用,比如缺少dll等,请安装vc2015。
如果学校电脑带有还原功能,请私信获取定制单文件版

更新时请备份名单,然后卸载旧版本重新安装,否则可能出现错误

提示:4.8起更换了打包方式,改成安装包的形式,因此你可以在安装4.8后删除4.7,也可以安装到u盘里面便携使用

下载通用版4.9(最后的单文件版)


使用说明

更改名单

方法一:首次打开点名器会自动打开名单,您需要将其中的1-20数字删掉,换成需要点名的名单,保存即可

方法二:在点名器右侧功能区也可进行修改名单操作。

每次启动时会提供多名单切换以及新增或删除名单功能

单抽背景音乐

首次使用单抽功能后,目录下会出现dmmusic文件夹(也可在功能区点击"背景音乐目录"按钮打开音乐目录),在文件夹中放入mp3格式类型的音乐文件即可,每次单抽时会随机播放音乐

关闭检查更新

首次使用时会提供检查更新功能设置界面,如果后续需要更改,请删除根目录下的allowcheck.ini即可重新开启设置界面

关闭多名单弹窗

默认会在每次启动时弹窗提供名单选择界面,如需关闭,请在目录下(如没有请新建)的allownameselect.ini文件中将0改成1即可关闭


5.92版本发布说明

2024.3.7
1.新增听写模式
2.修复首次使用名单管理器不能正常工作
3.优化代码


5.91版本发布说明

2024.1.8 (修复了5.9版本无法启动的问题)
1.新增语音播报功能
2.新增名单校验功能
3.优化部分功能逻辑
4.更换新版Logo
(此版本变更较大,可能含有未知错误,如需稳定使用请选择5.8版本、如果遇到问题也可反馈给我们)


5.8版本发布说明

2023.11.19
1.新增首次开启时的检查更新开关
2.删除使用率较低的功能(保存为图表)
3.使用nuitka打包,大幅降低程序占用空间(44mb→29mb),大幅提升启动速度(2.6s→1.1s)
4.优化部分功能逻辑
5.支持32位系统 (By QQB 11.22,基于Python3.8)


5.7版本发布说明

(Optional可选更新,不会推送)
2023.11.11
1.使用nuitka方法代替pyinstaller,大幅降低启动时间(5.6启动2.3秒,5.7启动1.1秒),也减少了空间占用
2.由于nuitka下pygame库大量调用wind32api、wind2con等会导致杀毒软件误报,请信任处理
3.此版本仅做优化,没有任何新功能,可选择性升级
4.修复统计历史记录时,关闭弹窗仍会保存为文本的问题
5.在nuitka中,使用了 --windows-uac-admin方法,使提权代码不再必须
6.调整了一些弹窗逻辑


5.6版本发布说明

2023.10.13
1.优化多名单体验
2.新增检查更新开关,Allowcheck.ini文件中改为0就可以关闭检查更新
3.调整部分按钮功能
4.优化界面
5.精简打包输出


5.52版本发布说明

2023.10.12
1.修复多名单选择后未切换问题(该死的Global忘记加上去了)
2.新增检查更新开关Allowcheck.ini文件中改为0就可以关闭检查更新
3.优化首次启动界面

下载地址https://yish.lanzouw.com/b038hjo8f
密码:cmti


5.5版本发布说明

5.5版本多名单存在严重BUG导致切换名单失效,正在紧急修复,稍后推送5.52版本,请不要再使用5.5版本

2023.10.9
1.修复多名单选择窗口未按预期显示
2.调整布局
3.更换检查更新api
已知问题
1.首次运行的弹窗未适配高dpi
2.导出历史记录时选择关闭,会默认选择导出到文本
以上问题不会影响体验,将于下个版本中修复


5.4 测试版发布说明

2023.9.10
1.新增多名单功能
已知问题
1.首次打开可能报错(已修复)
2.首次打开会有一个空的选择名单界面,关闭即可、
3.每次打开都会出现选择名单的界面(即使只有一个名单)


5.3版本发布说明

2023.6.25

1.优化弹窗逻辑
2.优化高DPi的ui布局
3.新增背景音乐文件按钮

为了统计名单,程序使用了提权代码,可能被杀毒软件误杀,如有疑问请查看源码


5.2版本发布说明

2023.6.23

1.新增名单中奖统计功能,并支持导出为图表或文本

2.优化背景音乐体验

3.修复大量BUG

4.优化弹窗代码

5.一定程度上优化跨平台(Linux系统)的支持

linux请使用5.1获得完整适配


5.1版本发布说明

此版本更新内容与5.2相同,但提供了完整的Linux系统支持(感谢limuy2022),5.2更适用于Windows平台

5.1下载


5.0版本发布说明

5.0版本更新内容2022.12.22
1.调整UI布局以便显示更长名字
2.优化弹窗
3.新增单抽时背景音乐,开启方式请查看文件目录下的说明
4.新增名单长度读取
5.精简代码
软件完全免费并开源,意味着任何人都能查看这个工具的源代码,如果你是付费购买的,那说明你已经被骗了,请尝试立即退款并举报
经网友反馈360可能会误杀此工具,请将点名器加入信任区。


4.9版本更新内容

2022.10.3
1.调整UI颜色
2.优化部分弹窗提示效果
3.优化更新提示
4.优化连抽体验
5.精简代码


4.8版本更新内容

2022.10.1
1.新增桌面高考倒计时(仅限定制版,通用版没有)
2.进一步修复高DPi问题
3.优化自动更新体验
4.更换打包方式,使程序更快启动


4.7版本更新内容

2022.9.25
1.新增自动检查更新
2.优化体验


4.6版本更新内容

2022.9.24
1.修复高DPI/4K分辨率下的崩溃问题,但在过高分辨率或DPI下仍会出现字体大小异常的问题 (暂无修复计划)
2.修复某些情况下无法修改名单的问题
3.优化界面和提示语
4.更改打包方式,提高运行速度


3.99版本更新内容

  • 2022.8.13

此更新3.99仅限13班定制版点名器,其余版本仍为3.90-3.95(3.90到3.95内容完全一样)

①修复图标过于模糊的问题

②修复连抽区间在43-100内无效的问题

③优化UI间隙


3.9 版本更新内容

  • 2022.8.12

①增大界面,增大字体,使文字能更好的在大屏幕上展示

②缓解了高DPI模式下无法完全显示文字的问题(还可以手动在电脑设置中将屏幕缩放比例调整至100%解决此问题)

③优化了连抽模式的体验


3.0版本更新内容

  • 2022.7.29

①全新界面,新增连抽和历史记录

②真随机抽取

2022.6 2.0首个版本


关于

这个点名器基于Python:pyqt5,我Yish_和QQBlimuy2022制作

可以每次单人抽取也可以自己选择连抽人数进行多人连抽,并将这些随机抽取的学生姓名历史数据显示,能够活跃课堂氛围,排除主观因素,真正做到随机点名。

https://www.bilibili.com/video/BV1ge4y1a7Q4/

课堂点名器 – QQB's Blog (hltool.top)

Yish1/ktdmq: 课堂点名器 (github.com)

----------------------------------------------


定制版本

定制版本名单封装至程序内,无法修改名单!!!您可以通过邮箱联系我获取定制版,这是免费的 邮箱:Yish@cmxz.top

----------------------------------------------

5.6部分源码展示

def name_list_selector():
    global txtnum, name_list, file_path, namefolder, mdnum
    namefolder = "name"
    namefolder1 = os.path.dirname(os.path.abspath(__file__))
    namefolder_path = os.path.join(namefolder1, namefolder)
    if not os.path.exists(namefolder_path) or not os.path.isdir(namefolder_path):
        print(f"名单文件夹不存在,已经在这个位置创建:{namefolder_path}")
        os.makedirs(namefolder_path)
    txtnum = [filename for filename in os.listdir(namefolder) if filename.endswith(".txt")]
    ifonefile = f"{namefolder_path}\\{', '.join(txtnum)}"
    mdnum = len(txtnum)
    if not txtnum:
        name_list = list(make_name_list())
        init_name(name_list)
        app = QApplication(sys.argv)
        welcom = QMessageBox()
        welcom.setWindowTitle("欢迎使用")
        welcom.setText("欢迎使用沉梦课堂点名器!\n本程序支持单抽,连抽。同时提供单抽时背景音乐、多名单支持、数据导出等功能。\n\n请及时修改目录下的名单文件,请确保格式正确(将原本的1-20的数字删除,一行输入一个名字,像下面这样):\n名字1\n名字2\n名字3\n名字4\n名字5\n名字6\n......\n\n需要帮助请点击关于。\n\n沉梦小站")
        # 设置消息框的图标和按钮
        welcom.setIconPixmap(QIcon('yish.ico').pixmap(64, 64))  # 64x64 大小的图标
        welcom.setStandardButtons(QMessageBox.Ok)
        welcom.exec_()
        opentext(name_path)
        print("这应该是首次启动")

    if mdnum > 0:
        # 创建窗口和UI元素
        app1 = QApplication([])
        window = QWidget()
        window.setWindowTitle('选择名单')
        window.setGeometry(100, 100, 500, 200)
        layout = QVBoxLayout()
        combo_box = QComboBox(window)
        custom_list_view = QListView(combo_box)
        combo_box.setFixedHeight(40)
        custom_list_view.setStyleSheet("QListView::item { height: 40px; }")
        combo_box.setView(custom_list_view)
        layout.addWidget(combo_box)
        button = QPushButton('确定', window)
        button.setFixedHeight(40)
        layout.addWidget(button)
        window.setLayout(layout)
        screen = QDesktopWidget().screenGeometry()
        window_width, window_height = window.sizeHint().width(), window.sizeHint().height()
        x = int((screen.width() - window_width) // 2.25)
        y = int((screen.height() - window_height) // 2.25)
        window.setGeometry(x, y, 500, 200)
        add_button = QPushButton('新增名单', window)
        add_button.setFixedHeight(40)
        layout.addWidget(add_button)
        delete_button = QPushButton('删除名单', window)
        delete_button.setFixedHeight(40)
        layout.addWidget(delete_button)

        def add_new_list():
            newfilename, ok_pressed = QInputDialog.getText(window, "新增名单", "请输入名单名称:")
            if ok_pressed and newfilename:
                print(f"新增名单名称是: {newfilename}")
                newnamepath = os.path.join("name", f"{newfilename}.txt")# 打开文件并写入内容
                with open(newnamepath, "w", encoding="utf8") as f:
                    pass
                message = f"已创建名为 '{newfilename}.txt' 的文件,路径为: {newnamepath}"
                QMessageBox.information(window, "新建成功", message, QMessageBox.Ok)
                opentext(newnamepath)
                txtnum = [filename for filename in os.listdir("name") if filename.endswith(".txt")]
                combo_box.clear()  # 清空下拉框的选项
                combo_box.addItems(txtnum)  # 添加新的文件名到下拉框
        add_button.clicked.connect(add_new_list)
        
        def delete_list():
            target_filename, ok_pressed = QInputDialog.getText(window, "删除名单", "请输入要删除的名单名称:")
            if ok_pressed and target_filename:
                target_filepath = os.path.join("name", f"{target_filename}.txt")
                if os.path.exists(target_filepath):
                    os.remove(target_filepath)  # 删除文件
                    message = f"已成功删除名为 '{target_filename}.txt' 的文件。"
                    QMessageBox.information(window, "删除成功", message, QMessageBox.Ok)
                    txtnum = [filename for filename in os.listdir("name") if filename.endswith(".txt")]
                    combo_box.clear()  # 清空下拉框的选项
                    combo_box.addItems(txtnum)  # 添加新的文件名到下拉框
                else:
                    QMessageBox.warning(window, '警告', '名单文件不存在', QMessageBox.Ok)
        delete_button.clicked.connect(delete_list)

        combo_box.addItems(txtnum)
        def showlist():
            global selected_file,file_path
            selected_file = combo_box.currentText()
            file_path = os.path.join("name", selected_file)
            if not os.path.exists(file_path):
                QMessageBox.warning(window, '警告', '名单文件不存在', QMessageBox.Ok)
            else:
                print(f"所选文件的路径为: {file_path}")
                window.close()
        button.clicked.connect(showlist)
        # 显示窗口
        window.show()
        app1.exec_()
    else:
        pass

if __name__ == '__main__':
    name_list_selector()

Yish1/ktdmq: 课堂点名器 (github.com)


  • alipay_img
  • wechat_img
风带来故事的种子,时间使之发芽
最后更新于 2024-03-16