PythonTkinterプロジェクト[ステップバイステップの説明]

公開: 2020-09-14

PythonでGUIについて学ぶことは、非常に難しい場合があります。 私たちはあなたの背中を持っているので心配しないでください! この記事では、Python GUIプロジェクトで効率的に作業できるように、Tkinterチュートリアルを共有しました。 このチュートリアルを完了すると、PythonTkinterプロジェクトを作成するための構成要素に精通することになります。 Pythonの専門知識をさらに深めたい場合は、データサイエンスプログラムをご覧ください。

また、すべてのステップのコードを共有しました。 ただし、その仕組みを理解している場合にのみ、コピーして貼り付けることをお勧めします。 そうでなければ、それはあまり役に立たないでしょう。

目次

Tkinterとは何ですか?

Tkinterは、PythonがTkGUIツールキットを使用するためのパッケージです。 Tkinterを使用して、Pythonを介してGUIプログラムを作成できます。 Tkinterは多くのプログラムを作成できますが、高度な実装にはモジュールを使用する必要がある場合があります。 Python Tkinterプロジェクトに取り組む前に、Tkinterの基本に精通している必要があります。

TkinterのHelloWorldプログラム

Tkinterのhelloworldプログラムの例を次に示します。

tkinterをtkとしてインポートする

クラスApplication(tk.Frame):

def __init __(self、master = None):

super().__ init __(master)

self.master=マスター

self.pack()

self.create_widgets()

def create_widgets(self):

self.hi_there = tk.Button(self)

self.hi_there [“ text”] =“ Hello World \ n(クリックしてください)”

self.hi_there [“ command”] = self.say_hi

self.hi_there.pack(side =” top”)

self.quit = tk.Button(self、text =” QUIT”、fg =” red”、

command = self.master.destroy)

self.quit.pack(side =” bottom”)

def say_hi(self):

print(“こんにちは、みなさん!”)

ルート=tk.Tk()

app = Application(master = root)

app.mainloop()

Tkinterのジオメトリマネージャー

Python Tkinterプロジェクトで作業するときに知っておくべきもう1つの主要な概念は、ジオメトリマネージャーです。 ジオメトリマネージャーを使用しないと、ウィジェットは画面に表示されません。 ジオメトリマネージャを追加するには、主に3つの方法があります。

グリッド

親にグリッドを追加し、それに応じてウィジェットを表示できるようにします。 グリッドには、ウィジェットの長さと高さを測定するための行と列があります。

パック

このメソッドは、ウィジェットにそれ自体を親内にパックするように指示します。 親の子ウィジェットのリストにウィジェットを追加するだけです。 簡単に言うと、親ウィジェットに配置する前に、ブロックに追加します。

場所

このメソッドは、親ウィジェットに従って特定の場所にウィジェットを配置します。

以下のチュートリアルでは、ウィジェットの位置を処理するためにパックマネージャーを使用しました。 そのため、これらの概念に精通していることが最善です。 それはあなたが私たちのプロジェクトの働きをよりよく理解するのを助けるでしょう。

チェックアウト:初心者向けの42のエキサイティングなPythonプロジェクトのアイデアとトピック

PythonでのGUIの構築(Tkinterチュートリアル)

ステップ1:モジュールのインポート

アプリケーションでの作業を開始するには、最初に必要なモジュールをインポートする必要があります。 これを行うには、名前空間にモジュールをインポートします。 これにより、定数とクラスを修飾する代わりに、名前で使用できるようになります。 つまり、「TkinterLabel」として修飾する代わりに、その名前を使用して「Label」を使用できます。 それは物事を比較的簡単にするでしょう、そしてあなたはすべてのクラスと定数を修飾することは非常に面倒であるかもしれないのであなたは多くの時間を節約することができます。 次のコードを使用して、モジュールをインポートします。

>>>Tkinterインポートから*

PythonがシステムのTk(またはTcl)にリンクされていない場合、またはシステムにTk(またはTcl)がインストールされていない場合は、このセクションにエラーメッセージが表示されます。 この問題を修正するには、システムの管理者がアクセスできるようにする必要があります。 同じことをして、この問題を解決してください。

一方、これらのセクションにエラーメッセージが表示されない場合は、次の手順に進んでウィンドウを作成できます。

>>> win = Tk()

ウィンドウに変数「win」を割り当てました。 上記のコードを実装すると、画面に小さなウィンドウが表示されます。 タイトルバーには「tk」と書かれているはずです。

これは、この手順が正常に完了し、PythonでGUIの構築を開始できることを意味します。

ステップ2:ボタンの追加

Tkinterを実行しているので、プログラムにボタンを追加できます。 ボタンはGUIプログラムの中で最も単純なセクションなので、まずはボタンから始めます。

>>> b1 = Button(win、text =” One”)

>>> b2 = Button(win、text =” Two”)

前のセクションで作成したウィンドウは、現在作成したボタンの親です。 より多くのPythonTkinterプロジェクトで作業するにつれて、フレームが他のクラスの親としても機能することがわかります。 さて、このコードを実装すると、奇妙な出来事に気付くでしょう–ボタンがウィンドウに表示されません!

これは、プログラムにグリッドとパックを追加する必要があるためです。 これらはジオメトリマネージャーと呼ばれ、この記事の前半で説明しました。 次のセクションでパックマネージャーを追加します。

ステップ3:パックマネージャーの実装

packメソッドを使用して、ボタンを親ウィジェットに追加します。 パックマネージャーを使用すると、親ウィジェットのどちら側に対して子ウィジェットをパックするかを指定できます。 関数としてTOP、RIGHT、BOTTOM、LEFTを使用できます。 サイドを指定しない場合、プログラムはデフォルトとしてTOPを選択します。 最初にパックマネージャーを追加しましょう。

>>> b1.pack()

>>> b2.pack()

最初のボタン(コードの最初の行)を追加すると、ウィンドウがボタンのサイズに縮小されることに気付くでしょう。 同様に、2番目のボタン(コードの2行目)を追加すると、そのボタンのサイズに応じてウィンドウが拡大します。 ボタンをどちら側にパックするかを指定しなかったため、ウィンドウはボタンを垂直方向に配置しました。 以下のコードを使用して、左側にそれらをパックしましょう。

>>> b2.pack(side = LEFT)

>>> b1.pack(side = LEFT)

ウィジェットをこれらの2つの順序(水平および垂直)でのみ配置する必要がある場合にのみ、パックマネージャーを使用することに注意してください。 他のタイプのウィジェット配置では、gridメソッドまたはplaceメソッドを使用します。 'padx'または'pady'関数を使用して、ボタンとウィンドウの間にスペースを追加できます。 「padx」関数はウィジェットのX軸(左と右)にパディングを追加し、「pady」関数はデバイスのY軸(上と下)にパディングを追加します。

>>> b1.pack(side = LEFT、padx = 10)

>>> b2.pack(side = LEFT、padx = 10)

ウィジェットのパディングを試すことをお勧めします。 ウィジェットの配置を変更するさまざまな方法を理解するのに役立ちます。 パディングは習得するのが難しい概念なので、次のセクションに進む前に試してみるのが最善です。

ステップ4:グリッドマネージャー

Tkinterで人気のあるもう1つのジオメトリマネージャーは、グリッドマネージャーです。 記事の前半で説明したように、グリッドマネージャーを使用すると、親を行と列に分割できます。 親のグリッドのセルに子ウィジェットを配置できます。 要件に応じて、すべての列と行の幅と長さを変更できます。 すべての列が同じ幅である必要はありません。 同様に、すべての行が同じ高さである必要はありません。 したがって、グリッドマネージャーは、ウィジェットの外観と配置を編集するという点で、より創造的な自由を提供します。

グリッドマネージャーをテストするために、前に作成したのと同じボタンを使用して新しいウィンドウを作成します。 ただし、2×2グリッドにボタンを追加します。

>>> win = Tk()

>>> b1 = Button(win、text =” One”)

>>> b2 = Button(win、text =” Two”)

>>> b1.grid(row = 0、column = 0)

>>> b2.grid(row = 1、column = 1)

私たちのプログラムがいくつかのセルを空のままにしていることに気付くでしょう。 これは、行0、列1(または行1と列0)に何も追加しなかったためです。 新しいウィジェットを試して、何か面白いものを見てみましょう。

>>> l = Label(win、text =”これはラベルです”)

>>> l.grid(row = 1、column = 0)

上記のコードを追加すると、テキストに対応するために2番目のボタンが右にシフトすることがわかります。 複数のウィジェットを備えたグリッドマネージャーを試して、その機能を確認することをお勧めします。

必読:インドのDjango開発者給与

ステップ5:レイアウトの改善

このセクションでは、frameという新しいウィジェットを試してみます。 フレームは他のウィジェットを含むためだけのものです。 複数のウィジェットをフレームにパックするか、グリッドを使用してそれらを同じに配置することができます。 異なるフレームを1つのフレームにパックすることもできます。 この機能を使用すると、GUIプログラムの高度なレイアウトを作成できます。 たとえば、3つのボタンを1行のフレームに追加します。 ボタンを水平方向に追加してから、ラベルをフレームと垂直方向にパックします。

>>> win = Tk()

>>> f = Frame(win)

>>> b1 = Button(f、“ One”)

>>> b2 = Button(f、“ Two”)

>>> b3 = Button(f、“ Three”)

>>> b1.pack(side = LEFT)

>>> b2.pack(side = LEFT)

>>> b3.pack(side = LEFT)

>>> l = Label(win、”このラベルはすべてのボタンに適用されます”)

>>> l.pack()

>>> f.pack()

記事の前半で説明したように、ジオメトリマネージャーとしてplaceメソッドを使用することもできます。 placeメソッドを使用すると、ウィンドウまたはフレーム内の特定の場所にウィジェットを配置できます。 ただし、placeメソッドはプログラムの応答性を制限するため、頻繁に使用することはお勧めしません。

グリッド機能を使用すると、ウィジェットの配置を指定するためにマップ座標(S、N、W、SW、NEなど)を使用できる「sticky」パラメーターを使用できます。 次のセクションに進む前に、これまでに説明した機能を理解していることを確認してください。 グリッドをテストし、フレームが一緒に機能して、他のPythonGUIプロジェクトでどのように使用できるかを確認します。

ステップ6:ボタンを便利にする

これまでに作成したボタンをクリックすると、応答がないことに気付いたはずです(何もしません)。 クリックすると押し下げられ、上にカーソルを合わせるとハイライト表示されますが、機能は実行されません。 ボタンに特定の機能を実行させるには、「configure」機能を使用する必要があります。

ウィジェットの「configure」メソッドに任意のキーワード引数を渡して、ウィジェットの作成中に渡すことができます。 次に例を示します。

>>> b1.configure(text =” Uno”)

'command'パラメーターは、ボタンを作成するとき、または'configure'を追加するときに、ボタンをコールバック関数に関連付けます。 それがどのように機能するかを理解するために、メッセージを出力する関数を作成します。

>>> def but1():

…print(「ボタン1が押されました」)

>>> b1.configure(command = but1)

したがって、それぞれのボタンをクリックすると、メッセージが出力されます。

ステップ7:エントリウィジェットを追加する

入力ウィジェットを使用すると、ユーザーはプログラムにテキストを入力できます。 ただし、ボタンの場合と同じように、エントリウィジェットを機能させる必要があります。 エントリウィジェットは、テキストを取得(および設定)する必要があります。 エントリウィジェットでこの機能を実行するには、Tkinterオブジェクト「StringVar」を使用する必要があります。 'StringVar'オブジェクトは、テキストを文字列の形式で保持し、getを介して読み取り可能にします。

エントリウィジェットをテストするための新しいウィンドウを作成します。

>>> win = Tk()

>>> v = StringVar()

>>> e = Entry(win、textvariable = v)

>>> e.pack()

ここで、エントリとして「これはテストです」を追加し、StringVarを介して同じものを取得しましょう。

>>> v.get()

"これはテストです"

これで、テキストをStringVarに設定して、ウィジェットに表示させることができます。

>>> v.set( "これはプログラムから設定されます")

追加のウィジェット:リストボックスウィジェット

エントリウィジェットとは別に、リストボックスウィジェットを追加できます。 リストボックスウィジェットを使用すると、ユーザーはメニューから項目を選択できます。 リストボックスウィジェットを試すための新しいウィンドウを作成します。

>>> win = Tk()

>>> lb = Listbox(win、height = 3)

>>> lb.pack()

>>> lb.insert(END、“最初のエントリ”)

>>> lb.insert(END、“ 2番目のエントリ”)

>>> lb.insert(END、“ 3番目のエントリ”)

>>> lb.insert(END、“ 4番目のエントリ”)

リストの最初、途中、最後にアイテムを挿入できます。 それらも削除できます。 リストにあるアイテムが多すぎる場合は、スクロールバーを追加できます。

>>> sb = Scrollbar(win、orient = VERTICAL)

>>> sb.pack(side = LEFT、fill = Y)

スクロールバーを機能させるには、コールバック関数を使用する必要があります。

>>> sb.configure(command = lb.yview)

>>> lb.configure(yscrollcommand = sb.set)

curselectionメソッドは、リストボックスでアイテムを選択すると、そのアイテムを返します。 アイテムを選択しない場合は、空のタプルが返されます。

ステップ#8:最終ステップ

Tkinterチュートリアルで学んだすべてのことを使用して、電話リストエディタを作成します。

トータルコード

#!/ usr / bin / env python3

tkinterインポートから*

電話からのインポート*

def which_selected():

print(“ At {0}” .format(select.curselection()))

int(select.curselection()[0])を返します

def add_entry():

phonelist.append([fnamevar.get()、lnamevar.get()、phonevar.get()])

set_select()

def update_entry():

phonelist [which_selected()] = [fnamevar.get()、

lnamevar.get()、

phonevar.get()]

def delete_entry():

del phonelist [which_selected()]

set_select()

def load_entry():

fname、lname、phone = phonelist [which_selected()]

fnamevar.set(fname)

lnamevar.set(lname)

phonevar.set(phone)

def make_window():

グローバルfnamevar、lnamevar、phonevar、select

win = Tk()

frame1 = Frame(win)

frame1.pack()

Label(frame1、text =” First Name”)。grid(row = 0、column = 0、sticky = W)

fnamevar = StringVar()

fname = Entry(frame1、textvariable = fnamevar)

fname.grid(row = 0、column = 1、sticky = W)

Label(frame1、text =” Last Name”)。grid(row = 1、column = 0、sticky = W)

lnamevar = StringVar()

lname = Entry(frame1、textvariable = lnamevar)

lname.grid(row = 1、column = 1、sticky = W)

Label(frame1、text =” Phone”)。grid(row = 2、column = 0、sticky = W)

phonevar = StringVar()

phone = Entry(frame1、textvariable = phonevar)

phone.grid(row = 2、column = 1、sticky = W)

frame2 = Frame(win)#ボタンの列

frame2.pack()

b1 = Button(frame2、text =” Add“、command = add_entry)

b2 = Button(frame2、text =” Update”、command = update_entry)

b3 = Button(frame2、text =” Delete”、command = delete_entry)

b4 = Button(frame2、text =” Load“、command = load_entry)

b5 = Button(frame2、text =” Refresh”、command = set_select)

b1.pack(side = LEFT)

b2.pack(side = LEFT)

b3.pack(side = LEFT)

b4.pack(side = LEFT)

b5.pack(side = LEFT)

frame3 = Frame(win)#名前の選択

frame3.pack()

scroll = Scrollbar(frame3、orient = VERTICAL)

select = Listbox(frame3、yscrollcommand = scroll.set、height = 6)

scroll.config(command = select.yview)

scroll.pack(side = RIGHT、fill = Y)

select.pack(side = LEFT、fill = BOTH、expand = 1)

リターンウィン

def set_select():

phonelist.sort(key = lambda record:record [1])

select.delete(0、END)

電話リストのfname、lname、phoneの場合:

select.insert(END、“ {0}、{1}” .format(lname、fname))

win = make_window()

set_select()

win.mainloop()

電話リストは次のとおりです。

phonelist = [['Chris'、'Meyers'、 '241-343-4349']、

['Robert'、'Smith'、 '202-689-1234']、

['ジャネット'、'ジョーンズ'、 '609-483-5432']、

['ラルフ'、'バーンハート'、 '215-683-2341']、

['エリック'、'ネルソン'、 '571-485-2689']、

['フォード'、'プリフェクト'、 '703-987-6543']、

['メアリー'、'ジグラー'、 '812-567-8901']、

['ボブ'、'スミス'、 '856-689-1234']]

ここで共有したプログラムは一例です。 このTkinterチュートリアルで説明した関数を使用してプログラムを作成できます。 上記のプログラムには、変更を保存するオプションがないなど、いくつかの機能がありません。 このタスクを実行できるボタンを作成することにより、自分で保存機能を追加できます。

必読: Pythonチュートリアルのマルコフ連鎖

PythonおよびPythonGUIプロジェクトの詳細

Python Tkinterプロジェクトでの作業は、自分が何をしているのかを知っていれば、かなり楽しいことがあります。 また、長所(および短所)を理解するための優れた方法でもあります。 Pythonについてもっと学ぶことができます。 ブログにアクセスすることをお勧めします。 さらに読むためのいくつかのリソースがあります:

  • 10個のPythonGUIプロジェクト
  • Pythonでチャットボットを作成する方法
  • 42Pythonプロジェクトのアイデア

このプロジェクトについてどう思いますか? 他のPythonTkinterプロジェクトに取り組んだことがありますか? 我々に教えてください。

データサイエンスについて知りたい場合は、IIIT-B&upGradのデータサイエンスのエグゼクティブPGプログラムをチェックしてください。これは、働く専門家向けに作成され、10以上のケーススタディとプロジェクト、実践的なハンズオンワークショップ、業界の専門家とのメンターシップを提供します。1業界のメンターとの1対1、400時間以上の学習、トップ企業との仕事の支援。

Pythonはグラフィカルユーザーインターフェイスの作成に適していますか?

Pythonには、Tkinterから他の多くのクロスプラットフォームソリューション、およびプラットフォーム固有のバインディングに至るまで、多数のグラフィカルユーザーインターフェイスフレームワークがあります。 PythonをTkinterと組み合わせると、グラフィカルユーザーインターフェイスをすばやく簡単に作成できます。 Pythonは、多くの組み込みウィジェットを備え、ウィンドウをすばやく生成し、強力なイベント処理技術を備え、基本的な描画機能を備えているため、GUIの作成に最適です。

TkinterまたはKIVY:どちらを使用するのが良いですか?

Kivyは、ユニークで魅力的なユーザーインターフェイスプログラムを作成または設計するための無料のオープンソースPythonフレームワークです。 アプリの作成を楽しんでいるPython開発者の場合、KIVYはより動的なアプリケーションを作成するための優れた選択肢です。 Tkinterは、GUIアプリケーションをすばやく簡単に開発するために最も広く使用されているPythonインターフェースです。 Pythonを初めて使用し、コンピューターインターフェイスの作成方法を学びたい場合は、Tkinterから始めて、基本を学びましょう。