PyQt5实现简易电子词典


Posted in Python onJune 25, 2019

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

第一个为主程序代码,主要实现槽函数功能。

from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QMainWindow
from PyQt5 import QtWidgets
from Ui_E_Dict_Main import Ui_E_Dictory
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import time, re
 
# 槽函数代码,运行程序需要运行本文件
class MainWindow(QMainWindow, Ui_E_Dictory):
 """
 Class documentation goes here.
 """
 def __init__(self, parent=None):
  """
  Constructor
  
  @param parent reference to the parent widget
  @type QWidget
  """
  super(MainWindow, self).__init__(parent)
  self.setupUi(self)
  # 启动时休眠1秒
  time.sleep(1)
 
 # 按钮1 查找单词,把单词显示在textBrowser的同时,插入历史记录
 @pyqtSlot()
 def on_pushButton_clicked(self):
  """
  Slot documentation goes here.
  """
  # 单词查询,需要先有一个'dict.txt'文件,其中有大量的英文单词和注释
  # 此处也可以先把'dict.txt'插入数据库,历史记录和单词本的插入和查询都可以直接操作数据库
  # 不过数据库需要事先安装数据库,并建立相应的表,不好打包,不太方便
  word=self.lineEdit.text()
  f=open('dict.txt', 'r')
  for line in f:
   # 对字典文件的数据进行分析,拆解为适合显示的格式
   l = re.split('[ ]+',line)
   if l[0]==word:
    interpret=' '.join(l[1:])
    data='%s\n %s'%(l[0], interpret)
    # interpret='%s: %s'%(l[0],' '.join(l[1:]))
    self.textBrowser.setText(data)
    # 当地时间
    t1=time.localtime()
    t2=time.asctime(t1)
    #self.lineEdit.setText("")#lineEdit输入后清零,可要可不要
    try:
     # 把所查询单词插入历史记录中,
     #'a'以只写文件打开一个文件,如果有原文件则追加到文件末尾
     file=open('history.txt', 'at')
     msg='%s %s'%(word, t2)
     file.write(msg)
     file.write('\n')
     file.close()
    except Exception as e:
     print(e)
  f.close()
   
    
 @pyqtSlot()
 def on_pushButton_2_clicked(self):
  """
  Slot documentation goes here.
  """
  try:
   # 查询历史记录,把历史记录显示在textBrowser中
   file=open('history.txt', 'rt')   
   list=file.readlines()
   msg=''.join(list)
   self.textBrowser.setText(msg)
   file.close()
  except Exception as e:
     print(e)
     
  
 @pyqtSlot()
 def on_pushButton_3_clicked(self):
  """
  Slot documentation goes here.
  """
  try:
   # 查询单词本,把单词本显示在textBrowser中
   file=open('words.txt', 'rt')   
   list=file.readlines()
   msg=''.join(list)
   self.textBrowser.setText(msg)
   file.close()
  except Exception as e:
     print(e)
  
 
 
 @pyqtSlot()
 def on_pushButton_4_clicked(self):
  """
  Slot documentation goes here.
  """
  word=self.lineEdit.text()
  try:
   # 把所查询单词插入单词本中
   file=open('words.txt', 'at')
   file.write(word)
   file.write('\n')
   file.close()
  except Exception as e:
   print(e)  
 
  
  
if __name__ == "__main__":
 import sys
 app = QtWidgets.QApplication(sys.argv)
 # 启动界面的实现,可以使程序更加炫酷
 splash=QtWidgets.QSplashScreen(QPixmap("Saved Pictures/5b517f520feaa.jpg"))
 # 启动界面显示
 splash.show()
 # 在启动界面中显示程序加载进度,参数意思分别为居中显示,蓝色字体
 splash.showMessage('正在加载图片资源', Qt.AlignCenter, Qt.blue)
 time.sleep(1)
 # 为了不与主程序干扰
 app.processEvents()
 ui = MainWindow()
 ui.show()
 # 启动界面完成
 splash.finish(ui)
 sys.exit(app.exec_())

第二个程序代码,主要实现整体的GUI界面的构建(使用Qtdesiner可以极大的简化工作量,强烈推荐)

from PyQt5 import QtCore, QtGui, QtWidgets
 
class Ui_E_Dictory(object):
 def setupUi(self, E_Dictory):
  E_Dictory.setObjectName("E_Dictory")
  E_Dictory.resize(658, 474)
  icon = QtGui.QIcon()
  icon.addPixmap(QtGui.QPixmap("icon/24-monitor.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  E_Dictory.setWindowIcon(icon)
  self.centralWidget = QtWidgets.QWidget(E_Dictory)
  self.centralWidget.setObjectName("centralWidget")
  self.pushButton = QtWidgets.QPushButton(self.centralWidget)
  self.pushButton.setGeometry(QtCore.QRect(390, 400, 91, 31))
  font = QtGui.QFont()
  font.setFamily("黑体")
  font.setPointSize(14)
  self.pushButton.setFont(font)
  self.pushButton.setObjectName("pushButton")
  self.label_2 = QtWidgets.QLabel(self.centralWidget)
  self.label_2.setGeometry(QtCore.QRect(100, 400, 51, 31))
  font = QtGui.QFont()
  font.setFamily("黑体")
  font.setPointSize(14)
  self.label_2.setFont(font)
  self.label_2.setObjectName("label_2")
  self.textBrowser = QtWidgets.QTextBrowser(self.centralWidget)
  self.textBrowser.setGeometry(QtCore.QRect(100, 110, 381, 271))
  self.textBrowser.setStyleSheet("background-color: rgb(242, 255, 233);")
  self.textBrowser.setObjectName("textBrowser")
  self.lineEdit = QtWidgets.QLineEdit(self.centralWidget)
  self.lineEdit.setGeometry(QtCore.QRect(160, 400, 211, 31))
  font = QtGui.QFont()
  font.setFamily("楷体")
  font.setPointSize(10)
  self.lineEdit.setFont(font)
  self.lineEdit.setText("")
  self.lineEdit.setObjectName("lineEdit")
  self.label = QtWidgets.QLabel(self.centralWidget)
  self.label.setGeometry(QtCore.QRect(240, 60, 151, 31))
  font = QtGui.QFont()
  font.setFamily("楷体")
  font.setPointSize(14)
  font.setBold(False)
  font.setWeight(50)
  self.label.setFont(font)
  self.label.setObjectName("label")
  self.pushButton_2 = QtWidgets.QPushButton(self.centralWidget)
  self.pushButton_2.setGeometry(QtCore.QRect(510, 140, 75, 23))
  self.pushButton_2.setObjectName("pushButton_2")
  self.pushButton_3 = QtWidgets.QPushButton(self.centralWidget)
  self.pushButton_3.setGeometry(QtCore.QRect(510, 220, 75, 23))
  self.pushButton_3.setObjectName("pushButton_3")
  self.pushButton_4 = QtWidgets.QPushButton(self.centralWidget)
  self.pushButton_4.setGeometry(QtCore.QRect(510, 310, 75, 23))
  self.pushButton_4.setObjectName("pushButton_4")
  self.graphicsView = QtWidgets.QGraphicsView(self.centralWidget)
  self.graphicsView.setGeometry(QtCore.QRect(0, 0, 661, 471))
  self.graphicsView.setStyleSheet("border-image: url(:/pic/Saved Pictures/f3cb924702022fc35eb6f865d67e23a6.jpg);")
  self.graphicsView.setObjectName("graphicsView")
  self.graphicsView.raise_()
  self.pushButton.raise_()
  self.label_2.raise_()
  self.textBrowser.raise_()
  self.lineEdit.raise_()
  self.label.raise_()
  self.pushButton_2.raise_()
  self.pushButton_3.raise_()
  self.pushButton_4.raise_()
  E_Dictory.setCentralWidget(self.centralWidget)
 
  self.retranslateUi(E_Dictory)
  QtCore.QMetaObject.connectSlotsByName(E_Dictory)
 
 def retranslateUi(self, E_Dictory):
  _translate = QtCore.QCoreApplication.translate
  E_Dictory.setWindowTitle(_translate("E_Dictory", "无道词典"))
  self.pushButton.setText(_translate("E_Dictory", "查找"))
  # 快捷键回车,可以使查找按钮发生效果
  self.pushButton.setShortcut(_translate("E_Dictory", "Return"))
  self.label_2.setText(_translate("E_Dictory", "单词:"))
  # setHtml样式表可以按照自己喜好修改
  self.textBrowser.setHtml(_translate("E_Dictory", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))
  self.label.setText(_translate("E_Dictory", "查询单词"))
  self.pushButton_2.setText(_translate("E_Dictory", "历史记录"))
  self.pushButton_3.setText(_translate("E_Dictory", "单词本"))
  self.pushButton_4.setText(_translate("E_Dictory", "添加单词"))
 
import dict_rc
 
if __name__ == "__main__":
 import sys
 app = QtWidgets.QApplication(sys.argv)
 E_Dictory = QtWidgets.QMainWindow()
 ui = Ui_E_Dictory()
 ui.setupUi(E_Dictory)
 E_Dictory.show()
 sys.exit(app.exec_())

textBrowser中的内容可以以html的格式显示出来,所有其中的文件的显示可以按照自己的喜好来设计。

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

Python 相关文章推荐
Python常用列表数据结构小结
Aug 06 Python
Python实现带百分比的进度条
Jun 28 Python
人工智能最火编程语言 Python大战Java!
Nov 13 Python
Python语言描述KNN算法与Kd树
Dec 13 Python
Python2.7下安装Scrapy框架步骤教程
Dec 22 Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 Python
python networkx 包绘制复杂网络关系图的实现
Jul 10 Python
python3 Scrapy爬虫框架ip代理配置的方法
Jan 17 Python
python将logging模块封装成单独模块并实现动态切换Level方式
May 12 Python
Python xlwt模块使用代码实例
Jun 10 Python
Python面向对象多态实现原理及代码实例
Sep 16 Python
用python批量移动文件
Jan 14 Python
python如何制作英文字典
Jun 25 #Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
Jun 25 #Python
python模拟菜刀反弹shell绕过限制【推荐】
Jun 25 #Python
Pandas之DataFrame对象的列和索引之间的转化
Jun 25 #Python
Pandas之Fillna填充缺失数据的方法
Jun 25 #Python
PYQT5实现控制台显示功能的方法
Jun 25 #Python
Pandas之Dropna滤除缺失数据的实现方法
Jun 25 #Python
You might like
浅析php数据类型转换
2014/01/09 PHP
5种PHP创建数组的实例代码分享
2014/01/17 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
2017/08/15 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
基于jquery实现的省市区级联无ajax
2013/09/24 Javascript
Knockout visible绑定使用方法
2013/11/15 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
2014/07/10 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
2014/09/04 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
批量下载对路网图片并生成html的实现方法
2016/06/07 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
简单几步实现返回顶部效果
2016/12/05 Javascript
vue2的todolist入门小项目的详细解析
2017/05/11 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
vue远程加载sfc组件思路详解
2019/12/25 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
OpenLayer3自定义测量控件MeasureTool
2020/09/28 Javascript
vue 使用localstorage实现面包屑的操作
2020/11/16 Javascript
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
Python使用matplotlib实现基础绘图功能示例
2018/07/03 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
2018/12/02 Python
Python3 单行多行万能正则匹配方法
2019/01/07 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
python如何求数组连续最大和的示例代码
2020/02/04 Python
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
意向协议书范本
2014/04/23 职场文书
伦敦奥运会口号
2014/06/13 职场文书
学生会干部自我鉴定2014
2014/09/18 职场文书
房产公证书样本
2015/01/23 职场文书
react如何快速设置文件路径别名
2021/04/28 Javascript