PyQt5是python中一个非常实用的GUI编程模块,功能十分强大。刚刚学完了Pyqt的编程,就迫不及待的写出了一个电子词典GUI程序。整个程序使用qt Desiner把整个gui界面做好,槽函数则自己写好的。电子词典实现了查询单词,查询历史记录,收藏和查看单词本的功能,另外为了是程序更加炫酷,还添加了一个启动界面。具体代码如下:
第一个为主程序代码,主要实现槽函数功能。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
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可以极大的简化工作量,强烈推荐)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
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的格式显示出来,所有其中的文件的显示可以按照自己的喜好来设计。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/weixin_42499361/article/details/81164423