QFileDialog 为所有支持的图像格式创建一个过滤器
QFileDialog create a filter for all supported image formats
我想用所有支持的图像格式(我可以用来实例化 QIcon
的所有文件类型)打开 QFileDialog.getOpenFileName
我已经知道我可以使用 QImageReader.supportedImageFormats()
获得所有支持的图像格式。
让我感到困惑的是 QImageReader.supportedImageFormats()
returns 列表 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
您必须使用 data()
方法将 QByteArray
转换为 bytes
,然后使用 decode()
将字节转换为 string
。然后只是拼接得到需要的格式。
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
)
我想用所有支持的图像格式(我可以用来实例化 QIcon
的所有文件类型)打开 QFileDialog.getOpenFileName
我已经知道我可以使用 QImageReader.supportedImageFormats()
获得所有支持的图像格式。
让我感到困惑的是 QImageReader.supportedImageFormats()
returns 列表 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
您必须使用 data()
方法将 QByteArray
转换为 bytes
,然后使用 decode()
将字节转换为 string
。然后只是拼接得到需要的格式。
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
)