当前位置: 首页 > news >正文

透明快捷键或命令管理器

二次开发文件下载地址

核心模块分析 PyQt5框架选择与基础结构搭建

  • 窗口类继承与初始化方法解析
  • 跨平台数据存储路径处理逻辑
  • 无边框窗口实现关键技术点

界面架构设计 复合式布局管理系统详解

  • QVBoxLayout/QHBoxLayout嵌套使用
  • 自定义标题栏实现方案
  • 动态布局管理器的内存优化

数据持久化方案 JSON格式数据处理流程

  • 本地文件读写安全机制
  • 数据结构设计与版本兼容
  • 异常处理与数据恢复策略

交互功能实现 高级事件处理机制

  • 鼠标拖动无边框窗口实现
  • 上下文菜单与动态编辑功能
  • 列表控件与树形控件的联动交互

视觉增强技术 现代化UI效果实现

  • 亚克力背景效果算法
  • 动态模糊渲染技术
  • 跨平台字体适配方案

性能优化要点 内存管理最佳实践

  • 对象生命周期控制
  • 延迟加载技术应用
  • 事件过滤器的合理使用

部署与分发 跨平台打包方案

  • PyInstaller配置技巧
  • 资源文件打包策略
  • 自动更新机制设计

扩展开发方向 插件系统架构设计

  • 热加载模块实现
  • 快捷键映射导入导出
  • 云端同步功能拓展

每个技术点可展开为独立章节,包含:

  • 原理示意图
  • 关键代码片段
  • 性能测试数据
  • 跨平台适配方案
  • 典型问题解决方案


方便在linux或者命令行等工具中使用
run.bat

@echo off  
cd /d "C:\Users\Herry\Desktop"
python shortcuts.py
pause

shortcuts.py
 

import sys
import platform
import json
import os  # 确保导入os模块
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QTreeWidget, QTreeWidgetItem,QPushButton, QLineEdit, QMessageBox, QHeaderView,QFrame, QInputDialog, QMenu, QAction, QFileDialog, QListWidget, QListWidgetItem, QStyle)
from PyQt5.QtCore import Qt, QPoint, QSize, QEvent, QTimer
from PyQt5.QtGui import (QFont, QColor, QIcon, QPixmap, QPainter, QBrush, QPalette, QFontMetrics, QTextOption)class LocalSaveShortcutViewer(QMainWindow):def __init__(self):super().__init__()# 初始化属性self.current_software = "系统通用"self.categories_menu = None  # 分区下拉菜单self.tools_menu = None  # 工具栏下拉菜单self.data_file = self.get_data_file_path()  # 数据保存路径self.is_maximized = False  # 新增:跟踪窗口是否最大化self.normal_geometry = None  # 新增:保存窗口正常状态的几何信息self.initUI()self.load_software_shortcuts()  # 加载数据self.setWindowFlags(Qt.FramelessWindowHint |  # 无边框Qt.WindowStaysOnTopHint |  # 窗口置顶Qt.Tool  # 工具窗口样式)self.setAttribute(Qt.WA_TranslucentBackground)  # 透明背景self.set_glass_effect()# 状态变量self.dragging = Falseself.drag_position = QPoint()self.editing_item = Noneself.edit_widget = Nonedef get_data_file_path(self):"""获取数据保存文件的路径"""if getattr(sys, 'frozen', False):current_dir = os.path.dirname(sys.executable)else:current_dir = os.path.dirname(os.path.abspath(__file__))return os.path.join(current_dir, "shortcuts.json")def initUI(self):# 窗口基本设置self.setGeometry(300, 300, 700, 500)self.setMinimumSize(400, 300)self.setWindowTitle('快捷键查看器')# 主布局central_widget = QWidget()self.setCentralWidget(central_widget)self.main_layout = QVBoxLayout(central_widget)self.main_layout.setContentsMargins(5, 5, 5, 5)self.main_layout.setSpacing(2)# 标题栏title_bar = self.create_title_bar()self.main_layout.addWidget(title_bar)# 合并的分区和搜索栏(同一行)combined_bar = self.create_combined_bar()self.main_layout.addWidget(combined_bar)# 添加分区列表框(用于显示筛选结果)self.category_listbox = QListWidget()self.category_listbox.setStyleSheet("""QListWidget {background-color: rgba(255, 255, 255, 200);border: 1px solid rgba(200, 200, 200, 80);border-radius: 4px;font-family: "Microsoft YaHei", "Heiti TC";font-size: 9pt;}QListWidget::item {height: 25px;padding: 2px 5px;}QListWidget::item:selected {background-color: rgba(180, 220, 255, 80);color: #0055aa;}""")self.category_listbox.hide()  # 默认隐藏self.category_listbox.itemClicked.connect(self.on_category_selected)self.main_layout.addWidget(self.category_listbox)# 内容区域content_area = self.create_content_area()self.main_layout.addWidget(content_area, 1)# 底部信息栏footer = self.create_footer()self.main_layout.addWidget(footer)def create_title_bar(self):"""创建带工具菜单和窗口控制的标题栏"""title_bar = QFrame()title_bar.setMinimumHeight(38)title_bar.setStyleSheet("""QFrame {background-color: rgba(255, 255, 255, 100);border-radius: 8px 8px 0px 0px;}""")layout = QHBoxLayout(title_bar)layout.setContentsMargins(15, 0, 10, 0)# 标题title_label = QLabel("命令速览")title_font = QFont()title_font.setFamily("Microsoft YaHei" if platform.system() == "Windows" else "Heiti TC")title_font.setPointSize(12)title_font.setBold(True)title_label.setFont(title_font)title_label.setStyleSheet("color: #333333;")layout.addWidget(title_label, 1, Qt.AlignLeft | Qt.AlignVCenter)# 工具菜单按钮(≡按钮)tool_menu_btn = QPushButton()tool_menu_btn.setFixedSize(28, 28)tool_menu_btn.setStyleSheet("""QPushButton {background-color: transparent;border: none;}QPushButton:hover {background-color: rgba(200, 200, 200, 80);border-radius: 4px;}""")tool_menu_btn.setIcon(self.create_icon("≡", "#666666", 12))tool_menu_btn.setIconSize(QSize(14, 14))tool_menu_btn.clicked.connect(self.show_tools_menu)layout.addWidget(tool_menu_btn)# 最小化按钮minimize_btn = QPushButton()minimize_btn.setFixedSize(28, 28)minimize_btn.setStyleSheet("""QPushButton {background-color: transparent;border: none;}QPushButton:hover {background-color: rgba(200, 200, 200, 80);border-radius: 4px;}""")minimize_btn.setIcon(self.create_icon("−", "#666666", 12))minimize_btn.setIconSize(QSize(14, 14))minimize_btn.clicked.connect(self.showMinimized)layout.addWidget(minimize_btn)# 最大化/还原按钮self.maximize_btn = QPushButton()self.maximize_btn.setFixedSize(28, 28)self.maximize_btn.setStyleSheet("""QPushButton {background-color: transparent;border: none;}QPushButton:hover {background-color: rgba(200, 200, 200, 80);border-radius: 4px;}""")self.maximize_btn.setIcon(self.create_icon("□", "#666666", 12))self.maximize_btn.setIconSize(QSize(14, 14))self.maximize_btn.clicked.connect(self.toggle_maximize)layout.addWidget(self.maximize_btn)# 关闭按钮close_btn = QPushButton()close_btn.setFixedSize(28, 28)close_btn.setStyleSheet("""QPushButton {background-color: transparent;border: none;}QPushButton:hover {background-color: #ff4d4d;border-radius: 14px;}""")close_btn.setIcon(self.create_icon("✕", "#666666", 12))close_btn.setIconSize(QSize(14, 14))close_btn.clicked.connect(self.force_close)  # 修改为强制关闭layout.addWidget(close_btn)# 拖动事件title_bar.mousePressEvent = self.on_title_bar_presstitle_bar.mouseMoveEvent = self.on_title_bar_movetitle_bar.mouseReleaseEvent = self.on_title_bar_releasereturn title_bardef toggle_maximize(self):"""切换窗口最大化/还原状态"""if self.is_maximized:# 还原窗口if self.normal_geometry:self.setGeometry(self.normal_geometry)self.is_maximized = Falseself.maximize_btn.setIcon(self.create_icon("□", "#666666", 12))else:# 最大化窗口self.normal_geometry = self.geometry()screen_geometry = QApplication.desktop().availableGeometry()# 调整最大化时的位置和大小,保留一些边距self.setGeometry(screen_geometry.x() + 20,screen_geometry.y() + 20,scr
http://www.dtcms.com/a/554471.html

相关文章:

  • 一个CTO的一天:详细设计的作用
  • C++ std::unordered_map
  • 【Python办公】压缩包智能提取工具:基于顺丰单号的精准文件提取解决方案(无需解压缩)
  • 沈阳市建设工程信息网站石家庄 外贸网站建设公司排名
  • Redis 持久化方式
  • 手机网站空间申请医联媒体网站建设
  • ubuntu查看进程并杀死
  • 网站后台管理员做链接基础设施建设网站
  • 国家局公司转让全流程攻略
  • 网站开发注意的事项优化企业网站标题
  • 二手网站模板广州番禺区网站建设
  • 建设公司网站模板下载wordpress添加一个tag页面
  • 做 视频在线观看网站制作网站搭建网站项目怎么样
  • 网站服务器端口号是什么北京做网站制作的公司哪家好
  • qq靓号申请免费网站网上电商平台怎么注册
  • mysql初修1
  • Maven 4:20年老工具的重生之路
  • 网站开发佛山WordPress用Aplayer
  • U-net 系列算法知识解读
  • 图片类网站 怎么做优化太原站扩建后的规模
  • Rust开发之使用anyhow与thiserror简化错误处理
  • LVGL的介绍
  • 免费网站建设怎样jsp网站架构
  • UVa 10599 Robots(II)
  • 潍坊建设银行招聘网站郑州网站建设规划
  • 电子宠物游戏机ESD整改案例-深圳阿赛姆
  • Java拆分及合并pdf文件
  • 免费网站收录学服装设计有前途吗
  • 手机怎么建立网站瑞安微信网站
  • 网站建设多少钱一个平台网站开发建设哪家好