PySide6 文件选择窗口
PySide6 调用窗口文件
- 用Qt Designer绘制窗口界面,生成窗口UI文件,转成python文件。完整代码如下:
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
QMetaObject, QObject, QPoint, QRect,
QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QFont, QFontDatabase, QGradient, QIcon,
QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QFrame, QHBoxLayout, QLabel,
QMainWindow, QMenuBar, QPushButton, QSizePolicy,
QSpacerItem, QStatusBar, QWidget)
class Ui_testFileDialog(object):
def setupUi(self, testFileDialog):
if not testFileDialog.objectName():
testFileDialog.setObjectName(u"testFileDialog")
testFileDialog.setWindowModality(Qt.WindowModal)
testFileDialog.resize(793, 204)
font = QFont()
font.setPointSize(10)
testFileDialog.setFont(font)
testFileDialog.setStyleSheet(u"groupbox {\n"
"border: 0px;\n"
"}")
self.centralwidget = QWidget(testFileDialog)
self.centralwidget.setObjectName(u"centralwidget")
self.pushButton_ClosedWindow = QPushButton(self.centralwidget)
self.pushButton_ClosedWindow.setObjectName(u"pushButton_ClosedWindow")
self.pushButton_ClosedWindow.setGeometry(QRect(660, 130, 75, 24))
self.pushButton_ClosedWindow.setMaximumSize(QSize(80, 16777215))
self.pushButton_ClosedWindow.setFont(font)
self.layoutWidget = QWidget(self.centralwidget)
self.layoutWidget.setObjectName(u"layoutWidget")
self.layoutWidget.setGeometry(QRect(61, 41, 679, 29))
self.horizontalLayout_FilePath = QHBoxLayout(self.layoutWidget)
self.horizontalLayout_FilePath.setObjectName(u"horizontalLayout_FilePath")
self.horizontalLayout_FilePath.setContentsMargins(0, 0, 0, 0)
self.label_FileName = QLabel(self.layoutWidget)
self.label_FileName.setObjectName(u"label_FileName")
self.label_FileName.setMaximumSize(QSize(80, 16777215))
self.label_FileName.setFont(font)
self.label_FileName.setFrameShape(QFrame.Panel)
self.label_FileName.setFrameShadow(QFrame.Raised)
self.label_FileName.setTextFormat(Qt.AutoText)
self.label_FileName.setAlignment(Qt.AlignCenter)
self.label_FileName.setWordWrap(True)
self.label_FileName.setMargin(1)
self.horizontalLayout_FilePath.addWidget(self.label_FileName)
self.label_FilePath = QLabel(self.layoutWidget)
self.label_FilePath.setObjectName(u"label_FilePath")
self.label_FilePath.setFont(font)
self.label_FilePath.setFrameShape(QFrame.Box)
self.label_FilePath.setFrameShadow(QFrame.Sunken)
self.horizontalLayout_FilePath.addWidget(self.label_FilePath)
self.horizontalSpacer = QSpacerItem(20, 20, QSizePolicy.Fixed, QSizePolicy.Minimum)
self.horizontalLayout_FilePath.addItem(self.horizontalSpacer)
self.pushButton_FilePath = QPushButton(self.layoutWidget)
self.pushButton_FilePath.setObjectName(u"pushButton_FilePath")
self.pushButton_FilePath.setMaximumSize(QSize(80, 16777215))
self.pushButton_FilePath.setFont(font)
self.horizontalLayout_FilePath.addWidget(self.pushButton_FilePath)
testFileDialog.setCentralWidget(self.centralwidget)
self.menubar = QMenuBar(testFileDialog)
self.menubar.setObjectName(u"menubar")
self.menubar.setGeometry(QRect(0, 0, 793, 22))
testFileDialog.setMenuBar(self.menubar)
self.statusbar = QStatusBar(testFileDialog)
self.statusbar.setObjectName(u"statusbar")
testFileDialog.setStatusBar(self.statusbar)
self.retranslateUi(testFileDialog)
QMetaObject.connectSlotsByName(testFileDialog)
# setupUi
def retranslateUi(self, testFileDialog):
testFileDialog.setWindowTitle(QCoreApplication.translate("testFileDialog", u"testFileDialog", None))
self.pushButton_ClosedWindow.setText(QCoreApplication.translate("testFileDialog", u"close", None))
self.label_FileName.setText(QCoreApplication.translate("testFileDialog", u"File Name", None))
self.label_FilePath.setText(QCoreApplication.translate("testFileDialog", u"input file", None))
self.pushButton_FilePath.setText(QCoreApplication.translate("testFileDialog", u"Select File", None))
# retranslateUi
- 调用窗口文件:
通过如下代码可以调用窗口文件:
from PySide6.QtWidgets import QMainWindow, QApplication
from testFileDialog_ui import Ui_testFileDialog
import sys
class pySideFileDialog(QMainWindow, Ui_testFileDialog):
def __init__(self, parent = None) -> None:
super(pySideFileDialog,self).__init__(parent)
self.setupUi(self)
if __name__=='__main__':
app = QApplication(sys.argv)
window = pySideFileDialog()
window.show()
sys.exit(app.exec_())
PySide6 添加按钮功能
如下图,给按钮’Select File’ 和 ‘close’ 添加功能。
在调用窗口代码中添加如下代码:
def actionUI(self):
self.pushButton_FilePath.clicked.connect(self.selectFile)
self.pushButton_ClosedWindow.clicked.connect(self.closeWindow)
def selectFile(self):
self.selectFilePath = QFileDialog.getOpenFileName(self, "Select File","","python (*.py);;all file (*.*)")[0]
if self.selectFilePath:
# get file name with extenseion, only file name, file extension
self.fileBaseName, self.fileName, self.FileExt = os.path.basename(self.selectFilePath)
self.fileName, self.FileExt = os.path.splitext(self.fileBaseName)
self.label_FilePath.setText(self.fileBaseName)
def closeWindow(self):
QCoreApplication.quit()
如果按钮’Select File’被按下, 函数 selectFile将被调用。通过PySide的文件窗口函数QFileDialog.getOpenFileName,可以实现文件的选择。被选文件名会显示在input file区域。
如果按钮’close’被按下,函数closeWindow将被调用。 主窗口将被关闭。
以下是完整的代码:
from PySide6.QtWidgets import QMainWindow, QApplication, QFileDialog
from PySide6.QtCore import QCoreApplication
from testFileDialog_ui import Ui_testFileDialog
import sys
import os
class pySideFileDialog(QMainWindow, Ui_testFileDialog):
def __init__(self, parent = None) -> None:
super(pySideFileDialog,self).__init__(parent)
self.setupUi(self)
self.actionUI()
def actionUI(self):
self.pushButton_FilePath.clicked.connect(self.selectFile)
self.pushButton_ClosedWindow.clicked.connect(self.closeWindow)
def selectFile(self):
self.selectFilePath = QFileDialog.getOpenFileName(self, "Select File","","python (*.py);;all file (*.*)")[0]
if self.selectFilePath:
# get file name with extenseion, only file name, file extension
self.fileBaseName, self.fileName, self.FileExt = os.path.basename(self.selectFilePath)
self.fileName, self.FileExt = os.path.splitext(self.fileBaseName)
self.label_FilePath.setText(self.fileBaseName)
def closeWindow(self):
QCoreApplication.quit()
if __name__=='__main__':
app = QApplication(sys.argv)
window = pySideFileDialog()
window.show()
sys.exit(app.exec_())