PySide で画像をフルスクリーン表示する


はじめに

最近、夏も近いのでマルチプラットフォームのアプリケーションを作るために冷やし中華 Python を始めました。GUI のライブラリとして PySide を選択し、色々と試行錯誤しています。その中から、特に興味をひいた事などを記事にして行きたいと思います。今回は、画像をフルスクリーンで表示する方法について記述します。また、本記事の内容を C++ と Qt で書きなおした記事をこちらに用意しました。合わせて参考にして下さい。

なお、Python はまだ 2.x が主流ですが、今後は 3.x へ移行する動きが活発化しそうな事と日本語対応するには 3.x の方が適しているため、Python3.3 でプログラミングしています。そのため、以下のコードは 2.x での動作を一切考慮していませんのでご注意願います。

画像を表示する

まず、PySide で画像を表示するコードを作ってみます。hoge.jpg という JPEG ファイルを表示してみます。

QPixmap オブジェクトで画像を読み込み、QLabel オブジェクトに setPixmap() でセットして show() メソッドで表示します。「ラベル」というとテキスト表示用というイメージを持ってしまいますが、QLabel はテキスト及び画像の表示用のスクリーンとして機能します。

以下のようにデスクトップ上にウインドウが表示されます。
normal

フルスクリーンで表示する

8行目の show() メソッドを、showFullScreen() に変えることでフルスクリーン表示を実現できます。以下のように画面いっぱいに表示されます。ウインドウのフレームもありません。
full

ただし、フルスクリーン状態ではクローズボタンが表示されません。キーイベントを処理してフルスクリーンを解除できるようにする必要があるでしょう。(もし、何も手当せずにフルスクリーンにしてしまった場合は、ALT + TAB で別のタスクに切り替えればタスクバーからアプリケーションを閉じることができます。)

QLabel のキーイベントを取得する

QLabel 等の GUI の部品は QWidget を継承していて、キーイベントを処理する関数 keyPressEvent を持っています。QLabel を継承した Screen というクラスを定義し、keyPressEvent をオーバーライドして ESC キーを処理できるようにしてみましょう。

※ 2013/05/19: デバッグ用のプリント文が含まれていたので削除しました。
ESC キーを押すと、最大表示/フルスクリーンが切り替わるようにしてみました。標準の表示状態に戻すには、showNormal() を呼び出している点に注意してください。

この Screen クラスを QLabel の代わりに使って ESC キーに対応します。

フルスクリーン表示されている状態で ESC キーを押すと、以下のように最大表示になります。この状態なら、クローズボタンでプログラムを終了させることができます。
max

表示位置の調整等は、QLabel のリファレンスを参照してください。

なお、完全なコードをこちらに用意しましたので、hoge.jpg を用意して試してみてください。

[関連サイト]
junf/PySideSamples · GitHub

[関連記事]

  1. Qt で画像をフルスクリーン表示する | DeVlog – 銀の翼で翔べ –
  2. PySide での show メソッドと geometry の挙動 | DeVlog – 銀の翼で翔べ –
  3. PySide で画像をスライドさせる | DeVlog – 銀の翼で翔べ –
  4. PySide で画像をフェードイン/フェードアウト | DeVlog – 銀の翼で翔べ –
  5. PySide でズームイン/ズームアウトを実現 | DeVlog – 銀の翼で翔べ –

メールアドレスが公開されることはありません。