未分類

ウィンドウにHello Worldと表示させたい

こんにちは、チズチズです。

年末に迫ってきました。部屋の片付けやっておきたいです。

百人一首練習ソフトをこの前作りました。

GUI化させる!と言っておいて終わっていました。

しかし、GUI化は結構大変だったのでまずは入門の形で段々と完成形に近づけるようにしていきます。

これからはオブジェクト指向でコードを組んでいきます。

(クラス使います

ソフトについて

今まではCUI(コマンド上)でしか練習できなかったですが、それじゃあ見づらいためウィンドウを作ろうと決心しました。

元のソフトは

百人一首ソフトの記事

詳しいことはこちらからどうぞ~

まずはここから

GUI化させるのにTkinterを使うのですが、まだボクもこれといった経験がないので今日はTkinterの入門のような感じでやっていこうと思います。

Hello World

まずは、「Hello World」と表示させてみましょう。

 

きっとこんな画面が出てきます。

これだけ見てもちんぷんかんぷんだと思うので、一つ一つ説明します。

ライブラリ

ライブラリはTkinterを使います。

ttkはTkinterに色んな機能が付いたものです。

ttkは無くても実装できますが、今回は実装します。

クラス定義

Appというクラスです。ttk.Frameはフレームウィジェットで、Frameを継承させAppを作成させます。

特殊メソッド

__init__()のことを特殊メソッドと呼びます。ここはクラスの中で最初に実行され、初期化に必要な処理を行います。

supre()でappを継承させると定義させます。

self.pack()で自身のフレームをメインウィンドウに配置させる処理をします。

ラベル配置

ttkでは ttk.Label()でラベルを定義し、label.pack()で表示させられます。

ttk.Label(text=”ここにラベルの文字”, font=”フォントの設定”)

主にこのような設定が可能です。

ここではHelloWorldと表示させるだけなのでfontは設定しません。

クラスを呼ぶ

tk.Tk()でウィンドウを定義させます。これはTkinter共通です。

geometryではウィンドウのサイズを設定できます。”縦x横”(xはエックス

titleでタイトル

クラスはApp()で呼び出せますが、クラスAppは引数(ウィンドウ)が必要です。

最後のapp.mainloop()が一番重要です。

最後にapp.mainloop()を書く!

書き忘れるとエラーが出ます。

app.mainloop()に戻ってきたらウィンドウが表示されるからです。

これについてはこの後詳しくご紹介します。

mainloopの落とし穴

tk.Tk()で定義したフレームappはそこでは表示されません。

mainloop()まで来たら表示されます。

つまり、

mainloop()に戻らなかったら表示されない

当たり前の事のようですが、ここがミソなんです。

例えば…

このようにmainloop()に戻る前にループが合った場合にはウィンドウは表示されません。

なぜなら、mainloop()に戻らないからです。

どうしたらループの前に表示できるでしょうか。

mainloop()に戻ったらそれ以降の画面の変更はできません。

ループの前にmainloop()を置いたら、ウィンドウが消されるまで次には進まず、消されたらループが始まります。

そこで…

update()

を使います。

これを使うことで、画面の変更ができます。

そうすると… 画面が表示されます!(無限ループ回ってるからウィンドウは重い

Tkinterについて思ったこと

扱いやすさや、コードの読みやすさには優れているけれど中で何が行われてるかという意味が理解しづらかったです。

forでループさせて中でラベルの処理を行っていたらウィンドウが表示されずループから抜けたら表示され… 何が起きているのか全然わかりませんでした。

エラーを繰り返すことで、自分が成長します。

わからないことがあれば、コメント下さい。

1日以内(多分数時間)で回答します。

わからないことがあれば、自分でも調べてみます。

百人一首練習ソフトGUI化計画の進捗

入力ボックスで躓いているところです。

入力ボックスについてまだまだ理解が足りていないので、調べて動くようにしていきたいです。

クラスの中に関数を作りすぎて何がどう動いてるかわかりづらくなってしまっている現状です。

コメントを有効活用させて他人にも自分にも見やすく、修正が簡単になるようなコードにしていきたいです。(まだまだ未熟者

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です