Pyqt5实现英文学习词典


Posted in Python onJune 24, 2019

运用Python语言编写程序制作英文学习词典,词典有4个基本功能:添加、查询、删除和退出。程序读取源文件路径下的txt格式词典文件,若没有就创建一个。词典文件存储方式为“英文单词 中文单词”,每行仅有一对中英释义。程序会根据用户的选择进入相应的功能模块,并显示相应的操作提示。当添加的单词已存在时,显示“该单词已添加到字典库”;当查询的单词不存在时,显示“字典库中未找到这个单词”;但需要删除某个单词时先查询再删除该单词的全部中英文释义。

一、演示效果

1、整体效果

Pyqt5实现英文学习词典

2、添加:

Pyqt5实现英文学习词典

Pyqt5实现英文学习词典

3、添加相同单词时:

Pyqt5实现英文学习词典

4、查找

Pyqt5实现英文学习词典

5、查找文档中不存在时

Pyqt5实现英文学习词典

5、删除

Pyqt5实现英文学习词典

Pyqt5实现英文学习词典

Pyqt5实现英文学习词典

Pyqt5实现英文学习词典

二、源码

PyCharm + Python3 + PyQt5

1、工程结构

Pyqt5实现英文学习词典

2、PyQt5设计UI源码

# -*- coding: utf-8 -*-
 
# Form implementation generated from reading ui file 'dic_UI.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
 
from PyQt5 import QtCore, QtGui, QtWidgets
 
class Ui_MainWindow(object):
 def setupUi(self, MainWindow):
 MainWindow.setObjectName("MainWindow")
 MainWindow.resize(672, 634)
 MainWindow.setStyleSheet("background-color: rgb(0, 0, 255);")
 self.centralwidget = QtWidgets.QWidget(MainWindow)
 self.centralwidget.setObjectName("centralwidget")
 self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
 self.verticalLayout.setObjectName("verticalLayout")
 self.gridLayout_4 = QtWidgets.QGridLayout()
 self.gridLayout_4.setObjectName("gridLayout_4")
 self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
 font = QtGui.QFont()
 font.setPointSize(20)
 self.groupBox.setFont(font)
 self.groupBox.setStyleSheet("color: rgb(255, 255, 255);")
 self.groupBox.setObjectName("groupBox")
 self.widget = QtWidgets.QWidget(self.groupBox)
 self.widget.setGeometry(QtCore.QRect(20, 40, 601, 131))
 self.widget.setObjectName("widget")
 self.gridLayout = QtWidgets.QGridLayout(self.widget)
 self.gridLayout.setContentsMargins(0, 0, 0, 0)
 self.gridLayout.setObjectName("gridLayout")
 self.label_2 = QtWidgets.QLabel(self.widget)
 font = QtGui.QFont()
 font.setPointSize(20)
 self.label_2.setFont(font)
 self.label_2.setObjectName("label_2")
 self.gridLayout.addWidget(self.label_2, 0, 0, 1, 1)
 self.lineEdit_English = QtWidgets.QLineEdit(self.widget)
 font = QtGui.QFont()
 font.setPointSize(20)
 self.lineEdit_English.setFont(font)
 self.lineEdit_English.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"color: rgb(0, 0, 0);")
 self.lineEdit_English.setText("")
 self.lineEdit_English.setObjectName("lineEdit_English")
 self.gridLayout.addWidget(self.lineEdit_English, 0, 1, 1, 1)
 self.pushButton_add = QtWidgets.QPushButton(self.widget)
 font = QtGui.QFont()
 font.setPointSize(16)
 self.pushButton_add.setFont(font)
 self.pushButton_add.setObjectName("pushButton_add")
 self.gridLayout.addWidget(self.pushButton_add, 0, 2, 1, 1)
 self.label_3 = QtWidgets.QLabel(self.widget)
 font = QtGui.QFont()
 font.setPointSize(20)
 self.label_3.setFont(font)
 self.label_3.setObjectName("label_3")
 self.gridLayout.addWidget(self.label_3, 1, 0, 1, 1)
 self.lineEdit_chinese = QtWidgets.QLineEdit(self.widget)
 font = QtGui.QFont()
 font.setPointSize(20)
 self.lineEdit_chinese.setFont(font)
 self.lineEdit_chinese.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"color: rgb(0, 0, 0);")
 self.lineEdit_chinese.setObjectName("lineEdit_chinese")
 self.gridLayout.addWidget(self.lineEdit_chinese, 1, 1, 1, 1)
 self.pushButton_reset = QtWidgets.QPushButton(self.widget)
 font = QtGui.QFont()
 font.setPointSize(16)
 self.pushButton_reset.setFont(font)
 self.pushButton_reset.setObjectName("pushButton_reset")
 self.gridLayout.addWidget(self.pushButton_reset, 1, 2, 1, 1)
 self.gridLayout_4.addWidget(self.groupBox, 0, 0, 1, 1)
 self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget)
 font = QtGui.QFont()
 font.setPointSize(20)
 self.groupBox_2.setFont(font)
 self.groupBox_2.setStyleSheet("color: rgb(255, 255, 255);")
 self.groupBox_2.setObjectName("groupBox_2")
 self.widget1 = QtWidgets.QWidget(self.groupBox_2)
 self.widget1.setGeometry(QtCore.QRect(40, 40, 561, 131))
 self.widget1.setObjectName("widget1")
 self.gridLayout_2 = QtWidgets.QGridLayout(self.widget1)
 self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
 self.gridLayout_2.setObjectName("gridLayout_2")
 self.label_4 = QtWidgets.QLabel(self.widget1)
 font = QtGui.QFont()
 font.setPointSize(20)
 self.label_4.setFont(font)
 self.label_4.setObjectName("label_4")
 self.gridLayout_2.addWidget(self.label_4, 0, 0, 1, 1)
 self.lineEdit_find = QtWidgets.QLineEdit(self.widget1)
 font = QtGui.QFont()
 font.setPointSize(20)
 self.lineEdit_find.setFont(font)
 self.lineEdit_find.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"color: rgb(0, 0, 0);")
 self.lineEdit_find.setText("")
 self.lineEdit_find.setObjectName("lineEdit_find")
 self.gridLayout_2.addWidget(self.lineEdit_find, 0, 1, 1, 1)
 self.pushButton_find = QtWidgets.QPushButton(self.widget1)
 font = QtGui.QFont()
 font.setPointSize(16)
 self.pushButton_find.setFont(font)
 self.pushButton_find.setObjectName("pushButton_find")
 self.gridLayout_2.addWidget(self.pushButton_find, 0, 2, 1, 1)
 self.groupBox_4 = QtWidgets.QGroupBox(self.widget1)
 self.groupBox_4.setTitle("")
 self.groupBox_4.setObjectName("groupBox_4")
 self.label_result = QtWidgets.QLabel(self.groupBox_4)
 self.label_result.setGeometry(QtCore.QRect(20, 10, 501, 51))
 font = QtGui.QFont()
 font.setPointSize(20)
 self.label_result.setFont(font)
 self.label_result.setText("")
 self.label_result.setAlignment(QtCore.Qt.AlignCenter)
 self.label_result.setObjectName("label_result")
 self.gridLayout_2.addWidget(self.groupBox_4, 1, 0, 1, 3)
 self.gridLayout_4.addWidget(self.groupBox_2, 1, 0, 1, 1)
 self.groupBox_3 = QtWidgets.QGroupBox(self.centralwidget)
 font = QtGui.QFont()
 font.setPointSize(20)
 self.groupBox_3.setFont(font)
 self.groupBox_3.setStyleSheet("color: rgb(255, 255, 255);")
 self.groupBox_3.setObjectName("groupBox_3")
 self.label_del = QtWidgets.QLabel(self.groupBox_3)
 self.label_del.setGeometry(QtCore.QRect(40, 120, 561, 51))
 font = QtGui.QFont()
 font.setPointSize(20)
 self.label_del.setFont(font)
 self.label_del.setText("")
 self.label_del.setAlignment(QtCore.Qt.AlignCenter)
 self.label_del.setObjectName("label_del")
 self.widget2 = QtWidgets.QWidget(self.groupBox_3)
 self.widget2.setGeometry(QtCore.QRect(40, 40, 561, 61))
 self.widget2.setObjectName("widget2")
 self.gridLayout_3 = QtWidgets.QGridLayout(self.widget2)
 self.gridLayout_3.setContentsMargins(0, 0, 0, 0)
 self.gridLayout_3.setObjectName("gridLayout_3")
 self.label_6 = QtWidgets.QLabel(self.widget2)
 font = QtGui.QFont()
 font.setPointSize(20)
 self.label_6.setFont(font)
 self.label_6.setObjectName("label_6")
 self.gridLayout_3.addWidget(self.label_6, 0, 0, 1, 1)
 self.lineEdit_del = QtWidgets.QLineEdit(self.widget2)
 font = QtGui.QFont()
 font.setPointSize(20)
 self.lineEdit_del.setFont(font)
 self.lineEdit_del.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"color: rgb(0, 0, 0);")
 self.lineEdit_del.setText("")
 self.lineEdit_del.setObjectName("lineEdit_del")
 self.gridLayout_3.addWidget(self.lineEdit_del, 0, 1, 1, 1)
 self.pushButton_del = QtWidgets.QPushButton(self.widget2)
 font = QtGui.QFont()
 font.setPointSize(16)
 self.pushButton_del.setFont(font)
 self.pushButton_del.setObjectName("pushButton_del")
 self.gridLayout_3.addWidget(self.pushButton_del, 0, 2, 1, 1)
 self.gridLayout_4.addWidget(self.groupBox_3, 2, 0, 1, 1)
 self.verticalLayout.addLayout(self.gridLayout_4)
 MainWindow.setCentralWidget(self.centralwidget)
 self.menubar = QtWidgets.QMenuBar(MainWindow)
 self.menubar.setGeometry(QtCore.QRect(0, 0, 672, 26))
 self.menubar.setObjectName("menubar")
 MainWindow.setMenuBar(self.menubar)
 self.statusbar = QtWidgets.QStatusBar(MainWindow)
 self.statusbar.setObjectName("statusbar")
 MainWindow.setStatusBar(self.statusbar)
 
 self.retranslateUi(MainWindow)
 QtCore.QMetaObject.connectSlotsByName(MainWindow)
 
 def retranslateUi(self, MainWindow):
 _translate = QtCore.QCoreApplication.translate
 MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
 self.groupBox.setTitle(_translate("MainWindow", "添加词典"))
 self.label_2.setText(_translate("MainWindow", "英文:"))
 self.pushButton_add.setText(_translate("MainWindow", "添加"))
 self.label_3.setText(_translate("MainWindow", "中文:"))
 self.pushButton_reset.setText(_translate("MainWindow", "重置"))
 self.groupBox_2.setTitle(_translate("MainWindow", "查找词典"))
 self.label_4.setText(_translate("MainWindow", "英文:"))
 self.pushButton_find.setText(_translate("MainWindow", "查找"))
 self.groupBox_3.setTitle(_translate("MainWindow", "删除词典"))
 self.label_6.setText(_translate("MainWindow", "英文:"))
 self.pushButton_del.setText(_translate("MainWindow", "删除"))

3、后台源码

from PyQt5.QtWidgets import *
class DIC:
 def __init__(self, ui, mainWnd):
 self.ui = ui
 self.mainWnd = mainWnd
 self.mainWnd.setWindowTitle('英文学习词典 作者:申俊')
 self.ui.pushButton_add.clicked.connect(self.add)
 self.ui.pushButton_reset.clicked.connect(self.reset)
 self.ui.pushButton_find.clicked.connect(self.find)
 self.ui.pushButton_del.clicked.connect(self.delate)
 
 def add(self):
 yinwen = self.ui.lineEdit_English.text()
 zhongwen = self.ui.lineEdit_chinese.text()
 print("添加:", yinwen, zhongwen)
 flag = 0
 dic = {}
 try:
  f = open("2016117249.txt", 'r')
 except FileNotFoundError:
  open("2016117249.txt", mode='w', encoding='utf-8')
  f = open("2016117249.txt", 'r')
 for line in f.readlines():
  line = line.replace("\n", "")
  line = list(line.split(","))
  key = line[0]
  coment = line[1:]
  dic[key] = coment
  if yinwen in dic.keys():
  f.close()
  flag = 1
  self.ui.label_result.setText("该单词已添加到字典库!")
  break
  else:
  f.close()
 if flag != 1:
  fw = open("2016117249.txt", 'a')
  try:
  fw.write(yinwen + ',' + zhongwen + '\n')
  self.ui.label_result.setText("添加成功!")
  except:
  self.ui.label_result.setText("添加失败!")
  fw.close()
 
 def reset(self):
 self.ui.lineEdit_chinese.clear()
 self.ui.lineEdit_English.clear()
 self.ui.label_result.setText("")
 
 
 def find(self):
 w = self.ui.lineEdit_find.text()
 fr = open("2016117249.txt", 'r')
 dic = {}
 for line in fr.readlines():
  line = line.replace("\n", "") # 去除每一行末尾的换行符
  line = list(line.split(",")) # 将每行的英文与各个汉语意思分隔开,生成一个列表
  key = line[0] # 将每行开头的英文设置为键
  coment = line[1:] # 将1往后位置的所有汉语意思设置为值
  dic[key] = coment # 设置字典
 if w in dic.keys(): # 如果输入的单词存在,则对其键值打印
  self.ui.label_result.setText("翻译结果:" + str(dic[w]))
 else:
  self.ui.label_result.setText("字典库中未找到这个单词")
 fr.close()
 
 def delate(self):
 reply = QMessageBox.question(self.mainWnd, 'Message', '确认删除',
     QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
 if reply == QMessageBox.Yes:
  word = self.ui.lineEdit_del.text()
  lines = [l for l in open("2016117249.txt", "r") if l.find(word, 0, len(word)) != 0]
  fd = open("2016117249.txt", "w")
  try:
  fd.writelines(lines)
  self.ui.label_del.setText(word + "已经被删除")
  except:
  self.ui.label_del.setText(word + "删除失败")
  fd.close()

4、主程序

import sys
from dic_UI import Ui_MainWindow
from PyQt5.QtWidgets import *
from dictionary import DIC
if __name__ == '__main__':
 app = QApplication(sys.argv)
 mainWnd = QMainWindow()
 ui = Ui_MainWindow()
 # 可以理解成将创建的 ui 绑定到新建的 mainWnd 上
 ui.setupUi(mainWnd)
 display = DIC(ui, mainWnd)
 mainWnd.show()
 sys.exit(app.exec_())

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python正则表达式re模块详细介绍
May 29 Python
简单谈谈python中的Queue与多进程
Aug 25 Python
python 类详解及简单实例
Mar 24 Python
Python实现获取命令行输出结果的方法
Jun 10 Python
Python学习笔记之open()函数打开文件路径报错问题
Apr 28 Python
使用python实现对元素的长截图功能
Nov 14 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
Mar 06 Python
Python3 mmap内存映射文件示例解析
Mar 23 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
Aug 24 Python
Python定时任务框架APScheduler原理及常用代码
Oct 05 Python
详解Python中string模块除去Str还剩下什么
Nov 30 Python
python geopandas读取、创建shapefile文件的方法
Jun 29 Python
set在python里的含义和用法
Jun 24 #Python
如何利用Anaconda配置简单的Python环境
Jun 24 #Python
python程序变成软件的实操方法
Jun 24 #Python
PyCharm安装Markdown插件的两种方法
Jun 24 #Python
python设置环境变量的原因和方法
Jun 24 #Python
详解PyCharm安装MicroPython插件的教程
Jun 24 #Python
详解python深浅拷贝区别
Jun 24 #Python
You might like
PHP函数preg_match_all正则表达式的基本使用详细解析
2013/08/31 PHP
CI框架中site_url()和base_url()的区别
2015/01/07 PHP
PHP获取QQ达人QQ信息的方法
2015/03/05 PHP
php正则替换处理HTML页面的方法
2015/06/17 PHP
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
2009/04/01 Javascript
Extjs学习笔记之四 工具栏和菜单
2010/01/07 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
用unescape反编码得出汉字示例
2014/04/24 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
jQuery操作json常用方法示例
2017/01/04 Javascript
jQuery中的deferred使用方法
2017/03/27 jQuery
webpack配置的最佳实践分享
2017/04/21 Javascript
浅谈Vue 初始化性能优化
2017/08/31 Javascript
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
Vue页面骨架屏的实现方法
2018/05/22 Javascript
Js通过AES加密后PHP用Openssl解密的方法
2019/07/12 Javascript
vue下axios拦截器token刷新机制的实例代码
2020/01/17 Javascript
JS实现打砖块游戏
2020/02/14 Javascript
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
nodejs中内置模块fs,path常见的用法说明
2020/11/07 NodeJs
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
深入理解Python3 内置函数大全
2017/11/23 Python
pandas series序列转化为星期几的实例
2018/04/11 Python
Python常见字典内建函数用法示例
2018/05/14 Python
Pycharm新手使用教程(图文详解)
2020/09/17 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
2020/12/08 Python
新闻专业个人自我评价
2013/09/21 职场文书
学年末自我鉴定
2014/01/21 职场文书
观看《永远的雷锋》心得体会
2014/03/12 职场文书
婚礼主持词开场白
2014/03/13 职场文书
党员反四风学习心得体会
2016/01/22 职场文书
go语言中http超时引发的事故解决
2021/06/02 Golang
eclipse创建项目没有dynamic web的解决方法
2021/06/24 Java/Android