やあ、みんな! この記事では、Pythonのtkinterを使用して、シンプルなGUIランダム映画提案アプリを作成します。
1. データの準備
多くの映画名を含む大規模なデータセットを取得するために、kaggle
を利用します。
このプロジェクトで使用したデータセットは、ここからダウンロードできます。
1.1 モジュールのインポート
データ準備のために、numpy
と pandas
という2つのモジュールが必要です。
また、後述する random
と tkinter
モジュールもインポートします。
モジュールをインポートするためのコードを以下に示す。
1
2
3
4
|
import numpy as np
import pandas as pd
import random
import tkinter as tk
|
1.2 データの読み込み
csv形式のデータファイルを読み込むために、pandas モジュールの
read_csv` 関数を使用し、すべての情報を 1 つの変数に格納することにします。
データを表示するには、データセットの上位5行を表示する head
関数を使用します。
データセットには50602の映画の名前が含まれており、明らかに膨大な数です。
初期データをロードするコードは以下のとおりです。
1
2
|
data = pd.read_csv( "indian movies.csv" )
data.head() |
1.3 データの準備
データ全体がロードされたので、どのカラムが必要で、どのカラムが必要でないかを観察する必要があります。
このプロジェクトで必要なカラムは、映画名と公開年だけです。
まず、データ全体をnumpyモジュールで配列に変換して、データの走査を容易にします。
次に、必要な情報を格納するための空のリストを作成します。
次のステップでは、データを行単位で調べ、映画名と公開年をタプルの形で共通のリストに格納します。
そのためのコードを以下に示します。
1
2
3
4
5
|
data = np.array(data)
l_movies = []
for i in data:
l_movies.append((i[ 1 ],i[ 2 ]))
print (l_movies[: 5 ])
|
リストスライスを使用して、最初の5つの映画名と年を表示してみましょう。
その出力は次のようになります。
[('Dr. Shaitan', '1960'), ('Nadir Khan', '1968'), ('Apna Sapna Money Money', '2006'), ('Aag Aur Sholay', '1987'), ('Parivar', '1956')] |
2. Tkinterアプリケーションウィンドウの作成
ウィンドウ全体には、ラベル、出力テキストボックス、ボタンが1つの画面上にまとめられています。
また、異なる色やフォントを用いてウィンドウ全体をカスタマイズします。
以下に、全体の設計のためのコードを示します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import tkinter as tk
window = tk.Tk()
window.geometry( "600x200" )
window.config(bg = "#ABEBC6" )
window.resizable(width = False ,height = False )
window.title( 'Movie Name Suggestor' )
l1 = tk.Label(window,text = "Click on the button to suggest you a movie" ,font = ( "Arial" , 20 ),fg = "Black" ,bg = "White" )
b1 = tk.Button(window,text = "Suggest Movie" ,font = ( "Arial" , 15 ),bg = "darkgreen" ,fg = "white" )
t1 = tk.Text(window,width = 50 ,height = 1 ,font = ( "Arial" , 15 ),state = 'disabled' )
l1.place(x = 30 ,y = 10 )
b1.place(x = 200 ,y = 60 )
t1.place(x = 15 ,y = 120 )
window.mainloop() |
もし、設計の過程で疑問があれば、ここで紹介するチュートリアルを参照してください。
最終的な出力画面は以下のようになります。
1
2
3
4
5
6
7
8
9
|
def suggest():
t1.config(state = 'normal' )
t1.delete( '1.0' , tk.END)
r = random.choice(l_movies)
name = r[ 0 ]
year = r[ 1 ]
msg = r[ 0 ] + "(" + r[ 1 ] + ")"
t1.insert(tk.END,msg)
t1.config(state = 'disabled' )
|
3. ボタンへの機能追加
Suggest Movie Buttonに機能を追加するために、ステップ1で用意したリストからランダムに映画データを選択する関数を新規に作成します。
選択された映画名と公開年は、出力テキストボックスに追加されます。
この関数のコードは以下の通りです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import numpy as np
import pandas as pd
import random
import tkinter as tk
data = pd.read_csv( "indian movies.csv" )
data = np.array(data)
l_movies = []
for i in data:
l_movies.append((i[ 1 ],i[ 2 ]))
def suggest():
t1.config(state = 'normal' )
t1.delete( '1.0' , tk.END)
r = random.choice(l_movies)
name = r[ 0 ]
year = r[ 1 ]
msg = r[ 0 ] + "(" + r[ 1 ] + ")"
t1.insert(tk.END,msg)
t1.config(state = 'disabled' )
window = tk.Tk()
window.geometry( "600x200" )
window.config(bg = "#ABEBC6" )
window.resizable(width = False ,height = False )
window.title( 'Movie Name Suggestor' )
l1 = tk.Label(window,text = "Click on the button to suggest you a movie" ,font = ( "Arial" , 20 ),fg = "Black" ,bg = "White" )
b1 = tk.Button(window,text = "Suggest Movie" ,font = ( "Arial" , 15 ),bg = "darkgreen" ,fg = "white" ,command = suggest)
t1 = tk.Text(window,width = 50 ,height = 1 ,font = ( "Arial" , 15 ),state = 'disabled' )
l1.place(x = 30 ,y = 10 )
b1.place(x = 200 ,y = 60 )
t1.place(x = 15 ,y = 120 )
window.mainloop() |
関数が作成されたら、あとはボタン宣言に command
属性を追加するだけです。
これで完成です。
Complete code to implement random movie suggestions app
このアプリケーションの完全なコードは以下のとおりです。
サンプル出力
以下の画像は、ユーザーがアプリケーションに視聴する映画を取得するように要求したときに生成される出力を示しています。
まとめ
以上です。
私たちは素晴らしい、そして完璧なTkinter GUIアプリケーションを構築しました。
すべて理解していただけたでしょうか。
自分でも試してみてください。