いいかげん日記

思いついたことをただひたすら書き殴るいいかげんな日記です。

【Python × PyQt5 × Google API】 google spreadsheet viewerを作る。(その1:はじめに)

【本シリーズについて】

今回のシリーズは、PyQtと出会った私が一念発起し、「っぽい」アプリケーションを作り上げるまでの奮闘を描いたまわりくどい週末プログラミング日記です。
通常は、プログラミングする上で遭遇する問題やそれに対する解決策を端的に表現し、最終的な成果物まで一直線に記述するところですが、本シリーズでは、ド素人が辿った紆余曲折を描くことで「記事にオリジナリティを出しつつ、だらだらと話を小出しにすることで投稿数とPV数を稼ごう」という下心が混じっております。

プログラムのバージョン(というか、別名保存したファイルの数)に従って話を進めるなら全41話になるのですが、面倒くさいのでそこまでの大作にはしないつもりです。

【このお話の結末】

この奮闘は、この記事を書き始める前に終結しております。したがって、現時点で最終回まで書くことも可能ですが、なにぶん飽きっぽい性格なので、最後まで書き切ることを保証できません。(たくさんの方に読んでいただけそうなら頑張れる気はするのですが... 笑)
ということで、まずはじめに、完成したアプリケーション「google spreadsheet viewer」の概要だけお示しします。

f:id:theta_proto:20180826193652j:plain

…もはや、「webブラウザです。」と割り切ってしまった方が良いような気はしますが、一応、今回のテーマは「googleスプレッドシートとの連携」がメインなので「google spreadsheet viewer」ということで...


さて、このアプリケーションは、次の手順で動作します。

  1. 左上の「シート名」コンボボックスから読み込みたいスプレッドシートを選択
  2. 「読込」ボタン押下で、下のツリービューにスプレッドシートの内容を表示
  3. ツリービューのアイテムを選択(or クリック)すると、選択したアイテムがもつURLのページを右ペインに表示
  4. 表示中のページのURLを右ペイン上のテキストボックスに表示
  5. 右ペイン上の「更新」ボタン押下でページをリロード

...書き出すと実にあっけない。
この機能を実装するために私は何時間費やしたのだろうか。。。

ちなみに、読み込むスプレッドシートのフォーマットがこれ↓

f:id:theta_proto:20180826195203j:plain

ハイパーリンクが混じったシートになっています。
このハイパーリンクがあることによって、データ量の割に読み込み時間が非常に長いクソなアプリケーションに仕上がることになるのですが、その話はまた今度。

【このお話で克服する(ごまかす?)主な問題】

もし仮に、このお話を私が最後までマジメに書き切り、みなさまが最後まで律儀にお読みいただければ、きっと下記の問題に出会うはずです。
初歩的な問題も多いですが、一部、日本語サイトでの解説が少ない問題もあるので、もしかしたら誰かのお役に立てるかもしれません。(どなたか、きちっとした解説を書いていただけると助かります。。)


Python

PyQt

  • PyQt4とPyQt5の違い
  • ショートカットキーの割当て
  • コピー&ペースト機能の実装
  • ツリービューの実装(親要素へのネストの仕方など)
  • テキストボックスの編集を不可にする
  • シグナル,スロットの実装
  • 引数が必要なメソッドをconnect()で繋ぐ方法 ①
  • 引数が必要なメソッドをconnect()で繋ぐ方法 ②
  • ウィジェットのレイアウト
  • QSplitter
  • ステータスバーの表示
  • サイズポリシーの変更

Google API

※ 本シリーズでは、上記の問題を一応ごまかせていますが、プログラムの定石から外れたものや、推奨されないものも多いと思いますので参考程度に。もし、ミス等があればご指摘いただけると助かります。

※ あと、途中のコードも最終版もムダなコードが散見されますが、そこはご愛嬌ということで 笑


【今回の作品で感じたこと】

全体を一気に作ろうとしないで、機能を1つ作っては確認、作っては確認、を繰り返していくことが大事。

この程度であれば、設計しなくても一歩一歩の積み重ねで案外なんとかなる。

ユーザビリティ向上のための機能実装がこんなにも面倒くさいものだとは。。。

 

-------------------------------

コメント:さて、どんなテイストで記事を書こうか。…ってか、このモチベーションがもつか非常に不安だ。。(この記事が本シリーズの最終回だったりして 笑)