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连接mysql并提交mysql事务示例
Mar 05 Python
python安装requests库的实例代码
Jun 25 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
Jul 22 Python
三个python爬虫项目实例代码
Dec 28 Python
python使用Geany编辑器配置方法
Feb 21 Python
Python使用sqlite3模块内置数据库
May 07 Python
matplotlib.pyplot.matshow 矩阵可视化实例
Jun 16 Python
python中rb含义理解
Jun 18 Python
使用OpenCV去除面积较小的连通域
Jul 05 Python
Pycharm Git 设置方法
Sep 15 Python
python爬虫构建代理ip池抓取数据库的示例代码
Sep 22 Python
python生成随机数、随机字符、随机字符串
Apr 06 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学习笔记之二
2011/01/17 PHP
php自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
PHP实现留言板功能的详细代码
2017/03/25 PHP
解决laravel查询构造器中的别名问题
2019/10/17 PHP
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
js控制鼠标事件移动及移出效果显示
2014/10/19 Javascript
node.js中的path.join方法使用说明
2014/12/08 Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
2016/01/25 Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
2016/05/18 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
详解datagrid使用方法(重要)
2020/11/06 Javascript
Python正则获取、过滤或者替换HTML标签的方法
2016/01/28 Python
使用pytorch进行图像的顺序读取方法
2018/07/27 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
Python中new方法的详解
2019/01/15 Python
Python简单实现区域生长方式
2020/01/16 Python
通过cmd进入python的步骤
2020/06/16 Python
python判断一个变量是否已经设置的方法
2020/08/13 Python
input file上传文件样式支持html5的浏览器解决方案
2012/11/14 HTML / CSS
公司活动策划方案
2014/01/13 职场文书
校园安全检查制度
2014/02/03 职场文书
应聘编辑自荐信范文
2014/03/12 职场文书
活动总结格式范文
2014/04/26 职场文书
应届大专生求职信
2014/06/26 职场文书
月度优秀员工获奖感言
2014/08/16 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
2014年安全员工作总结
2014/11/13 职场文书
自愿离婚协议书2015
2015/01/26 职场文书