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()