Не работает QFileDialog
Не могу сделать чтобы при нажатии кнопки "Select" открывался проводник для выбора файла.
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(331, 167)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.selectbtn = QtWidgets.QPushButton(self.centralwidget)
self.selectbtn.setGeometry(QtCore.QRect(90, 10, 151, 51))
self.selectbtn.setObjectName("selectbtn")
self.playbtn = QtWidgets.QPushButton(self.centralwidget)
self.playbtn.setGeometry(QtCore.QRect(130, 60, 75, 23))
self.playbtn.setObjectName("playbtn")
MainWindow.setCentralWidget(self.centralwidget)
self.btnfunc()
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.selectbtn.setText(_translate("MainWindow", "Select"))
self.playbtn.setText(_translate("MainWindow", "Play"))
def btnfunc(self):
self.selectbtn.clicked.connect(self.selectfunc)
def selectfunc(self):
res = QFileDialog(self, 'Open File', f'D:\DOWNLOADSBROWSER', 'MP3 file (*.mp3)')
print(res)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
НИКОГДА НЕ ИЗМЕНЯЙТЕ код, сгенерированный Qt Designer, НИКОГДА.
Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.
QFileDialog::getOpenFileName() - удобная статическая функция, которая возвращает существующий файл, выбранный пользователем. Если пользователь нажимает Cancel, возвращается пустая строка.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(331, 167)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.selectbtn = QtWidgets.QPushButton(self.centralwidget)
self.selectbtn.setGeometry(QtCore.QRect(90, 10, 151, 51))
self.selectbtn.setObjectName("selectbtn")
self.playbtn = QtWidgets.QPushButton(self.centralwidget)
self.playbtn.setGeometry(QtCore.QRect(130, 60, 75, 23))
self.playbtn.setObjectName("playbtn")
MainWindow.setCentralWidget(self.centralwidget)
# self.btnfunc()
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.selectbtn.setText(_translate("MainWindow", "Select"))
self.playbtn.setText(_translate("MainWindow", "Play"))
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.selectbtn.clicked.connect(self.selectfunc)
def selectfunc(self):
# ---------> v <---------------------> vvvvvvvvvvvvvvv <---------------------
res, _ = QtWidgets.QFileDialog.getOpenFileName(
self,
'Open File',
f'D:\DOWNLOADSBROWSER',
'MP3 file (*.mp3)'
)
print(res)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow() # +++
w.show() # +++
sys.exit(app.exec_())
