Виджет выбора файла PyQt4

Я хочу создать диалоговое окно QT4 (используя конструктор QT), которое содержит часть, в которой нужно выбрать файл.

Теперь я знаю, что QFileDialog существует, и я могу запрограммировать то, что мне нужно. Но могу ли я просто сделать это в дизайнере QT?

Есть ли способ получить виджет «выбор файла» в дизайнере QT? Или я помню эти кнопки с выбранным файлом в качестве заголовка и маленькой стрелкой, позволяющей пользователю выбрать другой файл с помощью QFileDialog?

Так есть готовое решение, или мне самому программировать?


person Nathan    schedule 07.07.2010    source источник


Ответы (3)


Насколько мне известно, в дизайнере Qt нет диалогового окна файла. Но вы можете легко сделать это с помощью нескольких строк кода.

Предполагая, что у вас есть простая кнопка с именем pushButton, и путь должен храниться в lineEdit.

def selectFile():
    lineEdit.setText(QFileDialog.getOpenFileName())

pushButton.clicked.connect(selectFile)

[править] Просто интересно, вы случайно не используете KDE? Если да, то вы можете использовать для этого KUrlRequester. Его можно легко настроить для поддержки всего, от файлов до URL-адресов и каталогов.

person Wolph    schedule 10.07.2010
comment
эй, я должен сделать то же самое, но я получаю сообщение об ошибке как NameError: global name 'QFileDialog' is not defined - person lkkkk; 04.09.2014
comment
@Latik: конечно, нужно импортировать, from PyQt4.QtGui import QFileDialog - person Wolph; 04.09.2014
comment
KUrlRequester действительно удобен, но будет ли он работать (будет ли доступен) в Windows, если я установлю KDE для Windows, или он будет работать только в системах *NIX? - person Agi Hammerthief; 04.08.2016
comment
@AgiHammerthief Я подозреваю, что это не будет работать без ручной компиляции, поэтому я лично не рекомендую пробовать это. В Windows, вероятно, проще просто открыть диалоговое окно собственного файла. - person Wolph; 07.08.2016
comment
в PyQT5 импорт будет следующим: from PyQt5.QtWidgets import QFileDialog - person Bassem Shahin; 31.03.2018
comment
В PySide есть та же функция (getOpenFileName), но она возвращает кортеж, а не строку. Поэтому я должен использовать такой индекс, как getOpenFileName()[0] . Я не знаю, как это было бы в PyQt. - person Kim; 21.06.2018
comment
@Kim Мне тоже пришлось использовать QFileDialog.getOpenFileName()[0], и он отлично работает. - person Jacques Mathieu; 27.06.2019

QFileDialog существует в QtGui. По крайней мере, в моей версии 4.4 и, вероятно, намного раньше. Я думаю, что причина, по которой его нет в Designer, заключается в том, что он открывает свое собственное окно, а не является виджетом, который можно разместить в другом окне.

Документация от QTDesigner могла бы быть лучше и хотя бы намекнуть на ее существование.

Создайте его и запустите команду show. Он появляется прямо и по умолчанию равен /.

import QtGui
self.fileDialog = QtGui.QFileDialog(self)
self.fileDialog.show()
person Vicky T    schedule 04.08.2011

Вы можете использовать метод 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)
person Sathsara AM    schedule 12.01.2019