QTreeWidgetとQTextEditとQSplitterとQStackedWidgetを使ってExifViewerを作った。
以前作ったViewerはQTreeWidgetメインでGUIを作成したが、今回はQSplitterとQStackedWidgetを使ってページが切り替わるようなUIにした。
自作ExifParser
UI以外の変更点として、前回はPILの_getexif()
を使ってExifを取得していたが、今回はExifのParserを自作した。
ExifViewer/exif_reader.py at master · takurooo/ExifViewer · GitHub
下記のように書くとExifのtagの名前と値をプリントすることができる。
from common.exif_reader import ExifReader exif_reader = ExifReader(path_to_your_jpegfile) # Parse exif tags ifds =exif_reader.get_exif() for ifd_name, ifd in ifds.items(): for tag_name, tag in ifd.items(): print(tag_name, tag.val)
またテキストにExif情報を出力することもできる。
from common.exif_reader import ExifReader exif_reader = ExifReader(path_to_your_jpegfile) # Parse exif tags exif_reader.save_log(text_file_path)
このテキスト保存機能はExifViewerのメニューバーにあるSaveボタンを押すと実行するようにしてある。
PySide2 メニューバーとアイコン
Qtではメニューアイコンがデフォルトで用意されている。
メニューバーとアイコンの設定は_make_toolbar()
で実行している。
ExifViewer/exif_viewer.py at master · takurooo/ExifViewer · GitHub
def _make_toolbar(self): save_icon = QApplication.style().standardIcon(QStyle.SP_DialogSaveButton) save_action = QAction(icon=save_icon, text='save', parent=self) save_action.triggered.connect(self._save_text) exit_icon = QApplication.style().standardIcon(QStyle.SP_DialogCloseButton) exit_action = QAction(icon=exit_icon, text='exit', parent=self) exit_action.triggered.connect(self._quit) # ツールバー作成 self.toolbar = self.addToolBar('tool bar') self.toolbar.setIconSize(QSize(35, 35)) self.toolbar.setFixedHeight(35) self.toolbar.addAction(save_action) self.toolbar.addAction(exit_action)
save_action.triggered.connect(self._save_text)
でボタンが押された時に実行される関数を設定している。
QtではSignalとSlotという考え方がある。ユーザーがボタンを押したりするとSignalが発行され、Signalに紐づいたSlot(関数)が実行される。
save_action.triggered.connect(self._save_text)
はSignalとSlotの紐付けを行なっている。