提要
- 本项目是一个使用Python编写的图片游览器界面,并使用到PyQt5来绘制GUI
- 这是我第一次开发GUI,对Python和PyQt的使用还不够熟练,如果有疑问我会尽量解答
- 本项目仅支持jpg格式的图片,使用的Python版本为3.6.1
- 项目的GitHub链接
项目简介
1、功能
本项目的重点在于实现三个按钮的功能:
self.ui.button_52.clicked.connect(self.select_pic)
self.ui.button_53.clicked.connect(self.next_pic)
self.ui.button_51.clicked.connect(self.previous_pic)
这些功能对应不同的方法
def select_pic(self) #选择图片
def next_pic(self) #下一张图片
def previous_pic(self) #上一张图片
2、特殊情况
在游览时会遇到五种情况:
- situation_1:游览到倒数第二张,只有四张图
- situation_2:游览到倒数第一张,只有三张图
- situation_3:游览到正数第一张,只有三张图
- situation_4:游览到正数第二张,只有四张图
- situation_normal:正常情况,五张图
这五种情况所对应的流程存在细小的差别,第一种情况的解决方案如下:
def situation_1(self):
# 这种情况只需要四张图片的路径,主图路径在主函数合成,其他三张图的路径在本函数进行合成
self.path_pic_previous2 = self.path_of_pic_folder + '/' + self.names_all_pics[self.index_main - 2]
self.path_pic_previous1 = self.path_of_pic_folder + '/' + self.names_all_pics[self.index_main - 1]
self.path_pic_next1 = self.path_of_pic_folder + '/' + self.names_all_pics[self.index_main + 1]
self.ui.label_51.setPixmap(QPixmap(self.path_pic_previous2)) # 给label传入图片
self.ui.label_56.setText(self.names_all_pics[self.index_main - 2]) # 给label传入图片的文件名
self.ui.label_52.setPixmap(QPixmap(self.path_pic_previous1))
self.ui.label_57.setText(self.names_all_pics[self.index_main - 1])
self.ui.label_53.setPixmap(QPixmap(self.path_pic_main))
self.ui.label_58.setText(self.names_all_pics[self.index_main])
self.ui.label_54.setPixmap(QPixmap(self.path_pic_next1))
self.ui.label_59.setText(self.names_all_pics[self.index_main + 1])
self.ui.label_55.setPixmap(QPixmap("")) # 给lab传入空图片
self.ui.label_60.setText("") # 给lab传入空字符
3、防止崩溃
- 防止在用户未选择图片时点击“上一张”或“下一张”按钮导致程序崩溃
- 防止用户在选择图片时中途取消导致程序崩溃
- 防止用户在游览到第一张或者最后一张图片时仍然点击“上一张”或“下一张”按钮导致崩溃
对应的解决方案如下:
- 加入一个变量来检查是否select_pic函数是否运行过:
def __init__(self):
# 用于检查是否选择了文件的变量,防止未选择文件就点击“下一张或“上一张”而崩溃
self.variable_of_chick = 0
...
def select_pic(self):
# “选择文件”函数
self.variable_of_chick = 1 # 已经选择文件,置1
...
def next_pic(self):
# “下一张”函数
if self.variable_of_chick == 1: # 检查是否选择过文件
print("next")
...
- 检查self.path_pic_main是不是为空:
def select_pic(self):
# “选择文件”函数
self.variable_of_chick = 1 # 已经选择文件,置1
self.path_pic_main = QFileDialog.getOpenFileName(self, "选择图片", ".", "Images (*.jpg)")[0] # 选择jpg图片
if self.path_pic_main: # 判断路径是否为空,防止因中途取消而崩溃
position_of_key = self.path_pic_main.rfind("/") # 从后往前寻找关键字'/'的位置
- 在头尾处禁用对应的按钮:
def situation_2(self):
...
self.ui.button_53.setDisabled(True) # 游览到最后一张时时禁用下一张按钮