用pyside6写1个简单的查词词典(1个mdx和4个配套的mdd文件的查词词典)
用pyside6写1个简单的查词词典(1个mdx和4个配套的mdd文件的查词词典)oaldpe.mdx
oaldpe.mdd
oaldpe.1.mdd
oaldpe.2.mdd
oaldpe.3.mdd 下面是一个使用 PySide6 创建的简单查词词典程序,可以读取 mdx 文件和配套的 mdd 资源文件:
import sys
from PySide6.QtWidgets import (QApplication, QMainWindow, QWidget,
QVBoxLayout, QHBoxLayout, QLineEdit,
QPushButton, QTextBrowser)
from PySide6.QtCore import Qt
from readmdict import MDict
import os
class DictionaryApp(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("简单词典")
self.setGeometry(100, 100, 800, 600)
# 加载词典文件
base_path = "."# 假设词典文件在当前目录
mdx_file = "oaldpe.mdx"
mdd_files = ["oaldpe.mdd", "oaldpe.1.mdd", "oaldpe.2.mdd", "oaldpe.3.mdd"]
try:
self.mdict = MDict(os.path.join(base_path, mdx_file))
self.mdd_dicts = [MDict(os.path.join(base_path, mdd)) for mdd in mdd_files
if os.path.exists(os.path.join(base_path, mdd))]
except Exception as e:
print(f"加载词典文件出错: {e}")
self.mdict = None
self.mdd_dicts = []
self.init_ui()
def init_ui(self):
central_widget = QWidget()
self.setCentralWidget(central_widget)
layout = QVBoxLayout(central_widget)
# 搜索栏
search_layout = QHBoxLayout()
self.search_input = QLineEdit()
self.search_input.setPlaceholderText("输入要查询的单词")
self.search_input.returnPressed.connect(self.search_word)
search_button = QPushButton("搜索")
search_button.clicked.connect(self.search_word)
search_layout.addWidget(self.search_input)
search_layout.addWidget(search_button)
# 结果显示区域
self.result_display = QTextBrowser()
self.result_display.setOpenExternalLinks(True)
layout.addLayout(search_layout)
layout.addWidget(self.result_display)
def search_word(self):
if not self.mdict:
self.result_display.setHtml("<h3>词典文件加载失败</h3>")
return
word = self.search_input.text().strip()
if not word:
return
try:
# 查询单词
result = self.mdict.lookup(word)
if result:
# 获取HTML内容
html_content = result.decode('utf-8', errors='ignore')
self.result_display.setHtml(html_content)
else:
self.result_display.setHtml(f"<h3>未找到单词: {word}</h3>")
except Exception as e:
self.result_display.setHtml(f"<h3>查询出错: {str(e)}</h3>")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = DictionaryApp()
window.show()
sys.exit(app.exec())
使用前需要安装以下依赖:
安装必要的库:
pip install PySide6 readmdict
使用说明:
1. 确保 oaldpe.mdx 和配套的 mdd 文件在同一目录下
2. 运行程序后,在输入框中输入要查询的单词
3. 按回车或点击搜索按钮查看结果
注意事项:
1. 这个示例使用了 readmdict 库来读取 mdx 文件
2. 程序会尝试加载所有存在的 mdd 资源文件
3. 显示的内容是原始的 HTML 格式,可能包含样式和图片引用
4. 如果查询的单词不存在,会显示提示信息
扩展功能建议:
1. 添加历史记录功能
2. 实现单词收藏功能
3. 添加发音功能(需要处理音频资源)
4. 改进界面样式和用户体验
5. 添加模糊查询和自动补全功能
这个基础版本应该能够满足基本的查词需求。如果需要更复杂的功能,可以在此基础上进行扩展。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2025-9-8 20:50
下面是一个使用 PySide6 创建的简单查词词典程序,可以读取 mdx 文件和配套的 mdd 资源文件:
Traceback (most recent call last):
File "h:\words-11\words11\test_mdd_viewer-fish.py", line 7, in <module>
from readmdict import MDict
ImportError: cannot import name 'MDict' from 'readmdict' (C:\Users\dengz\anaconda3\envs\spacy_env311_gpu\Lib\site-packages\readmdict\__init__.py) blackantt 发表于 2025-09-08 20:53
FishC 发表于 2025-9-8 20:50
下面是一个使用 PySide ...
看起来您遇到了导入问题。让我提供一个使用纯 Python 解析 MDX 文件的简单词典实现,不需要额外的 `readmdict` 库:
import sys
import struct
import re
from PySide6.QtWidgets import (QApplication, QMainWindow, QWidget,
QVBoxLayout, QHBoxLayout, QLineEdit,
QPushButton, QTextBrowser)
from PySide6.QtCore import Qt
class MDXParser:
def __init__(self, mdx_file):
self.mdx_file = mdx_file
self.entries = {}
self.load_mdx()
def load_mdx(self):
try:
with open(self.mdx_file, 'rb') as f:
# 读取文件头信息
header = f.read(4)
if header != b'MDX\x00':
raise ValueError("不是有效的MDX文件")
# 跳过文件头,直接读取词条
# 这是一个简化的实现,实际MDX文件结构更复杂
f.seek(0)
content = f.read()
# 使用正则表达式查找词条
# 注意:这是一个简化的实现,实际MDX格式更复杂
pattern = rb'@@@LINK=([^|]+)|<a href="([^"]+)">([^<]+)</a>'
matches = re.findall(pattern, content)
for match in matches:
if match:# LINK格式
key = match.decode('utf-8', errors='ignore')
self.entries = f"重定向到: {key}"
elif match:# 超链接格式
key = match.decode('utf-8', errors='ignore')
self.entries = f"词条: {key}"
except Exception as e:
print(f"加载MDX文件出错: {e}")
def lookup(self, word):
return self.entries.get(word, b'')
class DictionaryApp(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("简单词典")
self.setGeometry(100, 100, 800, 600)
# 加载词典文件
mdx_file = "oaldpe.mdx"
try:
self.parser = MDXParser(mdx_file)
except Exception as e:
print(f"初始化词典解析器出错: {e}")
self.parser = None
self.init_ui()
def init_ui(self):
central_widget = QWidget()
self.setCentralWidget(central_widget)
layout = QVBoxLayout(central_widget)
# 搜索栏
search_layout = QHBoxLayout()
self.search_input = QLineEdit()
self.search_input.setPlaceholderText("输入要查询的单词")
self.search_input.returnPressed.connect(self.search_word)
search_button = QPushButton("搜索")
search_button.clicked.connect(self.search_word)
search_layout.addWidget(self.search_input)
search_layout.addWidget(search_button)
# 结果显示区域
self.result_display = QTextBrowser()
self.result_display.setOpenExternalLinks(True)
layout.addLayout(search_layout)
layout.addWidget(self.result_display)
def search_word(self):
if not self.parser:
self.result_display.setHtml("词典文件加载失败")
return
word = self.search_input.text().strip()
if not word:
return
try:
# 查询单词
result = self.parser.lookup(word)
if result:
self.result_display.setPlainText(result)
else:
self.result_display.setPlainText(f"未找到单词: {word}")
except Exception as e:
self.result_display.setPlainText(f"查询出错: {str(e)}")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = DictionaryApp()
window.show()
sys.exit(app.exec())
注意:这个实现是一个简化版本,实际上MDX文件格式比较复杂,包含压缩数据和特定的结构。要完整解析MDX文件,您可能需要使用专门的库。
如果您想使用更完整的MDX解析功能,我建议尝试以下方法:
1. 安装正确版本的readmdict库:
pip install readmdict
2. 或者尝试使用另一个MDX解析库:
pip install mdict-utils
3. 如果仍然无法导入,您可以尝试直接从GitHub获取readmdict库:
pip install git+https://github.com/zhansliu/writemdict.git
如果您需要更完整的MDX文件支持,建议使用专门的MDX阅读器软件,或者寻找更成熟的MDX解析Python库。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 ? 某一个“天” 发表于 2025-9-8 23:03
?
找个好用的词典软件 blackantt 发表于 2025-9-9 00:30
找个好用的词典软件
有道 某一个“天” 发表于 2025-9-9 00:31
有道
代码 :) blackantt 发表于 2025-9-9 00:39
代码 :)
{:5_104:}
页:
[1]