本文主要是介绍基于Python+PyQt5打造一个跨平台Emoji表情管理神器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《基于Python+PyQt5打造一个跨平台Emoji表情管理神器》在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的...
概述
在当今数字化社交时代,Emoji已成为全球通用的视觉语言。本文介绍如何使用python和PyQt5开发一个功能全面的Emoji工具箱,包含完整的Unicode 14.0标准表情库,提供分类浏览、智能搜索和快捷复制等功能。该项目具有以下技术亮点:
功能特性
1. 全量Emoji集合
涵盖9大分类体系
每个emoji包含官方名称标注
支持最新Unicode 14.0标准
2. 智能搜索系统
支持中文/英文关键词搜索
实时显示匹配结果
搜索结果包含分类路径
3. 高效交互设计
一键复制emoji到剪贴板
悬停显示详细信息
自适应网格布局
4. 现代化UI
扁平化设计风格
平滑的动画过渡
深色/浅色主题支持
展示效果
主界面布局
分类浏览效果
# 分类数据结构示例 categories = { " 笑脸与情感": [("", "笑脸"), ("", "大笑")], " 人物与身体": [("", "挥手"), ("", "抬手")] }
搜索功能演示
开发步骤详解
1. 环境准备
pip install PyQt5==5.15.7 pip install pyqt5-tools
2. 核心实现流程
数据层构建:
def load_emoji_data(self): self.categories = { "分类名称": [("", "笑脸"), ...], ... }
UI界面开发:
class MainWindow(QMainWindow): def __init__(self): # 初始化搜索框、标签页等组件 self.init_ui()
业务逻辑实现:
def search_emojis(self): # 实现搜索功能 for emoji, name in emojis: if keyword in name.lower(): # 添加搜索结果
代码深度解析
1. 高性能渲染方案
# 使用QListWidget的IconMode实现网格布局 emoji_list.setViewMode(QListWidget.IconMode) emoji_list.setGridSize(QSize(80, 80)) emoji_list.setResizeMode(QListWidget.Adjust)
2. 智能搜索算法
def search_emojis(self): search_text = self.search_input.text().lower() # 同时匹配emoji字符和名称 if search_text in name.lower() or search_text in emoji.lower(): # 使用Qt.UserRole存储原始数据 item.setData(Qt.UserRole, emoji)
3. UI优化技巧
/* 使用css样式美化界面 */ QListWidget::item { padding: 12px; border-radius: 4px; } QListWidget::item:hover { background: #e6f2ff; }
4. 剪贴板集成
def copy_emoji_to_clipboard(self, item): clipboard = QApplication.clipboard() clipboard.setText(item.data(Qt.UserRole))
源码下载
import sys from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QvboxLayout, QHBoxLayout, QLabel, QLineEdit, QListWidget, QListWidgetItem, QPushButton, QTabWidget, QScrollArea, QFrame, QSizePolicy) from PyQt5.QtCore import Qt, QSize from PyQt5.QtGui import QFont, QIcon, QColor, QPalette class EmojiGenerator(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('Emoji文字库工具箱') self.setGeometry(100, 100, 1000, 800) self.setMinimumSize(800, 600) # 设置窗口图标 try: self.setWindowIcon(QIcon('emoji_icon.png')) except: pass # 初始化UI self.init_ui() # 加载emoji数据 self.load_emoji_data() # 填充分类标签页 self.populate_category_tabs() def init_ui(self): """初始化用户界面""" main_widget = QWidget() main_layout = QVBoxLayout() main_layout.setContentsMargins(12, 12, 12, 12) main_layout.setSpacing(12) # 搜索栏 search_frame = QFrame() search_frame.setFrameShape(QFrame.StyledPanel) search_layout = QHBoxLayout(search_frame) search_layout.setContentsMargins(8, 8, 8, 8) self.search_input = QLineEdit() self.search_input.setPlaceholderText("搜索表情... (如输入'笑脸'或'')") self.search_input.textChanged.connect(self.search_emojis) self.search_input.setClearButtonEnabled(True) search_button = QPushButton("搜索") search_button.clicked.connect(self.search_emojis) search_layout.addwidget(self.search_input) search_layout.addWidget(search_button) # 标签页 self.tabs = QTabWidget() self.tabs.setTabPosition(QTabWidget.North) self.tabs.setMovable(True) # 搜索结果标签页 self.search_results_tab = QWidget() self.search_results_layout = QVBoxLayout(self.search_results_tab) self.search_results_list = QListWidget() self.search_results_list.setViewMode(QListWidget.IconMode) self.search_results_list.setResizeMode(QListWidget.Adjust) self.search_results_list.setGridSize(QSize(80, 80)) self.search_results_list.setSpacing(8) self.search_results_layout.addWidget(self.search_results_list) self.tabs.addTab(self.search_results_tab, " 搜索结果") main_layout.addWidget(search_frame) main_layout.addWidget(self.tabs) main_widget.setLayout(main_layout) self.setCentralWidget(main_widget) # 状态栏 self.status_label = QLabel("准备就绪") self.statusBar().addPermanentWidget(self.status_label) # 设置样式 self.setStyleSheet(""" QMainWindow { background-color: #f5f5f5; } QFrame { background: white; border-radius: 6px; } QTabWidget::pane { border: 1px solid #d4d4d4; border-radius: 6px; padding: 4px; background: white; } QTabBar::tab { padding: 8px 16px; border: 1px solid #d4d4d4; border-bottom: none; border-top-left-radius: 6px; border-top-right-radius: 6px; background: #f0f0f0; margin-right: 4px; } QTabBar::tab:selected { background: white; margin-bottom: -1px; border-bottom: 1px solid white; } QTabBar::tab:hover { background: #e0e0e0; } QListWidget { background: white; border: 1px solid #e0e0e0; border-radius: 6px; outline: 0; } QListWidget::item { padding: 12px; border-radius: 4px; } QListWidget::item:hover { background: #e6f2ff; } QLineEdit { padding: 8px 12px; border: 1px solid #d4d4d4; border-radius: 6px; font-size: 14px; selection-background-color: #4a90e2; } QPushButton { padding: 8px 16px; background: #4a90e2; color: white; border: none; border-radius: 6px; font-size: 14px; min-width: 80px; } QPushButton:hover { background: #3a7bc8; } QPushButton:pressed { background: #2a6ab4; } QStatusBar { background: white; border-top: 1px solid #d4d4d4; padding: 4px; } """) def load_emoji_data(self): """加载完整的emoji数据""" self.categories = { " 笑脸与情感": [ ("", "笑脸"), ("", "大笑"), ("", "开心笑"), ("", "笑嘻嘻"), ("", "眯眼笑"), ("", "流汗笑"), ("", "笑得打滚"), ("", "笑哭"), ("", "微笑"), ("", "倒脸"), ("", "眨眼"), ("", "害羞笑"), ("", "天使笑"), ("", "爱心笑脸"), ("", "爱心眼"), ("", "星星眼"), ("", "飞吻"), ("", "亲吻"), ("", "闭眼亲吻"), ("", "微笑亲吻"), ("", "含泪笑"), ("", "美味脸"), ("", "吐舌"), ("", "单眼吐舌"), ("", "滑稽脸"), ("", "眯眼吐舌"), ("", "金钱脸"), ("", "拥抱脸"), ("", "捂嘴"), ("", "嘘声"), ("", "思考"), ("", "拉链嘴"), ("", "怀疑"), ("", "中性"), ("", "无表情"), ("", "无嘴"), ("", "得意"), ("", "不高兴"), ("", "翻白眼"), ("", "龇牙"), ("", "说谎"), ("", "放松"), ("", "忧郁"), ("", "困倦"), ("", "流口水"), ("", "睡觉"), ("", "口罩"), ("", "发烧"), ("", "受伤"), ("", "恶心"), ("", "呕吐"), ("", "打喷嚏"), ("", "热"), ("", "冷"), ("", "头晕"), ("", "晕头转向"), ("", "爆炸头"), ("", "牛仔帽"), ("", "派对"), ("", "墨镜"), ("", "书呆子"), ("", "单片眼镜"), ("", "困惑"), ("", "担心"), ("", "轻微不高兴"), ("☹️", "不高兴"), ("", "惊讶"), ("", "沉默"), ("", "震惊"), ("", "脸红"), ("", "恳求"), ("", "皱眉惊讶"), ("", "痛苦"), ("", "恐惧"), ("", "焦虑冷汗"), ("", "失望但解脱"), ("", "哭泣"), ("", "大哭"), ("", "尖叫恐惧"), ("", "困惑"), ("", "忍耐"), ("", "失望"), ("", "冷汗"), ("", "疲惫"), ("", "疲倦"), ("", "打哈欠"), ("", "傲慢"), ("", "愤怒"), ("", "生气"), ("", "脏话"), ("", "恶魔笑"), ("", "恶魔"), ("", "骷髅"), ("☠️", "骷髅骨头"), ("", "便便"), ("", "小丑"), ("", "妖怪"), ("", "天狗"), ("", "鬼"), ("", "外星人"), ("", "外星怪物"), ("", "机器人"), ("", "猫笑脸"), ("", "猫眯眼笑"), ("", "猫笑哭"), ("", "猫爱心眼"), ("", "猫得意笑"), ("", "猫亲吻"), ("", "猫惊讶"), ("", "猫哭泣"), ("", "猫生气"), ("", "不看邪恶"), ("", "不听邪恶"), ("", "不说邪恶"), ("", "唇印"), ("", "情书"), ("", "爱心箭"), ("", "爱心礼带"), ("", "闪烁爱心"), ("", "成长爱心"), ("", "跳动爱心"), ("", "旋转爱心"), ("", "两颗爱心"), ("", "心形装饰"), ("❣️", "心叹号"), ("", "心碎"), ("❤️", "红心"), ("", "橙心"), ("", "黄心"), ("", "绿心"), ("", "蓝心"), ("", "紫心"), ("", "棕心"), ("", "黑心"), ("", "白心"), ("", "一百分"), ("", "愤怒符号"), ("", "碰撞"), ("", "眩晕"), ("", "汗滴"), ("", "疾跑"), ("️", "洞"), ("", "炸弹"), ("", "对话气泡"), ("️️", "眼睛气泡"), ("️", "左对话气泡"), ("️", "右愤怒气泡"), ("", "思考气泡"), ("", "zzz") ], " 人物与身体": [ ("", "挥手"), ("", "抬手"), ("️", "张开手"), ("✋", "举手"), ("", "瓦肯手势"), ("", "OK手势"), ("", "捏手指"), ("✌️", "胜利手势"), ("", "交叉手指"), ("", "爱你的手势"), ("", "摇滚手势"), ("", "打电话手势"), ("", "左指"), ("", "右指"), ("", "上指"), ("", "中指"), ("", "下指"), ("☝️", "食指上指"), ("", "大拇指"), ("", "拇指向下"), ("✊", "拳头"), ("", "出拳"), ("", "左拳"), ("", "右拳"), ("", "鼓掌"), ("", "举手欢呼"), ("", "张开双手"), ("", "掌心向上"), ("", "握手"), ("", "祈祷"), ("✍️", "写字"), ("", "涂指甲油"), ("", "自拍"), ("", "肌肉"), ("", "机械臂"), ("", "机械腿"), ("", "腿"), ("", "脚"), ("", "耳朵"), ("", "助听器耳朵"), ("", "鼻子"), ("", "大脑"), ("", "牙齿"), ("", "骨头"), ("", "眼睛"), ("️", "单眼"), ("", "舌头"), ("", "嘴巴"), ("", "婴儿"), ("", "儿童"), ("", "男孩"), ("", "女孩"), ("", "成人"), ("", "男人"), ("", "女人"), ("", "胡子"), ("♂️", "男胡子"), ("♀️", "女胡子"), ("", "红发男"), ("", "红发女"), ("", "卷发男"), ("", "卷发女"), ("", "白发男"), ("", "白发女"), ("", "秃头男"), ("", "秃头女"), ("", "金发"), ("♂️", "金发男"), ("♀️", "金发女"), ("", "老人"), ("", "老爷爷"), ("", "老奶奶"), ("", "皱眉"), ("♂️", "男皱眉"), ("♀️", "女皱眉"), ("", "撅嘴"), ("♂️", "男撅嘴"), ("♀️", "女撅嘴"), ("", "不行"), ("♂️", "男不行"), ("♀️", "女不行"), ("", "可以"), ("♂️", "男可以"), ("♀️", "女可以"), ("", "告知"), ("♂️", "男告知"), ("♀️", "女告知"), ("", "举手"), ("♂️", "男举手"), ("♀️", "女举手"), ("", "聋人"), ("♂️", "男聋人"), ("♀️", "女聋人"), ("", "鞠躬"), ("♂️", "男鞠躬"), ("♀️", "女鞠躬"), ("", "捂脸"), ("♂️", "男捂脸"), ("♀️", "女捂脸"), ("", "耸肩"), ("♂️", "男耸肩"), ("♀️", "女耸肩"), ("⚕️", "男医生"), ("⚕️", "女医生"), ("", "男学生"), ("", "女学生"), ("", "男老师"), ("", "女老师"), ("⚖️", "男法官"), ("⚖️", "女法官"), ("", "男农民"), ("", "女农民"), ("", "男厨师"), ("", "女厨师"), ("", "男技工"), ("", "女技工"), ("", "男工人"), ("", "女工人"), ("", "男职员"), ("", "女职员"), ("", "男科学家"), ("", "女科学家"), ("", "男技术员"), ("", "女技术员"), ("", "男歌手"), ("", "女歌手"), ("", "男艺术家"), ("", "女艺术家"), ("✈️", "男飞行员"), ("✈️", "女飞行员"), ("", "男宇航员"), ("", "女宇航员"), ("", "男消防员"), ("", "女消防员"), ("", "警察"), ("♂️", "男警察"), ("♀️", "女警察"), ("️", "侦探"), ("️♂️", "男侦探"), ("️♀️", "女侦探"), ("", "卫兵"), ("♂️", "男卫兵"), ("♀️", "女卫兵"), ("", "忍者"), ("", "建筑工人"), ("♂️", "男建筑工人"), ("♀️", "女建筑工人"), ("", "王子"), ("", "公主"), ("", "包头巾"), ("♂️", "男包头巾"), ("♀️", "女包头巾"), ("", "瓜皮帽"), ("", "头巾"), ("", "穿礼服"), ("♂️", "男穿礼服"), ("♀️", "女穿礼服"), ("", "戴面纱"), ("♂️", "男戴面纱"), ("♀️", "女戴面纱"), ("", "孕妇"), ("", "哺乳"), ("", "女哺乳"), ("", "男哺乳"), ("", "人哺乳"), ("", "天使"), ("", "圣诞老人"), ("", "圣诞奶奶"), ("", "圣诞人"), ("", "超级英雄"), ("♂️", "男超级英雄"), ("♀️", "女超级英雄"), ("", "超级反派"), ("♂️", "男超级反派"), ("♀️", "女超级反派"), ("", "法师"), ("♂️", "男法师"), ("♀️", "女法师"), ("", "精灵"), ("♂️", "男精灵"), ("♀️", "女精灵"), ("", "吸血鬼"), ("♂️", "男吸血鬼"), ("♀️", "女吸血鬼"), ("", "人鱼"), ("♂️", "男人鱼"), ("♀️", "女人鱼"), ("", "精灵"), ("♂️", "男精灵"), ("♀️", "女精灵"), ("", "精灵"), ("♂️", "男精灵"), ("♀️", "女精灵"), ("", "僵尸"), ("♂️", "男僵尸"), ("♀️", "女僵尸"), ("", "按摩"), ("♂️", "男按摩"), ("♀️", "女按摩"), ("", "理发"), ("♂️", "男理发"), ("♀️", "女理发"), ("", "行人"), ("♂️", "男行人"), ("♀️", "女行人"), ("", "站立"), ("♂️", "男站立"), ("♀️", "女站立"), ("", "跪"), ("♂️", "男跪"), ("♀️", "女跪"), ("", "跑步"), ("♂️", "男跑步"), ("♀️", "女跑步"), ("", "跳舞女"), ("", "跳舞男"), ("️", "悬浮人"), ("", "兔女郎"), ("♂️", "男兔女郎"), ("♀️", "女兔女郎"), ("", "桑拿"), ("♂️", "男桑拿"), ("♀️", "女桑拿"), ("", "攀岩"), ("♂️", "男攀岩"), ("♀️", "女攀岩"), ("", "击剑"), ("", "赛马"), ("⛷️", "滑雪"), ("", "滑雪板"), ("️", "高尔夫"), ("️♂️", "男高尔夫"), ("️♀️", "女高尔夫"), ("", "冲浪"), ("♂️", "男冲浪"), ("♀️", "女冲浪"), ("", "划船"), ("♂️", "男划船"), ("♀️", "女划船"), ("", "游泳"), ("♂️", "男游泳"), ("♀️", "女游泳"), ("⛹️", "篮球"), ("⛹️♂️", "男篮球"), ("⛹️♀️", "女篮球"), ("️", "举重"), ("️♂️", "男举重"), ("️♀️", "女举重"), ("", "自行车"), ("♂️", "男自行车"), ("♀️", "女自行车"), ("", "山地车"), ("♂️", "男山地车"), ("♀️", "女山地车"), ("", "侧手翻"), ("♂️", "男侧手翻"), ("♀️", "女侧手翻"), ("", "摔跤"), ("♂️", "男摔跤"), ("♀️", "女摔跤"), ("", "水球"), ("♂️", "男水球"), ("♀️", "女水球"), ("", "手球"), ("♂️", "男手球"), ("♀️", "女手球"), ("", "杂耍"), ("♂️", "男杂耍"), ("♀️", "女杂耍"), ("", "莲花坐"), ("♂️", "男莲花坐"), ("♀️", "女莲花坐"), ("", "洗澡"), ("", "床上"), ("", "牵手"), ("", "两女牵手"), ("", "男女牵手"), ("", "两男牵手"), ("", "亲吻"), ("❤️", "女吻男"), ("❤️", "男吻男"), ("❤️", "女吻女"), ("", "情侣"), ("❤️", "女爱男"), ("❤️", "男爱男"), ("❤️", "女爱女"), ("", "家庭"), ("", "家庭男女孩"), ("", "家庭男女女"), ("", "家庭男女女男"), ("", "家庭男女男男"), ("", "家庭男女女女"), ("", "家庭男男男"), ("", "家庭男男女"), ("", "家庭男男女男"), ("", "家庭男男男男"), ("", "家庭男男女女"), ("", "家庭女女男"), ("", "家庭女女女"), ("", "家庭女女女男"), ("", "家庭女女男男"), ("", "家庭女女女女"), ("", "父子"), ("", "父子男"), ("", "父女"), ("", "父女男"), ("", "父女女"), ("", "母子"), ("", "母子男"), ("", "母女"), ("", "母女男"), ("", "母女女"), ("️", "说话"), ("", "半身像"), ("", "半身像组"), ("", "拥抱"), ("", "脚印") ], " 动物与自然": [ ("", "猴脸"), ("", "猴子"), ("", "大猩猩"), ("", "猩猩"), ("", "狗脸"), ("", "狗"), ("", "导盲犬"), ("", "服务犬"), ("", "贵宾犬"), ("", "狼"), ("", "狐狸"), ("", "浣熊"), ("", "猫脸"), ("", "猫"), ("⬛", "黑猫"), ("", "狮子"), ("", "虎脸"), ("", "虎"), ("", "豹"), ("", "马脸"), ("", "马"), ("", "独角兽"), ("", "斑马"), ("", "鹿"), ("", "野牛"), ("", "牛脸"), ("", "牛"), ("", "水牛"), ("", "奶牛"), ("", "猪脸"), ("", "猪"), ("", "野猪"), ("", "猪鼻"), ("", "公羊"), ("", "绵羊"), ("", "山羊"), ("", "骆驼"), ("", "双峰骆驼"), ("", "羊驼"), ("", "长颈鹿"), ("", "大象"), ("", "猛犸象"), ("", "犀牛"), ("", "河马"), ("", "鼠脸"), ("", "老鼠"), ("", "仓鼠"), ("", "仓鼠"), ("", "兔脸"), ("", "兔子"), ("️", "松鼠"), ("", "海狸"), ("", "刺猬"), ("", "蝙蝠"), ("", "熊"), ("❄️", "北极熊"), ("", "考拉"), ("", "熊猫"), ("", "树懒"), ("", "水獭"), ("", "臭鼬"), ("", "袋鼠"), ("", "獾"), ("", "爪印"), ("", "火鸡"), China编程 ("", "鸡"), ("", "公鸡"), ("", "小鸡破壳"), ("", "小鸡"), ("", "正面小鸡"), js ("", "鸟"), ("", "企鹅"), ("️", "鸽子"), ("", "鹰"), ("", "鸭"), ("", "天鹅"), ("", "猫头鹰"), ("", "渡渡鸟"), ("", "羽毛"), ("", "火烈鸟"), ("", "孔雀"), ("", "鹦鹉"), ("", "青蛙"), ("", "鳄鱼"), ("", "乌龟"), ("", "蜥蜴"), ("", "蛇"), ("", "龙脸"), ("", "龙"), ("", "蜥脚类恐龙"), ("", "暴龙"), ("", "喷水鲸"), ("", "鲸鱼"), ("", "海豚"), ("", "海豹"), ("", "鱼"), ("", "热带鱼"), ("", "河豚"), ("", "鲨鱼"), ("", "章鱼"), ("", "海螺"), ("", "珊瑚"), ("", "水母"), ("", "蜗牛"), ("", "蝴蝶"), ("", "毛毛虫"), ("", "蚂蚁"), ("", "蜜蜂"), ("", "甲虫"), ("", "瓢虫"), ("", "蟋蟀"), ("", "蟑螂"), ("️", "蜘蛛"), ("️", "蜘蛛网"), ("", "蝎子"), ("", "蚊子"), ("", "苍蝇"), ("", "蠕虫"), ("", "微生物"), ("", "花束"), ("", "樱花"), ("", "白花"), ("️", "玫瑰花结"), ("", "玫瑰"), ("", "枯萎的花"), ("", "芙蓉"), ("", "向日葵"), ("", "开花"), ("", "郁金香"), ("", "风信子"), ("", "幼苗"), ("", "盆栽"), ("", "常青树"), ("", "落叶树"), ("", "棕榈树"), ("", "仙人掌"), ("", "稻穗"), ("", "草药"), ("☘️", "三叶草"), ("", "四叶草"), ("", "枫叶"), ("", "落叶"), ("", "风吹叶"), ("", "空巢"), ("", "有蛋的巢"), ("", "蘑菇") ], " 食物与饮料": [ ("", "青苹果"), ("", "红苹果"), ("", "梨"), ("", "橙子"), ("", "柠檬"), ("", "香蕉"), ("", "西瓜"), ("", "葡萄"), ("", "草莓"), ("", "蓝莓"), ("", "甜瓜"), ("", "樱桃"), ("", "桃子"), ("", "芒果"), ("", "菠萝"), ("", "椰子"), ("", "猕猴桃"), ("", "番茄"), ("", "橄榄"), ("", "牛油果"), ("", "茄子"), ("", "土豆"), ("", "胡萝卜"), ("", "玉米"), ("️", "辣椒"), ("", "甜椒"), ("", "黄瓜"), ("", "绿叶菜"), ("", "西兰花"), ("", "大蒜"), ("", "洋葱"), ("", "蘑菇"), ("", "花生"), ("", "豆子"), ("", "栗子"), ("", "面包"), ("", "牛角面包"), ("", "法棍"), ("", "扁面包"), ("", "椒盐卷饼"), ("", "贝果"), ("", "煎饼"), ("", "华夫饼"), ("", "奶酪"), ("", "肉骨头"), ("", "鸡腿"), ("", "肉块"), ("", "培根"), ("", "汉堡"), ("", "薯条"), ("", "披萨"), ("", "热狗"), ("", "三明治"), ("", "玉米饼"), ("", "卷饼"), ("", "玉米粽"), ("", "夹馅面包"), ("", "炸豆丸子"), ("", "蛋"), ("", "煎蛋"), ("", "平底锅食物"), ("", "炖菜"), ("", "火锅"), ("", "碗勺"), ("", "沙拉"), ("", "爆米花"), ("", "黄油"), ("", "盐"), ("", "罐头"), ("", "便当"), ("", "米饼"), ("", "饭团"), ("", "米饭"), ("", "咖喱饭"), ("", "面条"), ("", "意大利面"), ("", "红薯"), ("", "关东煮"), ("", "寿司"), ("", "炸虾"), ("", "鱼糕"), ("", "月饼"), ("", "团子"), ("", "饺子"), ("", "幸运饼干"), ("", "外卖盒"), ("", "螃蟹"), ("", "龙虾"), ("", "虾"), ("", "乌贼"), ("", "牡蛎"), ("", "软冰淇淋"), ("", "刨冰"), ("", "冰淇淋"), ("", "甜甜圈"), ("", "饼干"), ("", "生日蛋糕"), ("", "蛋糕"), ("", "纸杯蛋糕"), ("", "派"), ("", "巧克力"), ("", "糖果"), ("", "棒棒糖"), ("", "布丁"), ("", "蜂蜜罐"), ("", "奶瓶"), ("", "牛奶"), ("☕", "热饮"), ("", "茶壶"), ("", "茶杯"), ("", "清酒"), ("", "香槟"), ("", "葡萄酒"), ("", "鸡尾酒"), ("", "热带饮料"), ("", "啤酒"), ("", "干杯"), ("", "碰杯"), ("", "平底杯"), ("", "倒饮料"), ("", "带吸管杯"), ("", "珍珠奶茶"), ("", "纸盒饮料"), ("", "马黛茶"), ("", "冰块") ], "⚽ 活动与运动": [ ("⚽", "足球"), ("⚾", "棒球"), ("", "垒球"), ("", "篮球"), ("", "排球"), ("", "橄榄球"), ("", "英式橄榄球"), ("", "网球"), ("", "飞盘"), ("", "保龄球"), ("", "板球"), ("", "曲棍球"), ("", "冰球"), ("", "长曲棍球"), ("", "乒乓球"), ("", "羽毛球"), ("", "拳击手套"), ("", "道服"), ("", "球门"), ("⛳", "高尔夫洞"), ("", "风筝"), ("", "钓鱼"), ("", "潜水"), ("", "跑步衫"), ("", "滑雪"), ("", "雪橇"), ("", "冰壶"), ("", "靶心"), ("", "悠悠球"), ("", "回旋镖"), ("", "台球8"), ("", "水晶球"), ("", "魔杖"), ("", "游戏手柄"), ("️", "操纵杆"), ("", "老虎机"), ("", "骰子"), ("", "拼图"), ("♠️", "黑桃"), ("♥️", "红心"), ("♦️", "方块"), ("♣️", "梅花"), ("♟️", "兵"), ("", "小丑"), ("", "红中"), ("", "花札"), ("", "表演艺术"), ("️", "画框"), ("", "调色板") ], " 旅行与地点": [ ("", "汽车"), ("", "出租车"), ("", "SUV"), ("", "皮卡"), ("", "公交车"), ("", "无轨电车"), ("", "小巴"), ("", "救护车"), ("", "消防车"), ("", "警车"), ("", "迎面而来的警车"), ("", "迎面而来的出租车"), ("", "迎面而来的汽车"), ("", "卡车"), ("", "铰接式卡车"), ("", "拖拉机"), ("️", "赛车"), ("️", "摩托车"), ("", "踏板车"), ("", "手动轮椅"), ("", "电动轮椅"), ("", "三轮车"), ("", "自行车"), ("", "滑板车"), ("", "滑板"), ("", "轮滑鞋"), ("", "公交站"), ("️", "高速公路"), ("️", "铁路"), ("⛽", "油泵"), ("", "警车灯"), ("", "水平红绿灯"), ("", "垂直红绿灯"), ("", "停止标志"), ("", "施工"), ("⚓", "锚"), ("⛵", "帆船"), ("", "独木舟"), ("", "快艇"), ("️", "客轮"), ("⛴️", "渡轮"), ("️", "摩托艇"), ("", "船"), ("✈️", "飞机"), ("️", "小飞机"), ("", "飞机起飞"), ("", "飞机降落"), ("", "降落伞"), ("", "座位"), ("", "直升机"), ("", "高架铁路"), ("", "缆车"), ("", "空中缆车"), ("️", "卫星"), ("", "火箭"), ("", "飞碟"), ("", "地球欧洲非洲"), ("", "地球美洲"), ("", "地球亚洲澳洲"), ("", "子午线地球"), ("️", "世界地图"), ("", "日本地图"), ("", "指南针"), ("️", "雪山"), ("⛰️", "山"), ("", "火山"), ("", "富士山"), ("️", "露营"), ("️", "海滩"), ("️", "沙漠"), ("️", "荒岛"), ("️", "国家公园"), ("️", "体育场"), ("️", "古典建筑"), ("️", "建筑施工"), ("", "砖块"), ("", "岩石"), ("", "木头"), ("", "小屋"), ("️", "房屋"), ("️", "废弃房屋"), ("", "房子"), ("", "别墅"), ("", "办公楼"), ("", "邮局"), ("", "欧洲邮局"), ("", "医院"), ("", "银行"), ("", "酒店"), ("", "爱情酒店"), ("", "便利店"), ("", "学校"), ("", "百货商店"), ("", "工厂"), ("", "日本城堡"), ("", "欧洲城堡"), ("", "婚礼"), ("", "东京塔"), ("", "自由女神像"), ("⛪", "教堂"), javascript ("", "清真寺"), ("", "印度寺庙"), ("", "犹太教堂"), ("⛩️", "神社"), ("", "克尔白"), ("⛲", "喷泉"), ("⛺", "帐篷"), ("", "雾"), ("", "夜晚"), ("️", "城市景观"), ("", "日出"), ("", "日落"), ("", "黄昏城市"), ("", "日落城市"), ("", "夜晚桥梁"), ("♨️", "温泉"), ("", "旋转木马"), ("", "摩天轮"), ("", "过山车"), ("", "理发店"), ("", "马戏团"), ("", "蒸汽火车"), ("", "轨道车"), ("", "高铁"), ("", "子弹头列车"), ("", "火车"), ("", "地铁"), ("", "轻轨"), ("", "车站"), ("", "电车"), ("", "单轨"), ("", "山地铁路"), ("", "有轨电车") ], " 物品": [ ("", "灯泡"), ("", "手电筒"), ("", "红灯笼"), ("", "迪亚灯"), ("", "装饰笔记本"), ("", "合上的书"), ("", "打开的书"), ("", "绿书"), ("", "蓝书"), ("", "橙书"), ("", "一堆书"), ("", "笔记本"), ("", "账本"), ("", "卷页"), ("", "卷轴"), ("", "页面"), ("", "报纸"), ("️", "卷起的报纸"), ("", "书签标签"), ("", "书签"), ("️", "标签"), ("", "钱袋"), ("", "硬币"), ("", "日元"), ("", "美元"), ("", "欧元"), ("", "英镑"), ("", "带翅膀的钱"), ("", "信用卡"), ("", "收据"), ("✉️", "信封"), ("", "电子邮件"), ("", "来信"), ("", "带箭头的信封"), ("", "发件箱"), ("", "收件箱"), ("", "包裹"), ("", "关闭的邮箱"), ("", "降旗邮箱"), ("", "升旗邮箱"), ("", "无旗邮箱"), ("", "邮筒"), ("️", "投票箱"), ("✏️", "铅笔"), ("✒️", "钢笔尖"), ("️", "钢笔"), ("️", "圆珠笔"), ("️", "画笔"), ("️", "蜡笔"), ("", "备忘录"), ("", "公文包"), ("", "文件夹"), ("", "打开的文件夹"), ("️", "卡片索引"), ("", "日历"), ("", "撕页日历"), ("️", "螺旋记事本"), ("️", "螺旋日历"), ("", "卡片索引"), ("", "上升图表"), ("", "下降图表"), ("", "条形图"), ("", "剪贴板"), ("", "图钉"), ("", "圆图钉"), ("", "回形针"), ("️", "连接的回形针"), ("", "直尺"), ("", "三角尺"), ("✂️", "剪刀"), ("️", "卡片盒"), ("️", "文件柜"), ("️", "废纸篓"), ("", "锁定"), ("", "解锁"), ("", "墨水笔锁定"), ("", "钥匙锁定"), ("", "钥匙"), ("️", "旧钥匙"), ("", "锤子"), ("", "斧头"), ("⛏️", "镐"), ("⚒️", "锤子和镐"), ("️", "锤子和扳手"), ("️", "匕首"), ("⚔️", "交叉剑"), ("", "手枪"), ("", "回旋镖"), ("", "弓箭"), ("️", "盾牌"), ("", "木锯"), ("", "扳手"), ("", "螺丝刀"), ("", "螺母螺栓"), ("⚙️", "齿轮"), ("️", "夹钳"), ("⚖️", "天平"), ("", "盲杖"), ("", "链接"), ("⛓️", "链条"), ("", "钩子"), ("", "工具箱"), ("", "磁铁"), ("", "梯子"), ("⚗️", "蒸馏器"), ("", "试管"), ("", "培养皿"), ("", "DNA"), ("", "显微镜"), ("", "望远镜"), ("", "卫星天线"), ("", "注射器"), ("", "血滴"), ("", "药丸"), ("", "创可贴"), ("", "听诊器"), ("", "门"), ("", "电梯"), ("", "镜子"), ("", "窗户"), ("️", "床"), ("️", "沙发灯"), ("", "椅子"), ("", "马桶"), ("", "马桶刷"), ("", "淋浴"), ("", "浴缸"), ("", "捕鼠器"), ("", "剃刀"), ("", "乳液瓶"), ("", "安全别针"), ("", "扫帚"), ("", "篮子"), ("", "卷纸"), ("", "桶"), ("", "肥皂"), ("", "牙刷"), ("", "海绵"), ("", "灭火器"), ("", "购物车"), ("", "香烟"), ("⚰️", "棺材"), ("", "墓碑"), ("⚱️", "骨灰盒"), ("", "标语牌"), ("", "ATM"), ("", "垃圾桶"), ("", "饮用水"), ("♿", "轮椅"), ("", "男厕所"), ("", "女厕所"), ("", "卫生间"), ("", "婴儿"), ("", "厕所"), ("", "护照检查"), (python"", "海关"), ("", "行李领取"), ("", "行李寄存"), ("⚠️", "警告"), ("", "儿童过路"), ("⛔", "禁止进入"), ("", "禁止"), ("", "禁止自行车"), ("", "禁止吸烟"), ("", "禁止乱扔"), ("", "非饮用水"), ("", "禁止行人"), ("", "禁止手机"), ("", "18禁"), ("☢️", "放射性"), ("☣️", "生物危害") ], " 符号": [ ("❤️", "红心"), ("", "橙心"), ("", "黄心"), ("", "绿心"), ("", "蓝心"), ("", "紫心"), ("", "棕心"), ("", "黑心"), ("", "白心"), ("", "心碎"), ("❣️", "心叹号"), ("", "两颗爱心"), ("", "旋转爱心"), ("", "跳动爱心"), ("", "成长爱心"), ("", "闪烁爱心"), ("", "爱心箭"), ("", "爱心礼带"), ("", "心形装饰"), ("☮️", "和平"), ("✝️", "拉丁十字"), ("☪️", "星月"), ("️", "唵"), ("☸️", "法轮"), ("♈", "白羊"), ("♉", "金牛"), ("♊", "双子"), ("♋", "巨蟹"), ("♌", "狮子"), ("♍", "处女"), ("♎", "天秤"), ("♏", "天蝎"), ("♐", "射手"), ("♑", "摩羯"), ("♒", "水瓶"), ("♓", "双鱼"), ("⛎", "蛇夫"), ("", "六角星"), ("♻️", "回收"), ("⚛️", "原子"), ("", "烛台"), ("☯️", "阴阳"), ("✡️", "大卫之星"), ("", "初学者"), ("", "ID按钮"), ("⚕️", "医疗"), ("♾️", "无限"), ("", "VS按钮"), ("", "名牌"), ("", "三叉戟"), ("⭕", "大红圈"), ("✅", "白勾"), ("☑️", "带勾方框"), ("✔️", "粗勾"), ("❌", "叉"), ("❎", "带叉圆圈"), ("➰", "卷环"), ("➿", "双卷环"), ("〽️", "部分标记"), ("✳️", "八星"), ("✴️", "八角星"), ("❇️", "火花"), ("‼️", "双叹号"), ("⁉️", "叹问号"), ("❓", "红问号"), ("❔", "白问号"), ("❕", "白叹号"), ("❗", "红叹号"), ("〰️", "波浪破折号"), ("️", "版权"), ("️", "注册"), ("™️", "商标"), ("#️⃣", "井号"), ("*️⃣", "星号"), ("0️⃣", "0"), ("1️⃣", "1"), ("2️⃣", "2"), ("3️⃣", "3"), ("4️⃣", "4"), ("5️⃣", "5"), ("6️⃣", "6"), ("7️⃣", "7"), ("8️⃣", "8"), ("9️⃣", "9"), ("", "10"), ("", "大写"), ("", "小写"), ("", "数字"), ("", "符号"), ("", "字母"), ("️", "A按钮"), ("", "AB按钮"), ("️", "B按钮"), ("", "CL按钮"), ("", "COOL按钮"), ("", "FREE按钮"), ("ℹ️", "信息"), ("Ⓜ️", "M圆圈"), ("", "NEW按钮"), ("", "NG按钮"), ("️", "O按钮"), ("", "OK按钮"), ("️", "P按钮"), ("", "SOS按钮"), ("", "UP按钮"), ("", '日文"这里"按钮'), ("️", '日文"服务费"按钮'), ("️", '日文"月"按钮'), ("", '日文"有"按钮'), ("", '日文"指"按钮'), ("", '日文"得"按钮'), ("", '日文"割"按钮'), ("", "日文无按钮"), ("", "日文禁按钮"), ("", "日文可按钮"), ("", "日文申按钮"), ("", "日文合按钮"), ("", "日文空按钮"), ("㊗️", "日文祝按钮"), ("㊙️", "日文秘按钮"), ("", "日文营按钮"), ("", "日文满按钮"), ("", "红圈"), ("", "橙圈"), ("", "黄圈"), ("", "绿圈"), ("", "蓝圈"), ("", "紫圈"), ("", "棕圈"), ("⚫", "黑圈"), ("⚪", "白圈"), ("", "红方块"), ("", "橙方块"), ("", "黄方块"), ("", "绿方块"), ("", "蓝方块"), ("", "紫方块"), ("", "棕方块"), ("⬛", "黑方块"), ("⬜", "白方块"), ("◼️", "黑中方块"), ("◻️", "白中方块"), ("◾", "黑中小方块"), ("◽", "白中小方块"), ("▪️", "黑小方块"), ("▫️", "白小方块"), ("", "大橙钻石"), ("", "大蓝钻石"), ("", "小橙钻石"), ("", "小蓝钻石"), ("", "红三角"), ("", "倒红三角"), ("", "钻石点"), ("", "单选按钮"), ("", "白方按钮"), ("", "黑方按钮"), ("", "方格旗"), ("", "三角旗"), ("", "交叉旗"), ("", "黑旗"), ("️", "白旗"), ("️", "彩虹旗"), ("️⚧️", "跨性别旗"), ("☠️", "海盗旗") ], " 音乐与声音": [ ("", "音符"), ("", "多个音符"), ("", "乐谱"), ("️", "录音室麦克风"), ("️", "音量滑块"), ("️", "控制旋钮"), ("", "麦克风"), ("", "耳机"), ("", "收音机"), ("", "萨克斯"), ("", "手风琴"), ("", "吉他"), ("", "钢琴"), ("", "小号"), ("", "小提琴"), ("", "班卓琴"), ("", "鼓"), ("", "长鼓"), ("", "喇叭"), ("", "扩音器"), ("", "邮号"), ("", "铃铛"), ("", "无铃铛"), ("", "乐谱") ] } def populate_category_tabs(self): """填充分类标签页""" for category, emojis in self.categories.items(): tab = QWidget() layout = QVBoxLayout(tab) layout.setContentsMargins(4, 4, 4, 4) scroll = QScrollArea() scroll.setWidgetResizable(True) scroll.setFrameShape(QFrame.NoFrame) container = QWidget() container_layout = QVBoxLayout(container) container_layout.setContentsMargins(4, 4, 4, 4) emoji_list = QListWidget() emoji_list.setViewMode(QListWidget.IconMode) emoji_list.setResizeMode(QListWidget.Adjust) emoji_list.setGridSize(QSize(80, 80)) emoji_list.setSpacing(8) for emoji, name in emojis: item = QListWidgetItem(emoji) item.setData(Qt.UserRole, emoji) item.setData(Qt.ToolTipRole, f"{emoji} {name}") item.setFont(QFont("Segoe UI Emoji", 20)) item.setSizeHint(QSize(80, 80)) emoji_list.addItem(item) emoji_list.itemClicked.connect(self.copy_emoji_to_clipboard) container_layout.addWidget(emoji_list) scroll.setWidget(container) layout.addWidget(scroll) self.tabs.addTab(tab, category) def search_emojis(self): """搜索表情""" search_text = self.search_input.text().lower().strip() self.search_results_list.clear() if not search_text: self.status_label.setText("输入关键词搜索表情...") return found_count = 0 for category, emojis in self.categories.items(): for emoji, name in emojis: if search_text in name.lower() or search_text in emoji.lower(): item = QListWidgetItem(emoji) item.setData(Qt.UserRole, emoji) item.setData(Qt.ToolTipRole, f"{emoji} {name} ({category})") item.setFont(QFont("Segoe UI Emoji", 20)) item.setSizeHint(QSize(80, 80)) self.search_results_list.addItem(item) found_count += 1 if found_count > 0: self.tabs.setCurrentWidget(self.search_results_tab) self.status_label.setText(f"找到 {found_count} 个表情") else: self.status_label.setText("没有找到匹配的表情") def copy_emoji_to_clipboard(self, item): """复制表情到剪贴板""" emoji = item.data(Qt.UserRole) clipboard = QApplication.clipboard() clipboard.setText(emoji) # 显示复制成功的提示 self.statusBar().showMessage(f"已复制: {eZBiBRHXKVhmoji}", 2000) if __name__ == "__main__": app = QApplication(sys.argv) # 设置全局字体 font = QFont() font.setFamily("Microsoft YaHei") font.setPointSize(10) app.setFont(font) window = EmojiGenerator() window.show() sys.exit(app.exec_())
技术总结
创新点分析
性能优化方案:
- 采用延迟加载技术
- 实现动态渲染机制
- 优化搜索算法时间复杂度
交互设计亮点:
- 完善的工具提示系统
- 流畅的动画效果
- 符合人体工学的操作流程
扩展方向
- 添加自定义emoji功能
- 实现收藏夹管理
- 增加使用频率统计
- 开发插件系统
到此这篇关于基于Python+PyQt5打造一个跨平台Emoji表情管理神器的文章就介绍到这了,更多相关Python Emoji表情管理平台内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!
这篇关于基于Python+PyQt5打造一个跨平台Emoji表情管理神器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!