Python tkinterでCSVを読み込んでチャットアプリ風に読み込むアプリを作ってみた
- 2021.07.12
- 作成物
弊社でメインで使っているチャットアプリ(自社製品)のサービス終了に伴い、ログを表示し検索できるアプリが欲しいなと思い、作ってみました。
Teamsとかが流行る以前の2015年あたりから使われていたんじゃないでしょうか。
結構貴重なログも残っているので、弊社内でそういう需要があるんじゃないかなと思いながら…。
要件
・ログ自体はチャットルームごとにCSVファイルで出力されるので複数のCSVファイルを読み込める(3年目の私で88ルーム=88ファイルある)
・ローカル環境で動く(ユーザによって参加ルームが異なるのでAWSなどでホスティングしなおすのは費用的にも不可)
・すぐに作れて誰でも使える(提供が遅くなっても需要はなさそうですし、特殊なインストールが必要なのも面倒なので不可)
・GUIで動かせる(想定ターゲットは非エンジニア)
・検索機能とログの表示機能を有し、デザインは弊社製品と似たものとする。
使用技術
以上の要件を満たすには、Pythonのtkinterを使うことにしました。
その上で、pyinstaller で実行ファイル化してpythonがなくても実行できるようにしました。
C#も考えたのですが、Macにも対応させたいと思いました(とCSVの処理の速さが不明なため.)
作成物
こんな感じです。
このようにCSVの各行を読み込んで、チャットのように表示できます。
ちゃんと検索もできますし、意外と良い出来です(笑)
工夫したところ
- マウスホイールでチャットを辿れるようにした
- 読み込み中の場合は、画面を表示させないことでユーザーに読み込み中であることを伝わるようにした
- tkinterのローディングアイコンは作るのが大変と判断した
- さくさく動くように、データの読み込みを50件毎もしくは、高さ20000文字以内とした。
- tkinterの動作要件なのか、一気にCSVを読み込んで表示することができなかったという背景もある。
- 配色
- デザインを担当している方に教えてもらった。
- 当初はハイコントラストで目が疲れる感じであった。
- デザインを担当している方に教えてもらった。
- アプリのロゴ
- tkinterのロゴだとつまらないので、自分でロゴを作って埋め込みました。
つまったところ
- tkinterでスクロールを縦二つで行えるようにすること。
- CSV読み込み後のスクロールバーの高さの計算
- CSVがなぜか全て表示されない件(高さが一定を超えると表示されないようだ)
- CSVデータの改行コード・インテントが上手く表示されない件
- CSVデータでは改行コードが//nのように、2つスラッシュがついていることが原因だった。
- 表示の遅さ
- スレッドを使ってみたところ、まぁ使えるかな?という風になった
作成日数
構想・設計…3日
作成…10日
レビュー・改造…7日
コードは1000行近くになってしまった。
the密結合になってきており、誰かに助けてもらうことも、改造も難しくなってきているので、
デザインパターンをお勉強して適用しようと思います。
参考文献
Modern Tkinter for Busy Python Developers
tkinterのコミッターが書いている本。英語の本ながらこれが一番参考になった上に、分かりやすかった。
日本語の本は、初心者向けが多くあまり参考にならなかった。
…とはいえpythonで作るのはちょっと面倒ですね。