当前位置:首页>python>《以前靠人工摇铃,现在用Python自动打铃,时间一到,铃声必响,校园打铃系统正式登场!》

《以前靠人工摇铃,现在用Python自动打铃,时间一到,铃声必响,校园打铃系统正式登场!》

  • 2026-10-11 06:30:04
《以前靠人工摇铃,现在用Python自动打铃,时间一到,铃声必响,校园打铃系统正式登场!》

“带你横跨办公自动化的数据江海”

@摸鱼

前言

关于摸鱼

(

ABOUT MOYU

)

闻道有先后,术业有专攻。

各位大佬朋友们好!

~我依旧是你们的老朋友摸鱼~

在职场摸爬滚打的这十多年里,我用Python悄悄干了不少“正事”——不知不觉攒下了一整套办公自动化的实用项目技巧。去年10月初创立了公众号 「码海听潮」 ,初衷很简单:把重复的劳动交给代码,把摸鱼的时间留给生活。

目前已经吭哧吭哧更新了120多篇原创文章,每一篇都是实操干货,不讲虚的,只聊怎么用代码真正解放双手,帮大家早点下班、准点摸鱼

好了,多了不说,少了不唠,今天给大佬们分享一款本人原创的【校园打铃小工具】,这款小工具可以精确到秒定时播放您指定的校园铃声,一键添加打铃任务,其他时间不受干扰。它具备实时时间显示、播放进度追踪和任务管理功能,完美解决校园手动打铃不准时、铃声混乱、需要人工值守的痛点,特别适合学校上下课打铃、考试指令播放、课间操音乐控制、工厂车间定时提醒等场景。

《办公工具成品展示:》

《该办公工具的演示视频:》

《该办公工具核心功能亮点:》

01

 亮点1:精确到秒的定时打铃🎯

        02

         亮点2:多任务并行调度📱

            03

            亮点3:配置持久化保存⚡

            《该办公工具代码展示:》

            下面,我就用python代码让各位大佬见识一下,什么叫"传统文化"遇上"赛博效率"

            import sysimport osfrom PyQt6.QtWidgets import (    QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,    QTableWidget, QTableWidgetItem, QHeaderView, QAbstractItemView,    QPushButton, QLabel, QComboBox, QListWidget, QGroupBox, QMessageBox)from PyQt6.QtCore import Qt, QTimerfrom PyQt6.QtGui import QFontclassSchoolBellSystem(QMainWindow):    def __init__(self):        super().__init__()        self.init_ui()    def init_ui(self):        self.setWindowTitle('校园打铃系统(欢迎关注微信公众号:码海听潮)')        self.setFixedSize(850, 650)        # 中央widget        central_widget = QWidget()        self.setCentralWidget(central_widget)        main_layout = QVBoxLayout(central_widget)        main_layout.setSpacing(10)        main_layout.setContentsMargins(15, 15, 15, 15)        # ==================== 顶部信息栏 ====================        top_frame = QHBoxLayout()        self.time_label = QLabel('电脑当前时间:00:00:00')        self.time_label.setStyleSheet('''            color: blue;             font-size: 13px;             font-weight: bold;            padding: 5px 10px;            background-color: #f0f8ff;            border-radius: 5px;        ''')        top_frame.addWidget(self.time_label)        self.progress_label = QLabel('00:00:00/00:00:00')        self.progress_label.setStyleSheet('''            color: red;             font-size: 13px;             font-weight: bold;            padding: 5px 10px;            background-color: #fff0f0;            border-radius: 5px;        ''')        top_frame.addWidget(self.progress_label)        top_frame.addStretch()        main_layout.addLayout(top_frame)        # ==================== 中间区域(左面板 + 右面板) ====================        mid_widget = QWidget()        mid_layout = QHBoxLayout(mid_widget)        mid_layout.setSpacing(15)        mid_layout.setContentsMargins(0, 0, 0, 0)        # ---------- 左面板:表格 ----------        left_panel = QWidget()        left_layout = QVBoxLayout(left_panel)        left_layout.setContentsMargins(0, 0, 0, 0)        # 表格标题        table_title = QLabel('📋 播放任务列表')        table_title.setStyleSheet('''            font-size: 14px;             font-weight: bold;             color: #2c3e50;            padding: 5px 0;        ''')        left_layout.addWidget(table_title)        # 表格        self.tree = QTableWidget()        self.tree.setColumnCount(4)        self.tree.setHorizontalHeaderLabels(['顺序', '开始时间', '音乐文件名', '数值'])        self.tree.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)        self.tree.verticalHeader().setVisible(False)        self.tree.setSelectionBehavior(QAbstractItemView.SelectRows)        self.tree.setEditTriggers(QAbstractItemView.NoEditTriggers)        self.tree.setAlternatingRowColors(True)        self.tree.setStyleSheet('''            QTableWidget {                gridline-color: #d0d0d0;                font-size: 12px;            }            QTableWidget::item:selected {                background-color: #3498db;                color: white;            }            QHeaderView::section {                background-color: #34495e;                color: white;                padding: 5px;                font-weight: bold;            }        ''')        left_layout.addWidget(self.tree)        mid_layout.addWidget(left_panel, stretch=2)        # ---------- 右面板:控制区 ----------        right_panel = QWidget()        right_panel.setFixedWidth(250)        right_panel.setStyleSheet('''            QWidget {                background-color: #f8f9fa;                border-radius: 8px;                padding: 5px;            }        ''')        right_layout = QVBoxLayout(right_panel)        right_layout.setSpacing(10)        right_layout.setContentsMargins(15, 15, 15, 15)        # 标题        panel_title = QLabel('🎵 控制面板')        panel_title.setStyleSheet('''            font-size: 14px;             font-weight: bold;             color: #2c3e50;            padding-bottom: 5px;            border-bottom: 2px solid #3498db;        ''')        right_layout.addWidget(panel_title)        # ---------- 1. 时间选择 ----------        time_group = QGroupBox('1. 指定时间')        time_group.setStyleSheet('''            QGroupBox {                font-weight: bold;                border: 1px solid #d0d0d0;                border-radius: 5px;                margin-top: 10px;                padding-top: 10px;            }            QGroupBox::title {                subcontrol-origin: margin;                left: 10px;                padding: 0 5px 0 5px;            }        ''')        time_layout = QHBoxLayout(time_group)        time_layout.setSpacing(5)        self.hour_combo = QComboBox()        self.hour_combo.addItems([f'{i:02d}' for i in range(24)])        self.hour_combo.setCurrentText('07')        self.hour_combo.setFixedWidth(60)        time_layout.addWidget(self.hour_combo)        time_layout.addWidget(QLabel(':'))        self.minute_combo = QComboBox()        self.minute_combo.addItems([f'{i:02d}' for i in range(60)])        self.minute_combo.setCurrentText('00')        self.minute_combo.setFixedWidth(60)        time_layout.addWidget(self.minute_combo)        time_layout.addWidget(QLabel(':'))        self.second_combo = QComboBox()        self.second_combo.addItems([f'{i:02d}' for i in range(60)])        self.second_combo.setCurrentText('00')        self.second_combo.setFixedWidth(60)        time_layout.addWidget(self.second_combo)        time_layout.addStretch()        right_layout.addWidget(time_group)        # ---------- 2. 音乐选择 ----------        music_group = QGroupBox('2. 选择音乐')        music_group.setStyleSheet('''            QGroupBox {                font-weight: bold;                border: 1px solid #d0d0d0;                border-radius: 5px;                margin-top: 10px;                padding-top: 10px;            }            QGroupBox::title {                subcontrol-origin: margin;                left: 10px;                padding: 0 5px 0 5px;            }        ''')        music_layout = QVBoxLayout(music_group)        self.mp3_listbox = QListWidget()        self.mp3_listbox.setMaximumHeight(120)        self.mp3_listbox.setStyleSheet('''            QListWidget {                border: 1px solid #d0d0d0;                border-radius: 3px;                padding: 3px;                font-size: 12px;            }            QListWidget::item:selected {                background-color: #3498db;                color: white;            }            QListWidget::item:hover {                background-color: #e8f4fd;            }        ''')        music_layout.addWidget(self.mp3_listbox)        # 播放控制按钮        play_btn_layout = QHBoxLayout()        self.play_btn = QPushButton('▶ 播放音乐')        self.play_btn.setStyleSheet('''            QPushButton {                background-color: #27ae60;                color: white;                border: none;                padding: 6px;                border-radius: 4px;                font-weight: bold;            }            QPushButton:hover {                background-color: #2ecc71;            }            QPushButton:pressed {                background-color: #1e8449;            }        ''')        play_btn_layout.addWidget(self.play_btn)        self.pause_btn = QPushButton('⏸ 暂停播放')        self.pause_btn.setStyleSheet('''            QPushButton {                background-color: #f39c12;                color: white;                border: none;                padding: 6px;                border-radius: 4px;                font-weight: bold;            }            QPushButton:hover {                background-color: #f1c40f;            }            QPushButton:pressed {                background-color: #d4ac0d;            }        ''')        play_btn_layout.addWidget(self.pause_btn)        music_layout.addLayout(play_btn_layout)        # 提示文字        tip_label = QLabel('📁 请将歌曲放在MP3文件夹内')        tip_label.setStyleSheet('color: #7f8c8d; font-size: 10px; font-style: italic;')        music_layout.addWidget(tip_label)        right_layout.addWidget(music_group)        # ---------- 3. 操作按钮 ----------        action_group = QGroupBox('3. 操作')        action_group.setStyleSheet('''            QGroupBox {                font-weight: bold;                border: 1px solid #d0d0d0;                border-radius: 5px;                margin-top: 10px;                padding-top: 10px;            }            QGroupBox::title {                subcontrol-origin: margin;                left: 10px;                padding: 0 5px 0 5px;            }        ''')        action_layout = QVBoxLayout(action_group)        self.add_btn = QPushButton('➕ 添加任务')        self.add_btn.setStyleSheet('''            QPushButton {                background-color: #3498db;                color: white;                border: none;                padding: 8px;                border-radius: 4px;                font-weight: bold;            }            QPushButton:hover {                background-color: #5dade2;            }            QPushButton:pressed {                background-color: #2e86c1;            }        ''')        action_layout.addWidget(self.add_btn)        self.save_btn = QPushButton('💾 保存配置')        self.save_btn.setStyleSheet('''            QPushButton {                background-color: #2ecc71;                color: white;                border: none;                padding: 8px;                border-radius: 4px;                font-weight: bold;            }            QPushButton:hover {                background-color: #58d68d;            }            QPushButton:pressed {                background-color: #28b463;            }        ''')        action_layout.addWidget(self.save_btn)        self.delete_btn = QPushButton('🗑 删除该行')        self.delete_btn.setStyleSheet('''            QPushButton {                background-color: #e74c3c;                color: white;                border: none;                padding: 8px;                border-radius: 4px;                font-weight: bold;            }            QPushButton:hover {                background-color: #ec7063;            }            QPushButton:pressed {                background-color: #c0392b;            }        ''')        action_layout.addWidget(self.delete_btn)        right_layout.addWidget(action_group)        # 底部说明        desc_label = QLabel('🏫 学校上下课打铃,考试指令播放等')        desc_label.setStyleSheet('''            color: #7f8c8d;             font-size: 11px;             font-style: italic;            padding-top: 5px;            border-top: 1px solid #d0d0d0;        ''')        right_layout.addWidget(desc_label)        right_layout.addStretch()        mid_layout.addWidget(right_panel)        main_layout.addWidget(mid_widget, stretch=1)        # 启动定时器更新时间        self.timer = QTimer()        self.timer.timeout.connect(self.update_current_time)        self.timer.start(1000)    def update_current_time(self):        from datetime import datetime        now = datetime.now().strftime('%H:%M:%S')        self.time_label.setText(f'🕐 电脑当前时间:{now}')def main():    app = QApplication(sys.argv)    app.setStyle('Fusion')    font = QFont("Microsoft YaHei", 9)    app.setFont(font)    window = SchoolBellSystem()    window.show()    sys.exit(app.exec())if __name__ == '__main__':    main()

            通过这款校园打铃小工具,仅需几分钟配置好课表,即可自动完成原需专人值守一整天的打铃工作。从最初人工手动打铃的疲惫与焦虑,到用自动化工具实现毫秒级精准触发的畅快,工作效率获得指数级提升,终于解放了双手和时间!

            大佬们也可以举一反三,参照上面的代码思路根据自己工作中的实际情况来具体问题具体分析,实现自己定制化的需求。

            《该办公工具的应用场景:》

            场景
            说明

            上下课打铃

            精确到秒播放上课铃、下课铃 告别人工按铃,分秒不差

            课间操音乐

            定时播放广播体操音乐 无需专人值守,到点自动播放

            考试指令播放

            中考、高考、月考等考试的"开始答题","考试结束"指令 确保考试公平,时间统一

            午休/起床铃

            寄宿学校午休、起床定时提醒 培养学生规律作息

            眼保健操

            定时播放眼保健操配乐

            工厂车间

            换班提醒、休息时间通知

            结语

            当Python遇见办公,牛马打工人终于笑出了猪叫声

            【职场人必看】每天早上一睁眼,想到又要面对:

            1.📊 堆积如山的Excel表格

            2.📑 机械重复的复制粘贴

            3.✍️ 永远改不完的各类文档

            4.诸如此类的更多........

            是不是连Ctrl+Alt+Delete的心都有了?

            别慌!别急,摸鱼这位“职场外挂”已经带着Python代码来拯救你了!

            感谢各位大佬观看,还望各位大佬抬抬贵手一键三连,多多关注点赞转发评论,大佬们的支持才是摸鱼孜孜不倦更新原创干货的动力!

            另外,本篇文章的exe已上传nas私有云盘,有需要的大佬私信摸鱼君获取

            最新文章

            随机文章