Pyqt5实现英文学习词典

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

一、演示效果

1、整体效果

2、添加:

3、添加相同单词时:

4、查找

5、查找文档中不存在时

5、删除

二、源码

PyCharm + Python3 + PyQt5

1、工程结构

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_())

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

(0)

相关推荐

  • 使用Python从有道词典网页获取单词翻译

    从有道词典网页获取某单词的中文解释. import re import urllib word=raw_input('input a word\n') url='http://dict.youdao.com/search?q=%s'%word content=urllib.urlopen(url) pattern=re.compile("</h2.*?</ul>",re.DOTALL) result=pattern.search(content.read()).gro

  • python进阶教程之词典、字典、dict

    基础教程介绍了基本概念,特别是对象和类. 进阶教程对基础教程的进一步拓展,说明Python的细节.希望在进阶教程之后,你对Python有一个更全面的认识. 之前我们说了,列表是Python里的一个类.一个特定的表,比如说nl = [1,3,8],就是这个类的一个对象.我们可以调用这个对象的一些方法,比如 nl.append(15). 我们要介绍一个新的类,词典 (dictionary).与列表相似,词典也可以储存多个元素.这种储存多个元素的对象称为容器(container). 基本概念 常见的创

  • 对python中词典的values值的修改或新增KEY详解

    在python中,对词典的值,可以新增,或者修改,如下: 以上这篇对python中词典的values值的修改或新增KEY详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 利用python实现命令行有道词典的方法示例

    前言 由于一直用Linux系统,对于词典的支持特别不好,对于我这英语渣渣的人来说,当看英文文档就一直卡壳,之前用惯了有道词典,感觉很不错,虽然有网页版的但是对于全站英文的网页来说并不支持.索性自己实现一个,基于Python编写的小工具实现有道词典,思路也很简单,直接调用有道的api,解析下返回的json就ok了. 只用到了python原生的库,支持python2和python3. 示例代码 #!/usr/bin/env python # -*- coding:utf-8 -*- # API ke

  • Pyqt5实现英文学习词典

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

  • PyQt5实现简易电子词典

    PyQt5是python中一个非常实用的GUI编程模块,功能十分强大.刚刚学完了Pyqt的编程,就迫不及待的写出了一个电子词典GUI程序.整个程序使用qt Desiner把整个gui界面做好,槽函数则自己写好的.电子词典实现了查询单词,查询历史记录,收藏和查看单词本的功能,另外为了是程序更加炫酷,还添加了一个启动界面.具体代码如下: 第一个为主程序代码,主要实现槽函数功能. from PyQt5.QtCore import pyqtSlot from PyQt5.QtWidgets import

  • 不能不知道的10个angularjs英文学习网站

    AngularJS 是非常棒的JS框架,能够创建功能强大,动态功能的Web app.AngularJS自2009发布以来,已经广泛应用于Web 开发中.但是对想要学习Angular JS 的人而言,只有官方文档,那是万万不够的.大多数人更愿意看一些入门视频,或者是更易于理解学习的Demo程序.因此本文推荐了10个AngularJS 学习指南,助你一臂之力. 1. Year of Moo 超级赞的AngularJS学习指南,是由Year of Moo 创建的,包含AngularJS基本知识以及An

  • 使用 Python 遍历目录树的方法

    假设有这样一个任务,希望对某个文件夹(包括所有子文件夹与文件)中的所有文件进行处理.这就需要遍历整理目录树, 处理遇到的每个文件. import os ''' 遍历目录树 ''' for folder_name,sub_folders,filenames in os.walk('F:\\dicts'): print('当前文件夹:'+folder_name) for sub_folder in sub_folders: print('所包含的子文件夹:'+sub_folder) for file

  • 基于Android的英文词典的实现方法

    英文词典是手机中经常使用的应用.因此,在本文将结合Android来讨论如何实现一个Android版的英文词典.实现英文词典的方法很多.在本文使用了SQLite数据库来保存英文单词信息.系统通过SQLite数据库中保存的单词信息来查找到与指定英文对应的中文信息.当然,实现这样一个英文词典需要解决一系列技术问题.例如,如何将保存英文单词信息的数据库文件随程序(apk文件)一起发布:发布后如何打开数据库:如何在输入前几个字母后,在AutoCompleteTextView组件提示列表中显示以所输入字符串

  • Python深度学习实战PyQt5菜单和工具栏功能作用

    目录 1. 创建主窗口 1.1 窗口类型 1.2 编辑窗口的属性 1.3 图形界面设计的预览 2. 建立菜单栏 2.1 建立一级菜单 2.2 建立二级菜单 2.3 关联动作 3. 建立工具栏 3.1 添加工具栏 3.2 添加和编辑动作对象 3.3 向工具栏添加动作对象 4. 编写 Python 应用程序调用图形界面 1. 创建主窗口 上文中我们建立的图形界面程序 GUIdemo2.py,通过导入图形界面 uiDemo1.py,已经实现了主窗口的创建. 1.1 窗口类型 进一步地,在 QtDesi

  • php+xml实现在线英文词典之添加词条的方法

    本文实例讲述了php+xml实现在线英文词典之添加词条的方法.分享给大家供大家参考.具体如下: 接着上一篇<php+xml实现在线英文词典查询的方法>,这里要添加一个功能,提交英文单词和中文意思,将这些信息添加到xml文档中. xml文件(数据库):words.xml 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <words> <word>  <en>

  • php+xml实现在线英文词典查询的方法

    本文实例讲述了php+xml实现在线英文词典查询的方法.分享给大家供大家参考.具体如下: 这里的xml相当于一个数据库.实现:查询某个英文单词,输出它的中文意思. xml文件(数据库):words.xml如下: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <words> <word>  <en>boy</en>  <ch>男孩</ch

  • Python深度学习实战PyQt5基本控件使用解析

    目录 1. PyQt5 控件简介 1.1 什么是控件 1.2 编辑控件的属性 1.3 PyQt5 的控件类型 输入控件: 显示控件: 高级控件: 2. 按钮控件 2.1 按钮控件简介 2.2 按键按钮(QPushButton) 2.3 其它按钮 3. 输入控件 3.1 输入控件简介 3.2 文本输入控件 3.3 调节输入控件 4. Python 应用程序调用图形界面 1. PyQt5 控件简介 1.1 什么是控件 控件也称控件对象,是 Qt用户界面上最基本的组件类型,也是构成用户界面的基本结构.

  • Python深度学习实战PyQt5信号与槽的连接

    目录 1. 信号与槽(Signals and slots) 1.1 信号与槽的原理 1.2 信号发送者与槽的接收者 2. QtDesigner 建立信号与槽的连接 2.1 信号与槽的连接:不同的发送者与接收者,槽函数为控件的内置函数 QtDesigner 设置信号/槽的连接的操作步骤如下: 2.2 信号与槽的连接:不同的发送者与接收者,槽函数为自定义函数 QtDesigner 设置信号/槽的连接的操作步骤如下: 2.3 信号与槽的连接:相同的发送者与接收者,槽函数为控件的内置函数 2.4 信号与

随机推荐