Виджет выбора файла 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.

Это работает.