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 拷贝对象(深拷贝deepcopy与浅拷贝copy)
Sep 06 Python
python多进程共享变量
Apr 06 Python
python django 实现验证码的功能实例代码
May 18 Python
python绘制铅球的运行轨迹代码分享
Nov 14 Python
python模块smtplib实现纯文本邮件发送功能
May 22 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 Python
基于Pycharm加载多个项目过程图解
Jan 19 Python
python 命名规范知识点汇总
Feb 14 Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 Python
golang中的空接口使用详解
Mar 30 Python
python文件目录操作之os模块
May 08 Python
python基础之函数的定义和调用
Oct 24 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 和 XML: 使用expat函数(一)
2006/10/09 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
php实现的常见排序算法汇总
2014/09/08 PHP
一个php生成16位随机数的代码(两种方法)
2014/09/16 PHP
PHP打开和关闭文件操作函数总结
2014/11/18 PHP
php实现源代码加密的方法
2015/07/11 PHP
使用PHP生成图片的缩略图的方法
2015/08/18 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
2017/04/19 PHP
常用简易JavaScript函数
2009/04/09 Javascript
csdn 博客中实现运行代码功能实现
2009/08/29 Javascript
浅析Prototype的模板类 Template
2011/12/07 Javascript
火狐下table中创建form导致两个table之间出现空白
2013/09/02 Javascript
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
记React connect的几种写法(小结)
2018/09/18 Javascript
在vue项目中优雅的使用SVG的方法实例详解
2018/12/03 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
python 查找文件夹下所有文件 实现代码
2009/07/01 Python
30分钟搭建Python的Flask框架并在上面编写第一个应用
2015/03/30 Python
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
widows下安装pycurl并利用pycurl请求https地址的方法
2018/10/15 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
Python按照list dict key进行排序过程解析
2020/04/04 Python
使用HTML5 Canvas API绘制弧线的教程
2016/03/22 HTML / CSS
巴西宠物商店:Cobasi
2019/04/19 全球购物
秘书英文求职信范文
2014/01/31 职场文书
潘婷洗发水广告词
2014/03/14 职场文书
党员干部承诺书
2014/03/25 职场文书
党员个人自我评价
2015/03/03 职场文书
企业爱心捐款倡议书
2015/04/27 职场文书
致运动员赞词
2015/07/22 职场文书
小公司融资,商业计划书的8切记
2019/07/15 职场文书
十大冰系宝可梦排名,颜值最高的阿罗拉九尾,第三使用率第一
2022/03/18 日漫
Nginx HTTP跳转至HTTPS
2022/05/15 Servers