样式如下,点击浏览可以打开如下文件夹界面,选择框可以设定在展示框内的路径是否为相对路径
实现效果如下,更改选项框后,文本输入框内的路径会在相对路径和绝对路径之间切换
# -*- coding: utf-8 -*-
import os
from PyQt5.QtCore import QDir
from PyQt5.QtWidgets import QLineEdit, QPushButton, QFileDialog, Qframe, QHBoxLayout, QApplication, QMainWindow, QCheckBox
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
widget = PathWidget(self)
self.setCentralWidget(widget)
class PathWidget(Qframe):
def __init__(self, parent=None):
super().__init__(parent)
self.createWidgets()
def createWidgets(self):
self.pathLineEdit = QLineEdit(self)
self.openPathButton = QPushButton(self)
self.openPathButton.clicked.connect(self.openPathDialog)
self.openPathButton.setText("浏览")
self.isAbsolutePath = QCheckBox("是否为相对路径")
layout = QHBoxLayout()
layout.addWidget(self.pathLineEdit)
layout.addWidget(self.openPathButton)
layout.addWidget(self.isAbsolutePath)
self.setLayout(layout)
def openPathDialog(self):
path = self.getPath(self.pathLineEdit.text())
if not path:
return
self.pathLineEdit.setText(path)
if path and not self.pathLineEdit.isVisible():
self.pathLineEdit.setVisible(True)
def getPath(self, value=""):
base = "E:"
fileDir = QDir(base)
oldPath = fileDir.absoluteFilePath(value) if not os.path.isabs(value) else value
oldPath = fileDir.cleanPath(oldPath)
startPath = oldPath if os.path.isdir(oldPath) else fileDir.path()
path = QFileDialog.getExistingDirectory(None, "选择目录", startPath, QFileDialog.ShowDirsonly | QFileDialog.DontResolveSymlinks)
if self.isAbsolutePath.checkState():
path = fileDir.absoluteFilePath(path)
else:
path = fileDir.relativeFilePath(path)
return path
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
简单说一下,我们主要用到了QT自带的 fileDir,并且通过 “QFileDialog.getExistingDirectory”该方法去获取一个默认路径为E盘的文件夹选择框



