给虫虫做的第一个 Python 小工具
# -*- coding: utf-8 -*-
#########################################################################################################################
# 英语字典
#_______________________________________________________________________________________________________________________
# 版本: V01
# 变更记录: 初始创建
# 变更人: 刘晶
# 变更时间: 20240408
#_______________________________________________________________________________________________________________________
#
#
#########################################################################################################################
from PyQt5.QtWidgets import (QApplication, QMainWindow, QLabel, QLineEdit, QFileDialog, QTextBrowser, \
QPushButton, QGroupBox, QGridLayout)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon, QPixmap, QGuiApplication
from openpyxl import load_workbook
import sys
import time
# “def” 是用来定义函数的,下面定义了一个查字典函数,你要把界面上的中文输入框和英文输出框,
# 还有表格的数据给这个函数,它在表格里查到了中文的英文意思,就会把英文显示在界面上。
def HanShu_ChaZiDian(ZhongWen_ShuRuKuang, YingWen_ShuRuKuang, ShuJu):
YaoChaDe_ZhongWen = ZhongWen_ShuRuKuang.text() # 取出输入的中文
BiaoGe_ZuiDaHangShu = ShuJu.max_row # 获取表格的最大行数
ChaZhaoJieGuo_WenBen = '' # 查找结果的文本
for i in range(1, BiaoGe_ZuiDaHangShu):
BiaoGeDe_YingWen = ShuJu['A' + str(i)].value
BiaoGeDe_ZhongWen = ShuJu['B' + str(i)].value
ChaZhaoJieGuo = BiaoGeDe_ZhongWen.find(YaoChaDe_ZhongWen) # 在表格的中文中查找是否有输入查询的中文
if ChaZhaoJieGuo != -1: # 如果没找到 ChaZhaoJieGuo 是等于 -1 的
if ChaZhaoJieGuo_WenBen:
ChaZhaoJieGuo_WenBen = ChaZhaoJieGuo_WenBen + ' \n' + '[ ' + BiaoGeDe_YingWen + ' ] ' + BiaoGeDe_ZhongWen # 加号可以连接字符串
else:
ChaZhaoJieGuo_WenBen = '[ ' + BiaoGeDe_YingWen + ' ] ' + BiaoGeDe_ZhongWen
if ChaZhaoJieGuo_WenBen:
YingWen_ShuRuKuang.setText(ChaZhaoJieGuo_WenBen)
else:
YingWen_ShuRuKuang.setText('表格中没有查到')
QApplication.processEvents() # 这条语句可以刷新界面的显示,如果没有这条语句,上面这条语句运行之后,界面不会显示更新的内容。
time.sleep(1.5) # 等待 1.5 秒,在运行下面的语句。
YingWen_ShuRuKuang.clear() # 清空输入框中的内容
QApplication.processEvents() # 这条语句可以刷新界面的显示,如果没有这条语句,上面这条语句运行之后,界面不会显示更新的内容。
# 程序从这里开始运行————————————————————————————————————————————————————————————————————————————————————————————————————
# 如果有两个屏幕,工具界面从一个屏幕拉到另一个屏幕会变形,有了下面三条语句就不会变形。
QGuiApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
QGuiApplication.setAttribute(Qt.AA_UseHighDpiPixmaps)
QGuiApplication.setHighDpiScaleFactorRoundingPolicy(Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
App = QApplication(sys.argv) # 创建一个应用程序
# 弹窗选择 《英语单词和中文意思.xlsx》 表格
BiaoGe_LuJing = QFileDialog.getOpenFileName(None, "请选择 《英语单词和中文意思.xlsx》 表格", None, "(*.*)")
BiaoGe_LuJing = BiaoGe_LuJing[0]
if BiaoGe_LuJing: # 如果选择了表格,才生成界面。
BiaoGe = load_workbook(filename = BiaoGe_LuJing, data_only = True) # 读取表格,并且只读取数据。
SheetName = '单词'
ShuJu = BiaoGe[SheetName] # 读取 “单词” 这个 Sheet 的数据
JieMian = QMainWindow() # 新建一个窗口
JieMian.setWindowTitle('虫虫的英语字典') # 窗口的标题设置成 “虫虫的英语字典”
Icon = QIcon() # 新建一个图标
Icon.addPixmap(QPixmap('./Picture.ico'), QIcon.Normal, QIcon.Off) # 图标的图片用 “./Config/Picture.ico”
JieMian.setWindowIcon(Icon) # 将图标放置到窗口界面上
JieMian.setFixedSize(450, 300) # 调整窗口的大小为 宽:450像素点 高:300像素点
ZhongWen_BiaoTi = QLabel('输入中文:') # 新建标签 “输入中文”
ZhongWen_ShuRuKuang = QLineEdit() # 新建一个中文输入框,这个框只可以显示一行的内容。
YingWen_BiaoTi = QLabel('输出英文:') # 新建标签 “输出英文”
YingWen_ShuRuKuang = QTextBrowser() # 新建一个英文输出框,这个框可以显示多行的内容。
ChaZhao = QPushButton('查找单词') # 新建一个按钮
# 按 “查找单词” 按钮会调用 “HanShu_ChaZiDian” 函数
ChaZhao.clicked.connect(lambda:HanShu_ChaZiDian(ZhongWen_ShuRuKuang, YingWen_ShuRuKuang, ShuJu))
WangGe = QGridLayout() # 新建一个网格
WangGe.setSpacing(10) # 设置网格的间隔为 10 个像素
# 网格我把它分成 5 行 6 列,把按钮,输入框这些东西挂在网格上。
# WangGe.addWidget(ZhongWen_BiaoTi, 0, 0, 1, 1)
# 第一个数字 “0” 代表从网格的第一行开始, 第二个数字 “0” 代表从网格的第一列开始,
# 第三个数字 “1” 代表 “ZhongWen_BiaoTi” 这个标签占用网格一行的高度,
# 第四个数字 “1” 代表 “ZhongWen_BiaoTi” 这个标签占用网格一列的宽度。
WangGe.addWidget(ZhongWen_BiaoTi, 0, 0, 1, 1)
WangGe.addWidget(ZhongWen_ShuRuKuang, 0, 1, 1, 4)
WangGe.addWidget(YingWen_BiaoTi, 1, 0, 1, 1)
WangGe.addWidget(YingWen_ShuRuKuang, 1, 1, 3, 4)
WangGe.addWidget(ChaZhao, 4, 1, 1, 3)
MianBan = QGroupBox() # 新建一个面板
MianBan.setLayout(WangGe) # 把网格挂在面板上
JieMian.setCentralWidget(MianBan) # 把面板挂在窗口上
JieMian.show() # 显示界面窗口
sys.exit(App.exec_()) # 运行应用程序事件循环,并在事件循环结束后退出程序。 就是让界面一直显示,直到你关闭界面。