我们接下来的讨论,会基於读者已经先读过我 day5 文章 的架构下去进行程序设计
如果还不清楚我程序设计的逻辑 (UI.py、controller.py、start.py 分别在干麻)
建议先阅读 day5 文章後再来阅读此文。
https://www.wongwonggoods.com/python/pyqt5-5/
https://github.com/howarder3/ironman2021_PyQt5_photoshop/tree/main/day10_open_file
我们可以使用 QFileDialog 来开启每个作业系统的档案功能,
这部分我们会在 controller.py 当中进行实作。
这次我们设计两个按钮,与对应的显示档案路径的地方,
这次我们使用 QTextEdit 来帮助我们显示路径
(相对 Qlabel 的好处是,如果文字太长的话,会自动换行)
一样记得改一下变数,不然等等容易搞不清楚谁是谁。
而今天的 UI 设计部份就比较简单,
因为等等的档案处理我们会花比较多一点时间来实作。
一样的编译指令,我们加上 -x (也可不加),
我们就可以先检视看看转换後的视窗是不是跟我们想像的一样。
pyuic5 -x day10.ui -o UI.py
一样,这程序只有介面 (视觉上的呈现),没有任何互动功能
python UI.py
接下来我们要开始去改变里面的内容。
接下来我们想藉由按键来触发开启 档案/资料夹 的功能,
我们呼叫 QFileDialog 来协助完成这个功能,
在这个功能的底层,已经有针对不同作业系统实作对应开启档案的功能。
请不要只看表面误会以为 Windows, Mac, Linux 开启档案都是同一种实作方式
实际上这部份依据不同作业系统的实作是在 Qt 底层已经做掉了,我们才能如此方便。
这次我们的变数有
两个按钮
两个显示路径用方框 (QTextEdit)
还记得我们在 day5 中的模板吗?这边我们直接复制过来使用并修改。
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import QFileDialog
import cv2
from UI import Ui_MainWindow
class MainWindow_controller(QtWidgets.QMainWindow):
def __init__(self):
super().__init__() # in python3, super(Class, self).xxx = super().xxx
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.setup_control()
def setup_control(self):
self.ui.file_button.clicked.connect(self.open_file)
self.ui.folder_button.clicked.connect(self.open_folder)
def open_file(self):
filename, filetype = QFileDialog.getOpenFileName(self,
"Open file",
"./") # start path
print(filename, filetype)
self.ui.show_file_path.setText(filename)
def open_folder(self):
folder_path = QFileDialog.getExistingDirectory(self,
"Open folder",
"./") # start path
print(folder_path)
self.ui.show_folder_path.setText(folder_path)
我们可以直接使用 QFileDialog.getOpenFileName 这个已经设定好的函式,
直接帮助我们完成开启档案的功能,
而不同作业系统的问题,在这个功能的底层已经帮我们处理掉了,我们可以直接使用。
"Open file" 是开始视窗後上方标题列的名称,
"./" 代表从哪里开启这个目录,「"./"」就是当前目录
这里会回传两个参数(tuple) filename, filetype,我们要使用的是第一个路径,
而第二个是档案的副档名 (与我们有没有过滤档案副档名有关,因为不是我主要使用的功能,这边先不细部讨论)
取得开启後的「档案路径」,并显示在画面上
我们可以直接使用 QFileDialog.getExistingDirectory 这个已经设定好的函式完成开启资料夹的功能,
一样不同作业系统的问题,在这个功能的底层已经帮我们处理掉了,我们可以直接使用。
"Open folder" 是开始视窗後上方标题列的名称,
"./" 代表从哪里开启这个目录,「"./"」就是当前目录
取得开启後的「资料夹路径」,并显示在画面上
照我们 day5 的程序架构,我们执行
python start.py
★ 本文也同步发於我的个人网站(会有内容目录与显示各个小节,阅读起来更流畅):【PyQt5】Day 10 - 以 QFileDialog 读取系统的档案、资料夹
<<: [day13] 设定gunicorn Logging
>>: [Day25] 忘记压缩档密码怎麽办? 用Python多重处理快速破解压缩档密码!
HTML(Hyper Text Markup Language): →就是有一堆Elements(元...
上次提到要 Arduino还是Raspberry pi 而看下面可以知道Cortex-A, Cort...
启航罗~~~ 此篇开始,会介绍AWS上使用完全托管的Kubernetes服务之EKS系列。一般自己托...
我接触电脑从8086和DOS开始。 在那个时代,我们已可以输入档案名称来载入并执行感兴趣的程序。如...
介绍过 CC: Tweaked Turtle 的特性和指令後 今天来直接看看,怎麽让 Mining ...