PyQt5实现简易电子词典
PyQt5是python中一个非常实用的GUI编程模块,功能十分强大。刚刚学完了Pyqt的编程,就迫不及待的写出了一个电子词典GUI程序。整个程序使用qtDesiner把整个gui界面做好,槽函数则自己写好的。电子词典实现了查询单词,查询历史记录,收藏和查看单词本的功能,另外为了是程序更加炫酷,还添加了一个启动界面。具体代码如下:
第一个为主程序代码,主要实现槽函数功能。
fromPyQt5.QtCoreimportpyqtSlot fromPyQt5.QtWidgetsimportQMainWindow fromPyQt5importQtWidgets fromUi_E_Dict_MainimportUi_E_Dictory fromPyQt5.QtWidgetsimport* fromPyQt5.QtGuiimport* fromPyQt5.QtCoreimport* importtime,re #槽函数代码,运行程序需要运行本文件 classMainWindow(QMainWindow,Ui_E_Dictory): """ Classdocumentationgoeshere. """ def__init__(self,parent=None): """ Constructor @paramparentreferencetotheparentwidget @typeQWidget """ super(MainWindow,self).__init__(parent) self.setupUi(self) #启动时休眠1秒 time.sleep(1) #按钮1查找单词,把单词显示在textBrowser的同时,插入历史记录 @pyqtSlot() defon_pushButton_clicked(self): """ Slotdocumentationgoeshere. """ #单词查询,需要先有一个'dict.txt'文件,其中有大量的英文单词和注释 #此处也可以先把'dict.txt'插入数据库,历史记录和单词本的插入和查询都可以直接操作数据库 #不过数据库需要事先安装数据库,并建立相应的表,不好打包,不太方便 word=self.lineEdit.text() f=open('dict.txt','r') forlineinf: #对字典文件的数据进行分析,拆解为适合显示的格式 l=re.split('[]+',line) ifl[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() exceptExceptionase: print(e) f.close() @pyqtSlot() defon_pushButton_2_clicked(self): """ Slotdocumentationgoeshere. """ try: #查询历史记录,把历史记录显示在textBrowser中 file=open('history.txt','rt') list=file.readlines() msg=''.join(list) self.textBrowser.setText(msg) file.close() exceptExceptionase: print(e) @pyqtSlot() defon_pushButton_3_clicked(self): """ Slotdocumentationgoeshere. """ try: #查询单词本,把单词本显示在textBrowser中 file=open('words.txt','rt') list=file.readlines() msg=''.join(list) self.textBrowser.setText(msg) file.close() exceptExceptionase: print(e) @pyqtSlot() defon_pushButton_4_clicked(self): """ Slotdocumentationgoeshere. """ word=self.lineEdit.text() try: #把所查询单词插入单词本中 file=open('words.txt','at') file.write(word) file.write('\n') file.close() exceptExceptionase: print(e) if__name__=="__main__": importsys app=QtWidgets.QApplication(sys.argv) #启动界面的实现,可以使程序更加炫酷 splash=QtWidgets.QSplashScreen(QPixmap("SavedPictures/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可以极大的简化工作量,强烈推荐)
fromPyQt5importQtCore,QtGui,QtWidgets classUi_E_Dictory(object): defsetupUi(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/SavedPictures/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) defretranslateUi(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","\n" "\n" "p,li{white-space:pre-wrap;}\n" " \n" "