python PR

Python初心者が独学でデスクトップアプリを作成〜サンプルコード+スライドつき〜

Pythonなら独学でもアプリを作れる
記事内に商品プロモーションを含む場合があります

数年前からAIブームが来ており、その度にPythonの名前を聞くことや興味を持つ方が増えたのではないでしょうか

「プログラミングに興味を持ったはいいけど、何からやればいいかわからない。」

「一人でプログラム書けるようになるのか不安」

など、さまざまなことを思うかと思います。

私は情報工学の高校出身ですが、現在は病院で働いています。

プログラムなど一切触らない業務です。

高校時代にプログラミングで挫折をして、進路変更をしました。

なので、プログラムを学び始めた人が挫折するところもなんとなくわかる気がします。

もう二度と触れることはないと思っていたプログラミングですが、病院業務にPythonを使えば、業務改善できるのではないかなぁ、と思い始めてPythonを使い始めました。

今回の記事では、Pytrhon初心者が独学でアプリ作成するまでの流れを説明していきたいと思います。

よくつまづきそうな部分、僕がつまづいた部分などは強調してお伝えしていければいいかなと思います。

実際にPythonを独学で学んで5桁の収益を出した方法はこちらから

Pythonを独学で学ぶ方法!【実践済み】AIやIoTの進歩に伴い、pythonに興味を持ち始めている方もいるのではないでしょうか?pythonについてググってみると「pythonは独学でも簡単に学べます!」という文言をよく見かけますが、果たして本当でしょうか?そこで、この記事では筆者が実際に実践をしてきたpythonを独学で学ぶ方法について解説していきたいと思います...

Pythonの独学を行う前の前提

Pythonの独学を行う前の前提

Pythonに関して取り扱っているwebサイトは無数にあります

今回、私が作成したアプリは全てwebサイトの情報をもとに独学で作成をしました

webサイトが無数にあるにも関わらず、「あっちをみたり、こっちをみたり」

とさまざまなwebサイトを見るハメになっていました

万人が理解できる解説はないと思いますが、サイト検索にめちゃくちゃ時間かけてるんで、どうしてそんなに時間をかけなくてはいけなくなったのか?

どうすれば一つのwebサイトだけで完結することができるのか?

っていうことに重きを置いて、このブログを立ち上げました

ぜひ!Python独学の参考にしてみてください!!

Pythonを使ってアプリを作る

Pythonを使ってアプリを作る

今回作成するアプリはデスクトップアプリと呼ばれるものです。

デスクトップアプリとはパソコン上で利用することができるアプリケーションのこと。
作ろうと思ったきっかけは、業務改善のためです。

電子カルテからcsvデータを引っ張ってくると余計な情報も一緒に読み込んでしまうので、好きな列だけを好きなように抽出したいと思って作り始めました。

電子カルテから情報を引っ張ってくるのは僕だけではなく、全スタッフが行なっているので、実用的な機能になれば業務改善につながるかな、と思っています。

これ、csvデータで毎回コピペしてるとかなり時間かかるんですよ。

それですげーめんどくさかったので、作ることを決心しました。

最終目標は、簡単に操作ができる統計ソフトと全自動のスケジュールソフトを作ることです。

まずはPythonの環境構築から

まずはPythonの環境構築から

ソフトを作るといっても、Pythonの環境がなければ作成することができません

Pythonの環境構築に関しては、こちらの記事を参考にしながら進めていってもらえれば、Pythonを始めることができます

pythonの環境構築を徹底解説
Pythonを始めるための環境構築を進めようPythonを学び始めようと思っても、まず環境構築でつまづくことがあります。 僕は環境構築で3回ほど挫折しました。 この記事では、pythonを始めるための環境構築について解説していきたいと思います。 実際に僕がpythonの環境構築を行う上でつまづいた点も含めて、解説していければと思います。 別の記事ではAnacondaを利用したインストール方法も解説していますので、そちらも確認してみてください...
anacondaの構築方法
Pythonの環境構築〜Anacondaとは?〜サンプルコードと図解付きPythonの環境構築を調べると、「Anaconda」という文字を見かけるかと思います。 僕も最初はよくわからなくて、とりあえずwebサイトに書いてある通りに進めていきました。 そのおかげもあり、3回ほど環境構築で挫折をしました。 現在はAnacondaを使ってpythonの学習を進めています。 なので、今回はAnacondaの環境構築について解説をしていこうと思います。 この記事を読んでいるかたが迷子にならないように、画像付きで解説していこうと思いますので、最後までお付き合いください。...

GUIで操作できるように

GUIで操作できるように

デスクトップアプリはGUIで作成していきます(表現が正しいかはわかりません笑)

GUIはグラフィカルユーザーインターフェースの略で、マウスなどを使って操作する、ごく一般的なアプリです。

GUIでアプリを作れるプログラミング言語も限られているかと思います。

ので、Pythonを選択しました。

GUIアプリを作れるプログラミング言語についてはこちらから

python以外でGUIアプリが作れるプログラミング言語とは?
Python以外にもある?GUIアプリを作れるプログラミング言語についてパソコンで利用することができるGUIアプリを作成するのに、python以外にもあるのか、調べてみました。 個人的には、時代の流れ的にはpythonを使う、という選択ししかなかったかつ、データ解析をしたかった、という理由でpythonを選択しています。 しかし、それ以外にもGUIアプリを作成することができる言語があるので、いくつか紹介していきたいと思います。...

本当はR言語使ってプログラム作ったんですけど、アプリ化できなかったので、Pythonに切り替えました。

PythonでGUIアプリを作る方法

PythonでGUIアプリを作る方法

PythonでGUIアプリを作る方法は簡単です。

Pythonに用意されているtkinterというモジュールを使えば作ることができます。

モジュールについて詳しい解説はこちらから

Pythonのモジュールについて詳しく説明〜わかりやすいサンプルコードつき〜
Pythonのモジュールについて詳しく説明〜わかりやすいサンプルコードつき〜Pythonなどのプログラミング言語を学んでいると、カタカナが多く、嫌になります。 その一つにモジュールがあります。 初めて見た...

ここからは実際のコードも踏まえて説明をしていきたいと思います。

Pythonで作成したGUIソフトのコード

Pythonで作成したGUIソフトのコード

Pythonで実際に作成したコードをもとに解説をしていきたいと思います。

このコードでは、好きなcsvファイルを選択し、列名をリストボックスに表示させることができるプログラムです。

実際にはここからさらに発展させていきたいのですが、現状はここで一旦止めています。

なぜなら、この記事を書いている時に、壁にぶち当たっているからです。

import tkinter as tk
from tkinter import filedialog
import pandas as pd
import os

root=tk.Tk()
root.title("チョイス")
frame=tk.Frame()
frame.grid(row=0,sticky="we")
frame_button=tk.Frame()
frame_button.grid(row=1,sticky="we")

def btn_click():
type = [("all file","*")]
path = os.getcwd ()
file_path = filedialog.askopenfilename(filetypes = type, initialdir = path)
df = pd.read_csv(file_path, engine="python")
df_columns=df.columns.values

list_value=tk.StringVar()
list_value.set(df_columns)
listbox=tk.Listbox(frame,height=30,listvariable=list_value,selectmode="single")
listbox.pack()

Button=tk.Button(frame_button,text="選択",command=btn_click)
Button.grid(row=1,column=0)

root.mainloop()

Tkinterのインストール

Tkinterのインストール

Pythonでtkinterを使えるようにしなくてはいけません

使えるようにする方法は以下の通り

Import tkinter
Import 〇〇

の〇〇にはモジュール名がきます

このモジュール名を変更すればさまざまなものをインストールすることができます

さらに、import 〇〇 as ××

と入力すれば〇〇のことを××と呼びます、と宣言することができます。

例えば、

Import tkinter as tk

と入力すればtkinterをtkと呼んで利用することができるようになります。

なんでそんなことをするかというと、プログラムを打っていく中で、何度も「tkinter」と入力する場面が出てきます。

何度も何度も「tkinter」って入力するのはめんどくさいので、短くて楽なものにしようっていうことです。

モジュールのインポート

これでひとまずtkinterを使うことができるようになりました。

tkinterはGUIアプリを作るために必要最低限の下準備みたいなものです。

ここから様々な機能を付け加えていきます。

TkinterでGUIのメイン画面を表示させる

TkinterでGUIのメイン画面を表示させる

tkinterをインポートすることができたら、今度はGUIアプリのメイン画面を表示させていきます。

Import tikinter as tk
root=tk.Tk()
root.mainloop()

これでメイン画面を表示させることができます。

tkinterのメイン画面を表示させる

上記のような画面が表示されれば、成功です。

root=tk.TK()

というのはルートウィンドウを作るためのコマンドです

このルートウィンドウにさまざまな機能を持ったボタンを配置していくことになります。

また、プログラムの中でルートウィンドウは一つだけとされています。

実際に実行したことはないですが、二つ以上作ろうとするとエラーになるのではないでしょうか?

rootの部分はなんでも好きな文字を入れることができます。

main=tk.TK()

でも問題ありません。

小文字のtkの部分は、

Import tkinter as tk

のtkです

Import tkinter

にしている場合は、

root=tkinter.Tk()

になります。

次に

root=mainloop()

は立ち上げたウィンドウを開きっぱなしにしておくためのコマンドです。

ここがないと、立ち上がった直後にウィンドウが消えます。

最後に、

Import tikinter as tk
root=tk.Tk()
root.mainloop()

ここのrootはどちらも同じ名前にしておかないといけません

例えば、

Import tikinter as tk
root=tk.Tk()
main.mainloop()

Import tikinter as tk
main=tk.Tk()
root.mainloop()

などではエラーになりますので、注意しておきましょう。

Tkinterで立ち上げたウィンドウにタイトルをつける

Tkinterで立ち上げたウィンドウにタイトルをつける

rootウィンドウを立ち上げると上側にタイトルが表示されます。

ここは任意で変更することができますので、以下のように打ってみましょう

import tkinter as tk
root=tk.Tk()
root.title("Hello World")
root.mainloop()

これでプログラムを実行すると、立ち上がったウィンドウの上側に「Hellow World」が表示されているはずです。

Hello World
僕のコード例は以下のようになっています。

import tkinter as tk
from tkinter import filedialog
import pandas as pd
import os
root=tk.Tk()
root.title("チョイス")
tkinter タイトルtkinter タイトル チョイス

今回はチョイスというタイトル名にしています。

csvから好きな列だけを選択するので、そういった名前にしています。

タイトルと機能に関係を持たせておけば、ぱっと見でなんのソフトなのかがわかると思います。

tkinterで立ち上げたウィンドウにフレームをつける

tkinterで立ち上げたウィンドウにフレームをつける

最初に作成したメインウィンドウには以下のようなパーツを配置することができます
以下のようなパーツのことをウィジェットと呼びます。

  • Label
  • Button
  • Entry
  • Checkbutton
  • Scale
  • Frame

などなど

そして、この個々のウィジェットを複数組み合わせて使用するために必要なのが、Frameと呼ばれるウィジェットになります。

Frameの詳しい使い方はこちらを参考にしてください。

Python tkinterのFrameの使い方〜サンプルコード+スライドつき〜
Python tkinterのFrameの使い方〜サンプルコード+図解付き〜Pythonを用いて、GUIソフトを作成する際にTkinterが使用されることが多いです tkinterではウィジェットと呼ばれる数種類の部品を使いながら、GUI画面を作ってきます このとき「Frame」を使用することで、GUIソフトの開発に役立てることができます この記事では、Pythonのtkinterを使用する際に、重要になるFrameについて、実例と詳しいスライドを使って解説をしていきたいと思います...

TkinterではFrameを絶対に使わなくてはいけない。

ということはありません。

なくても作成することができますが、GUIの自由度が増すので、使えるのであれば使った方かいいと思います。

tkinter ウィジェットの使い方tkinter ウィジェット使い方2

今回の僕のコードでは、

frame=tk.Frame()
frame.grid(row=0,sticky="we")
frame_button=tk.Frame()
frame_button.grid(row=1,sticky="we")

の部分となっています。

以下のコードを記載すれば、実際に画像のような画面が表示されるようになるはずです

#ウインド画面の作成
root=tk.Tk() 
root.title("チョイス")
root.geometry("600x600")

#フレームの作成
#フレーム1(上側:リストボックスを格納する)
frame=tk.Frame()
frame.grid(row=0)
frame2=tk.Frame()
frame2.grid(row=0,column=1)
#フレーム2(下側:ボタンを格納する)
frame_button=tk.Frame()
frame_button.grid(row=1,columns=1)
frame_button1=tk.Frame()
frame_button1.grid(row=2,columns=1)
frame_button2=tk.Frame()
frame_button2.grid(row=2,columns=1)

#リストボックスの作成
list_value=None
list_value1=None
listbox=tk.Listbox(frame,height=30,listvariable=list_value,selectmode="single")
listbox1=tk.Listbox(frame2,height=30,listvariable=list_value1,selectmode="single")
listboxData = {}   

#ボタンの作成
Button=tk.Button(frame_button,text="ボタン")
Button.grid(row=1,column=1)
Button1=tk.Button(frame_button1,text="ボタン")
Button1.grid(row=2,column=1)

#画面の表示
listbox.pack()
listbox1.pack()
root.mainloop()
tkinter ウィジェット
frame=tk.Frame()

でフレームを作成することができます

frame=tk.Frame(xxx,yyy)

xxxと書いた部位には第一引数、yyyyと書いた部分には第二引数を入力することができます

第一引数にはメインウィンドウを指定します。今回の場合であれば、rootということになります。

メインウィンドウ・フレーム・ウィジェットの関係性は以下のようになっています

tkinter ウィジェットの位置関係

また第二引数以降はオプションを指定することができます。

引数はなくてもプログラムは実行するので、必要があれば入力すればOKです。

引数についての詳しい解説は以下を参考にしてみてください。

python 引数について
Pythonにおける引数とは?サンプルコード+図解で独学の理解が進むpythonを学び始めて最初から3個目くらいの壁と言っていい「引数」と「コマンドライン引数」 初めてpythonを学ぶ方にとっては、かなり理解不能なものなのではないでしょうか。 この記事では、pythonで使用する引数について、 サンプルコードと図解を用いて解説していきたいと思います...

第二引数以降に利用することができるオプションは以下のものがあります

オプション説明
widthintフレームの横幅
heightintフレームの縦幅
reliefflat(デフォルト),raised

sunken,groove,ridge

フレームの枠を指定
bg or backgroundcolorフレームの背景色
bd or borderwidthintボーダーの幅
cursorマウスポインタの種類マウスポインタの見た目を指定
padyint枠とテキストとの間の縦の空白
padxint枠とテキストとの間の横の空白
takefocusTrue, FalseTabキーでのフォーカス移動の有無

>>>PythonのFrameで使えるオプション一覧(…coming soon…)

tkinterのpack/grid/placeについて

tkinterのpack/grid/placeについて

さて、Frameの次行にあるのが、

frame.grid(row=0,sticky="we")

になります

これはフレームの位置を決めるためのものです
フレームの配置には3種類の方法があります

  1. pack
  2. grid
  3. place

それぞれ一つずつ解説をしていきます

Packについて

Packを使用することで、作成したウィジェットを一列に並べて配置することができます。

Frameと同じようにオプションを使用することで、配置位置などを変更することができます

オプション説明
anchor=E, W, S, N, NE, SE, NW, SW, CENTERwidgetの寄せ方向を決める。default=CENTER
expand=0, 1ジオメトリマスタの余分なスペースを埋めるために拡大する(1)かしない(0(default))かを決める。
fill=NONE, X, Y, BOTHwidgetの空きスペースを埋める方向を決める。default=NONE
padx=int値widget外側、横方向の隙間を指定。default=0
pady=int値widget外側、縦方向の隙間を指定。default=0
ipadx=int値widget内側、横方向の隙間を指定。default=0
ipady=int値widget内側、縦方向の隙間を指定。default=0
side=TOP, LEFT, RIGHT, BOTTOMwidgetを詰める方向を決める。default=TOP

Gridについて

Gridはウィジェットの配置を行(row)と列(column)で指定することができます

Gridもpack同様にオプションをつけることが可能です

オプション

説明

row=

int

行位置を決める。

column=

int

列位置を決める。

rowspan=

int

繋げる行数を指定する。default=1

columnspan=

int

繋げる列数を指定する。default=1

padx=

int

widget外側、横方向の隙間を指定。default=0

pady=

int

widget外側、縦方向の隙間を指定。default=0

ipadx=

int

widget内側、横方向の隙間を指定。default=0

ipady=

int

widget内側、縦方向の隙間を指定。default=0

sticky=

E, W, S, N, NE, SE, NW, SW, CENTER

packanchor+fill機能。配置の寄せ方向を決め、複数指定(W + E等)で引き伸ばすことができる。

placeについて

最後がplaceについてです

Placeではx座標、y座標を指定することで、ウィジェットの位置を決めることができます

メインウィンドウの左上端が(0,0)になります

Placeにもオプションはあります

属性

説明

anchor

pack と同じ、デフォルトは Tk.NW

bordermode

縁を内側 (Tk.INSIDE) か外側(Tk.OUTSIDE)につける。デフォルトは Tk.INSIDE

height

高さを pixel で指定。

relheight

widget に対する相対的な高さを 0.0 — 1.0 の実数で指定。

relwidth

widget に対する相対的な幅を 0.0 — 1.0 の実数で指定。

relx

widget に対する相対的な横の位置を 0.0 — 1.0 の実数で指定。デフォルトは 0

rely

widget に対する相対的な横の位置を 0.0 — 1.0 の実数で指定。デフォルトは 0

width

幅を pixel で指定。

x

横の位置を pixel で指定。デフォルトは 0

y

縦の位置を pixel で指定。デフォルトは 0

より詳しいウィジェットの配置に関しては以下の記事を参考にしてください
>>>tkinterのウィジェットの配置について。(pack/grid/place)実例付き

tkinterのframe_buttonについて

tkinterのframe_buttonについて

最後はframe_buttonについてです

frame_button=tk.Frame()
frame_button.grid(row=1,sticky="we")

tkinterでボタンがクリックされた時の応答

ここからはGUI上でボタンがクリックされた時の応答について解説していきたいと思います

実際のコードはこちら

def btn_click():
type = [("all file","*")]
path = os.getcwd ()
file_path = filedialog.askopenfilename(filetypes = type, initialdir = path)
df = pd.read_csv(file_path, engine="python")
df_columns=df.columns.values
print(df_columns)

list_value=tk.StringVar()
list_value.set(df_columns)
listbox=tk.Listbox(frame,height=30,listvariable=list_value,selectmode="single")
listbox.pack()

btn_click

というアクションが生じた時に、それ以下の動作をさせるコードになっています

ここの一連のコードはボタンを押したときに、パソコンのファイル選択画面に移行して、好きなファイルを選択、csvファイルを読み込み、csvファイルの列名をリストボックスと呼ばれるウィジェットに反映させる、という流れになっています

先頭のdefとはdefinitionの略です

definitionとは定義という意味です

btn_clickを定義しますよ、ということです。こういうのを「関数を定義する」と言います。

覚えておくと後々の学習が楽になると思います。

type = [("all file","*")]

で全ての拡張子ファイルを洗濯することができるようにしています

csvのみ、pdfのみとかにもすることができます

path = os.getcwd ()

ここはカレントディレクトリを取得するコードです

カレントディレクトリに関する詳しい内容は、以下の記事を参考にしてください

>>>Pythonでカレントディレクトリを確認・変更する方法(…coming soon…)

python関数の説明
file_path = filedialog.askopenfilename(filetypes = type, initialdir = path)

filedialogはtkinterのオブジェクトです

これを使うことで、GUI画面上で見慣れたファイル選択画面を作成することができます

ここで出てきているfiletypes = typeの「type」はその前に定義したものになっています。

python file_pathの説明 python file_pathの説明2

ざっくりと僕が今作ろうとしている、統計ソフトのコードを解説しました。

ところどころにリンクを貼っているので、詳しく知りたい方はそちらを参考にしていただけると幸いです。

Python学習でつまづかないためには?

Python学習でつまづかないためには?

Python学習を進めていく上で、
「ひとまず何かしらの書籍に目を通したい」
「webで調べても全くわからない」
という状況が何度も何度でも出てくるかと思います。

そういう時に便利なのが、kindleとテラテイルです。

Kindleはご存知の通り、電子書籍です。
Kindleには多くのPython学習本が用意されており、無料で読むことができます。(たまに有料もあります)

ひとまずどういった書籍があるのか?
もしものために、書籍に目を通しておこう

という場合には、kindleの利用がおすすめです。

また、webで調べて、試行錯誤しても全くわからない…
っていう状況を打破してくれる、手助けしてくれるのが、テラテイルです。

実現したいこと・エラーメッセージ・コードなどを記載すれば、プロのエンジニアの方々が手助けをしてくれます。

どちらも登録しておいて損はないサイトです。
Python初心者はぜひ利用してみてください。

DMMWEBCAMP


  • WEBCAMPはコスパ最強
  • WEBCAMPは初心者に優しい充実したサポート付き
  • 16週間プランを選択して、返金してもらおう

WEBCAMPの公式ページはこちら
WEBCAMPの口コミ・評価はこちら

テックアカデミー
 


  • テックアカデミーは費用対効果抜群
  • テックアカデミーのサポートは個人の能力に応じつつ、python初心者に優しい
  • まずは無料体験でテックアカデミーを知ってから受講を決める

テックアカデミーの公式ページはこちら
テックアカデミーの口コミ・評価はこちら

データミックス

  • データサイエンスを学ぶならデータミックス一択
  • Pythonの実装も学べる
  • 教育給付金制度で費用を抑えられる

データミックスの公式ページはこちら
データミックスの口コミ・評価はこちら

キカガク
  • 多種多様なスキルコース
  • 初心者から専門家まで対象
  • 給付金利用で費用を抑えられる

キカガクの公式ページはこちら
キカガクの口コミ・評価はこちら

Aidemy Premium

  • 完全オンラインで、時間や場所に縛られず学習したい
  • マンツーマン学習サポートにより実践に近い経験をしたい
  • 未経験から機械学習エンジニアになりたい

Aidemy Premiumの公式ページはこちら
Aidemy Premiumの口コミ・評価はこちら

おすすめプログラミングスクール

DMMWEBCAMP
  • WEBCAMPはコスパ最強
  • WEBCAMPは初心者に優しい充実したサポート付き
  • 16週間プランを選択して、返金してもらおう
WEBCAMPの公式ページはこちら WEBCAMPの口コミ・評価はこちら
テックアカデミー  
  • テックアカデミーは費用対効果抜群
  • テックアカデミーのサポートは個人の能力に応じつつ、python初心者に優しい
  • まずは無料体験でテックアカデミーを知ってから受講を決める
テックアカデミーの公式ページはこちら テックアカデミーの口コミ・評価はこちら
キカガク
  • 多種多様なスキルコース
  • 初心者から専門家まで対象
  • 給付金利用で費用を抑えられる
キカガクの公式ページはこちら キカガクの口コミ・評価はこちら
Aidemy Premium
  • 完全オンラインで、時間や場所に縛られず学習したい
  • マンツーマン学習サポートにより実践に近い経験をしたい
  • 未経験から機械学習エンジニアになりたい
Aidemy Premiumの公式ページはこちら Aidemy Premiumの口コミ・評価はこちら
My Agile Privacy
This website uses technical and profiling cookies. Clicking on "Accept" authorises all profiling cookies. Clicking on "Refuse" or the X will refuse all profiling cookies. By clicking on "Customise" you can select which profiling cookies to activate.