QFileDialog создать фильтр для всех поддерживаемых форматов изображений - PullRequest
0 голосов
/ 18 февраля 2019

Я хотел бы открыть QFileDialog.getOpenFileName со всеми поддерживаемыми форматами изображений (все типы файлов, которые я мог бы использовать для создания QIcon)

Я уже знаю, что могу получить все поддерживаемые форматы изображений сQImageReader.supportedImageFormats().

Что меня смущает, так это то, что QImageReader.supportedImageFormats() возвращает список QBytesArray, и я не уверен, как просто преобразовать это в список str.

class ProfileImageButton(qt.QToolButton):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setIconSize(qt.QSize(100, 100))
        self.clicked.connect(self._onClick)
        self._icon_path = None

    def _onClick(self, checked):
        supportedFormats = qt.QImageReader.supportedImageFormats()
        print([str(fo) for fo in supportedFormats])
        # this prints: ["b'bmp'", "b'cur'", "b'gif'", "b'icns'", "b'ico'", "b'jpeg'",

        fname, filter_ = qt.QFileDialog.getOpenFileName(
            parent=self,
            caption="Load a profile picture",)
            # filter=???????????)   #     <--- TODO

        if fname:
            self.setIcon(qt.QIcon(fname))
            self.setIconSize(qt.QSize(100, 100))
            self._icon_path = fname

    def iconPath(self):
        return self._icon_path

1 Ответ

0 голосов
/ 18 февраля 2019

Вы должны преобразовать QByteArray в bytes, используя метод data(), затем байты в string, используя decode().Затем он только объединяется для получения требуемого формата.

text_filter = "Images ({})".format(" ".join(["*.{}".format(fo.data().decode()) for fo in supportedFormats]))

fname, _ = qt.QFileDialog.getOpenFileName(
    parent=self,
    caption="Load a profile picture", 
    filter=text_filter
)
...