Виджет выбора файла PyQt4
Я хочу создать диалог QT4 (используя конструктор QT), содержащий часть, в которой должен быть выбран файл.
Теперь я знаю, что существует QFileDialog, и я могу программировать что-то, что делает то, что я хочу.
Но могу ли я просто сделать это в дизайнере QT?
Есть ли способ получить виджет "выбрать файл" в дизайне QT?
Или, я помню эти кнопки, имея выбранный файл как заголовок и небольшую стрелку, позволяющую пользователю выбирать другой файл с помощью QFileDialog?
Итак, есть готовое решение, или я должен сам его программировать?
Ответы
Ответ 1
В Qt-дизайнере, насколько мне известно, нет диалогового окна с файлом. Но вы можете легко сделать это несколькими строками кода.
Предполагая, что у вас есть простая кнопка с именем pushButton, и путь должен храниться в lineEdit.
def selectFile():
lineEdit.setText(QFileDialog.getOpenFileName())
pushButton.clicked.connect(selectFile)
[править] Просто интересно, используете ли вы KDE случайно? Если да, то для этого вы можете использовать KUrlRequester. Его можно легко настроить для поддержки чего угодно: от файлов до URL-адресов в каталогах.
Ответ 2
QFileDialog
существует в QtGui
. По крайней мере, в моей версии 4.4 и, вероятно, намного раньше. Я думаю, что причина не в дизайнере заключается в том, что он открывает собственное окно, а не виджет для размещения в другом окне.
Документация из QTDesigner может быть лучше и, по крайней мере, намекать на ее существование.
Создайте его и запустите команду show
. Он идет правильно и по умолчанию используется /
.
import QtGui
self.fileDialog = QtGui.QFileDialog(self)
self.fileDialog.show()
Ответ 3
Вы можете использовать метод getOpenFileName() в классе QFileDialog.
QFileDialog.getOpenFileName() вернет путь к файлу и выбранный тип файла
Я получил это: ('C: /Users/Sathsara/Desktop/UI/Test/test.py', 'Все файлы (*)')
Чтобы получить только путь к файлу, используйте QFileDialog.getOpenFileName() [0]
Образец кода:
def selectFile():
print(QFileDialog.getOpenFileName()[0])
dlg.locationBtn.clicked.connect(selectFile)
Ответ 4
Я не могу комментировать, поэтому я отдельно пишу это как ответ.
@wolph дал правильный ответ, также нам не нужно использовать lineEdit
в PyQt5:
from PyQt5.QtWidgets import QFileDialog
file_path = QFileDialog.getOpenFileName() # event should be connected to a button
print(file_path) # prints the absolute path.
Это работает.