From dc8d0e8bfd22d9cdaadc29ab16b6a7b221e8df6d Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 16 Feb 2025 21:53:51 +0800 Subject: [PATCH] =?UTF-8?q?[feature]=20=E9=A1=B9=E7=9B=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86ui=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/database.db | Bin 20480 -> 20480 bytes .../__pycache__/avas_widget.cpython-313.pyc | Bin 9287 -> 14599 bytes widgets/avas_widget.py | 163 ++++++++++++++++-- 3 files changed, 147 insertions(+), 16 deletions(-) diff --git a/data/database.db b/data/database.db index 7d12544ca24a3d24e4957ad2c3e730ca82ea0213..7da05a035eb7126fd662c8460fb6b6f780c60153 100644 GIT binary patch delta 127 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 O-g&}*ox{64)BgZxy|h^X delta 1704 zcmZ8h?@t^>7@pa^-P`-kaU9%T57^`P+7=4*Ky1B=ltNpJaLZXMP4UWY;S~0CZlSiO zDKTlKF{F@*-!##fH0j5N_y_cheifUBQgwac(gZ|)uj1zRBe5|qs#jBv@BdNE2(g9m3~> z2XYkP2*4`<8l4E7aKX+=9AJPx3>=A^V3ZqrqiCoch5!`$EKsk)^1M62$o?nnv8~r= zM@8o$qNLF4m^d1cW-qvU-|5xIFP=R;&_B9yot{#|I71&)^y3s=_QevKFjTNXh-M=( zwhZBhPBT_eSRrRW8lTN-0)aXa?hSIO^F?!YbUGN8KVeF~k$w?Wor?Ru=bmTLM-sHX zBP@I+(BZZay0WBk7}$r2s7p+GW#`vL_w%QDeZP z=r&#I5mZ!C><(Q7g)U3M0q2;%lt`ENjkpe|_I=eo7TAwf_Ek^HnGEhFcGy^lr}eo? z0W9&JM*j`F#nQOvz&K7;fmNDl^5P=9(&!fVRFCsOB%<@-U~Iq6Dw;%^V`wA9d=W55 zq5ze2Fj`;B?hTZhu&T4mLDJ@=!H*R=45~u6qH$RQ>Y%I9U>Peb(!9k}(8D-QSKkSH z8Bt&Qil^cd#Wi8?EjF4z&i?s4`n57f*J?&%n=%ST*Qz>Kt2&=l#TVSHf2ejX5?_tP zpG3MBeCu?u_AR_lzpPDr*V$3>-t#Vf`c$bWiIsTUx7c}^Em;uyrbv{oA8SpeS-0rd z1B;P~P`&By8-Xc6ebg}(A zoLFIpSd?cWevS^uLvdamIECcpl;k>StpGfsvsfy)8Kj$j9iNi<>oP%IUCr|MOwIpA zm)l$D`&~cZhAaILX-;whqK5$91{en5xA79Ns{nB8$p}CaKxc69u}Fak0Cw`#4F0~0 zb_7uhJ$E)s4bPL`r9z8o=#k50ZC zyUib0{u1#F3y_AtM6j!Za&jh@nVmKgWRZ2@mgoB!Y>F7;UyyTG5O6QvMK5rR^Bo!C fn%_{*wrvLEx}||_1nu?}@jZ-#OU*k7TAt=V@QhY( diff --git a/widgets/avas_widget.py b/widgets/avas_widget.py index ab6b78c..223f712 100644 --- a/widgets/avas_widget.py +++ b/widgets/avas_widget.py @@ -1,8 +1,9 @@ import sys from PySide6.QtWidgets import (QApplication, QWidget, QPushButton, QGridLayout, QVBoxLayout, QHBoxLayout, QCheckBox, QComboBox, - QLabel, QSlider, QFrame, QGroupBox) -from PySide6.QtCore import Qt + QLabel, QSlider, QFrame, QGroupBox, QListView) +from PySide6.QtCore import Qt, QSize +from PySide6.QtGui import QIcon from widgets.audio_filter_widget import AudioFilterWidget class ChannelButton(QWidget): @@ -120,12 +121,43 @@ class AVAS_WIDGET(QWidget): def __init__(self): super().__init__() self.setWindowTitle("AVAS") + self.is_panel_visible = True # 添加状态标记 self.setup_ui() def setup_ui(self): - main_layout = QVBoxLayout() + # 创建主水平布局 + main_layout = QHBoxLayout() - # Top section - Channel buttons + # 左侧项目信息面板 + self.left_panel = self.create_project_panel() + + # 创建切换按钮容器 + toggle_container = QVBoxLayout() + self.toggle_button = QPushButton("◀") # 使用箭头符号 + self.toggle_button.setFixedSize(20, 60) + self.toggle_button.clicked.connect(self.toggle_panel) + self.toggle_button.setStyleSheet(""" + QPushButton { + background-color: #404040; + color: white; + border: 1px solid #505050; + border-radius: 3px; + } + QPushButton:hover { + background-color: #505050; + } + QPushButton:pressed { + background-color: #303030; + } + """) + toggle_container.addStretch() + toggle_container.addWidget(self.toggle_button) + toggle_container.addStretch() + + # 右侧原有内容面板 + right_panel = QVBoxLayout() + + # 添加原有的通道按钮网格 channels_layout = QGridLayout() for i in range(24): row = i // 8 @@ -133,35 +165,134 @@ class AVAS_WIDGET(QWidget): channel = ChannelButton(i + 1) channels_layout.addWidget(channel, row, col) - # Middle section + # 中间部分 middle_layout = QHBoxLayout() - - # Left side - Parameter matrix param_matrix = self.create_parameter_matrix() - - # Right side - Filter controls filter_controls = self.create_filter_controls() - middle_layout.addWidget(param_matrix, stretch=2) middle_layout.addWidget(filter_controls, stretch=1) - # Bottom section + # 底部按钮 bottom_layout = QHBoxLayout() clean_btn = QPushButton("Clean") send_btn = QPushButton("Send") enable_cb = QCheckBox("Enable") - bottom_layout.addStretch() bottom_layout.addWidget(clean_btn) bottom_layout.addWidget(send_btn) bottom_layout.addWidget(enable_cb) - # Add all sections to main layout - main_layout.addLayout(channels_layout) - main_layout.addLayout(middle_layout) - main_layout.addLayout(bottom_layout) + # 将所有部分添加到右侧面板 + right_panel.addLayout(channels_layout) + right_panel.addLayout(middle_layout) + right_panel.addLayout(bottom_layout) + + # 添加左右面板和切换按钮到主布局 + main_layout.addWidget(self.left_panel, stretch=1) + main_layout.addLayout(toggle_container) + main_layout.addLayout(right_panel, stretch=4) self.setLayout(main_layout) + + def toggle_panel(self): + """切换左侧面板的显示状态""" + self.is_panel_visible = not self.is_panel_visible + self.left_panel.setVisible(self.is_panel_visible) + + # 更新切换按钮的箭头方向 + if self.is_panel_visible: + self.toggle_button.setText("◀") + else: + self.toggle_button.setText("▶") + + def create_project_panel(self): + """创建左侧项目信息面板""" + panel = QGroupBox("项目信息") + layout = QVBoxLayout() + + # 创建列表视图 + self.project_list = QListView() + self.project_list.setViewMode(QListView.ViewMode.IconMode) + self.project_list.setIconSize(QSize(80, 80)) + self.project_list.setSpacing(10) + self.project_list.setResizeMode(QListView.ResizeMode.Adjust) + self.project_list.setMovement(QListView.Movement.Static) + + # 设置样式 + self.project_list.setStyleSheet(""" + QListView { + background-color: #2D2D2D; + border: none; + border-radius: 4px; + padding: 5px; + } + QListView::item { + background-color: #3D3D3D; + border-radius: 6px; + margin: 5px; + } + QListView::item:selected { + background-color: #4A4A4A; + } + QListView::item:hover { + background-color: #454545; + } + """) + + # 添加工具栏按钮 + toolbar = QHBoxLayout() + add_btn = QPushButton("添加") + delete_btn = QPushButton("删除") + refresh_btn = QPushButton("刷新") + + # 设置按钮样式 + button_style = """ + QPushButton { + background-color: #404040; + color: white; + border: 1px solid #505050; + border-radius: 3px; + padding: 5px 10px; + min-width: 60px; + } + QPushButton:hover { + background-color: #505050; + } + QPushButton:pressed { + background-color: #303030; + } + """ + add_btn.setStyleSheet(button_style) + delete_btn.setStyleSheet(button_style) + refresh_btn.setStyleSheet(button_style) + + toolbar.addWidget(add_btn) + toolbar.addWidget(delete_btn) + toolbar.addWidget(refresh_btn) + + # 组装面板 + layout.addLayout(toolbar) + layout.addWidget(self.project_list) + panel.setLayout(layout) + + # 设置面板样式 + panel.setStyleSheet(""" + QGroupBox { + background-color: #2D2D2D; + border: 1px solid #505050; + border-radius: 6px; + margin-top: 1ex; + padding: 10px; + color: white; + } + QGroupBox::title { + subcontrol-origin: margin; + subcontrol-position: top center; + padding: 0 3px; + } + """) + + return panel def create_parameter_matrix(self): frame = QFrame()