プロポーザル

これは応募されたプロポーザルです。聞きたいと思うプロポーザルを各ページの下部にあるSNSのボタンで拡散しましょう。拡散された投稿をプロポーザルへの投票としてカウントし、選考時に参考にさせていただきます。

talk

PyQt/PySideの落とし穴 - 脱初心者のための実践開発(ja)

スピーカー

Toshiyuki Ishii

対象レベル:

中級

カテゴリ:

GUI Programming

説明

PyQt/PySideは、PythonのGUIツールキットとしては圧倒的なシェアを獲得しています。 そんなPyQt/PySideですが沢山の落とし穴があります、実務を通じて踏み抜いた落とし穴を回避する方法をお教えします。

目的

PyQt/PySideで"当たり前"のGUIアプリケーションを作成するには、あまりにも情報が少なく落とし穴が多いのが現状です。 必ずハマる落とし穴を回避して、当たり前の事が当たり前にできる知識が身につきます。 また、PyInstallerを用いたPyQt5のexe化、AppVeyorによる継続的インテグレーションによるExe供給ができるようになります。

概要

PyQt/PySideを使った開発で必ず落ちるであろう落とし穴を説明します。 以下のコードな何の変哲もないi18n(国際化)を設定したアプリケーションのコードです。

app = QApplication(sys.argv)

translator = QTranslator()
translator.load("translate/qt_ja.qm")
app.installTranslator(translator)

app.exec_()

上のコードをリファクタリングして、i18nのコードを関数にまとめました。

def setup_translator(app):
    translator = QTranslator()
    translator.load("translate/qt_ja.qm")
    app.installTranslator(translator)

app = QApplication(sys.argv)
setup_translator(app)
app.exec_()

なんと単純に関数化しただけでi18nが動作しなくなります! エラーも出ないため原因の特定も難しいでしょう。

この落とし穴はほんの一例です。

他にも多数の落とし穴が存在します、知らなければ意味不明なバグに延々と悩まされるでしょう。 本セッションでは、このような落とし穴にはまらないように実務を通じて得た知識を紹介します。

  • QtオブジェクトとPythonオブジェクトの寿命の違いから生じる落とし穴
  • 例外の落とし穴
  • StyleSheetの落とし穴
  • Qtのマルチスレッド/マルチプロセスの落とし穴
  • PySideとPyQtのマルチ開発
  • PyInstallerによるexe化と AppVeyourによる継続的インテグレーション
CONTACT