Tkinter 基礎的な使い方

PythonのTkinterを使うことが多くなってきましたが，あまり良い情報がなかったので自分で作らせていただきました。
python関係にご興味のある方はどうぞ。
https://www.python.jp/
***
**１.初めに(自己紹介)**
暇なときにpythonコードを書いている中学生です。時々配布なんかもしています。
Youtubeもやっているのでぜひ見てください。[CY倫りんCH](https://www.youtube.com/channel/UCMYZZ-AZxzz6VMqk0yddHvw)
ホームページでpythonプログラムのソースコードの配布やexeファイルでの配布をしています。[CY倫りんCHホームページ](https://main58.webnode.jp/)
メモ帳やデジタル時計を配布しています。ぜひ入れてみてください。それらはtkinterを用いて書かれています。
***
**2.Tkinterとは？**
Pythonで[GUI](http://tsumari.zapto.org/detail.php?id=75)を組むことのできるpythonのツールキットのことです．
これによって，PythonスクリプトをGUI形式で実行することができます．
この下の文でウィンドウが作成できます。
```python
#!/usr/bin/env python
# -*- coding: utf8 -*-
import sys
import Tkinter

root = Tkinter.Tk()
root.mainloop()
```
![スクリーンショット](https://lh3.googleusercontent.com/LtR17AtB1oAcMaw1CyKTP0a1wqThgnuTAVUsUMAcnfb09TV4yEgCVNHjkr-q09p0Peu6PP1O02UyEB-A3VHNB8jt6rFX1-PTrf_tlNa0YT7g7JTOiaM2ESCP5v861E9i2Ot3-uF2taofIAOAPUBZzt9dDhE5d7X7foc2eOWX_bIKa2U1fwOy0BOR2uw0giI3PoDMVp6F58J3-17QkzvnhXXDriGhsJ60xKrCTE_A97-shM4btSFxmueIUtIl9f1c6gEzAmdswdw6Nr2KZymJgDSnX65CmlfTSHa-EC0XDXV6pwXGbwHS_tVKQrXcE1j4KmgIkLykgzKKVpuO4UlfhzgT2iZhU0N76jCRuPc6_s2sSUnQiieKijfmZtWT-rPT8f_OuQ5iRh1x7OHWoL7stRZXnx9wnRLOpLNSazRyFehzfxIRzpSflsgiN23rTTaL7dx0_-ghgttkcKOyjtXhbJArdsMcA9oA4_tT7aEUXtaxjkUL646oCLAPfqFVs-3aPzFCFr50e5LBb20983RCHKGMINzJCWY-JGvSGJ4ZDYbhrmNJ0ij83mI2Isqwn5bwaYpcZGQ4npft-gidQRctg93KE1GgxFAct_AQt3Xy6MzuyuA7PqOtfEzEBGd9OwNH1rFgc8UjT36kjtX51VSQvnWFe2HPozl-52R69GkTM1ii5qFVuSedTJ3pz1cA0l8ckZZ3S6_vOFtWV0xl2GLLLFJ7ZFpdKQTwSbeTPN5NISQdFRgXaMR9QB7oNbvVvo9mvlAJZpYShXiWtQxZaxEER-bAG6peLE4rPxRFfBrbFHZaX9Fc4YBgEPMOQoXMUSHbYv9aDcgHMO5qJ0piA4PQcVGVgHW4WyeCcOzu_M0pEXjEFnFoHXi161ep4w7JotQDM70xQCSGMq_IGEZ3lnI13PlrpVajx3Iw8tTbsIZXFfE0Mf5nGCX_ywm1xkHE8dq-cNp2zn28lR7dfkZxRNHEidwGUupTubXEQVIpRsMqw5SPoowyVOGv-iJ9GS56MrcuSPpmSol9au_sxKSeSKhVoBAOHzByepkWCgDgvxD1t8ScCxAwvwUdCn-ucRjd-xJs0-AaaadCmophNMivwkID1Ph5d7sjuYl3mg=s200-no?authuser=0)
***
**3.基礎**
pythonの文法は調べればたくさん出てくるので調べてみてください！
この記事では基礎中の基礎や多少の応用を説明します。
まずは基礎的な構文です。
```python
#!/usr/bin/env python
# -*- coding: utf8 -*-
import sys
import tkinter

root = tkinter.Tk()

root.geometry("500x600")
root.title("test")
root.mainloop()
```
最初の**root**は**tkinter.Tk()を入れた変数**です。別の名前にした場合はその変数の名前にしてください。

これを実行するとタイトルが**test**，**500px * 600px**のウインドウが表示されます。
`root.title("ウインドウ名")`でウィンドウのタイトルバーの表記を変更できます。


`root.geometry("横x縦")`でウィンドウのサイズが指定できます。
横の縦の間のバツは小文字のエックス(x)なので注意してください。

なお、これらの文は、
`root=tkinter.Tk()`
と
`root.mainloop()`
の中に記述して下さい。
***
**4.Tkinterで主にできること**
[こちらのページ](http://www.nct9.ne.jp/m_hiroi/light/pytk01.html)に詳しく書かれていますが、大まかに
* ラベル
* 1行入力ボックス
* ボタン
* チェックボックス
* リストボックス
* メニュー
* スクロールバー
* 図形描画(キャンバス)
* 大きなテキストボックス
などが有ります．
![スクリーンショット](https://lh3.googleusercontent.com/gOuOZpBwzauN4Ink4uXnXDqN4oOr3J-9FNivSq_VhW5bZ-xmQnhG1nzHAJQ6Ej5x5C7vgOV7RVhS4EBdqVOb0m71XCXtRKRRGxceYyXI0gRKBFbE2xm8to7nz_gm4XW-4RIYQVnq2_sJ81fwHZzxmFQlKS_kC8jpLl83TylD1657HJD8F1N6GK4_pbRNYeQALyLiDEck2jGvzK_61VFwTMirZ7zigbhyRtj42udm-JWCIjIx7TIFdJBalUrVWKoAh6OkqJvlv4Itu7bvujNc6tZhaB0zyYu7mcNZ6mwU1--CIbWnXzS6JJiYzR8zM6IbtFvf-Sm0xaAJynGG5PcEGFA1MdKiGl_3FkOD8cwq_4mxPlv9ndT3-yH1LgUICMPC_pJikAy6qUlt7uT64odoQoFaWFsfTU_K99k3pCfMf2EFJatlopfyHNo84VOUHUMKTDS-vvioOOLzBp5JXuC5HyOnt9eO4Jzq72KQ67NqPCpU3Enhk1oAhQlYVcVMGVVGRq-3587Ha748J2gAGXTh0wTCORQpoTNFJrmeTrHBmV0TXxOXbR3HHlKflEzpcmkz4wnp4pqs_2R3rMG_-7QoH_4HafNbqBjlQFPs9LyGmyLwG3hXZfBqLrGX8yrnHvH1Dt1AdfJZqp3sDdMtXy2vhDYtgyU5rJVXyw4Ye5PdmHUgSYCjz4Em3ikmudtpht7W8dSxacfSpnb3lOxLDtBQSJ5g6GOpuDslef4kBZ8zs6baFcnVWs7Rm9fr-8qPLb6gzqwykObs3XRhIfpf_TLUiuL3TwHoAoTZk_WYPpjlbeEVKIJ2YUgMagxZmOrh0Dj8bZRN8-vAucCwwLfML8EXtH0iQAwtGrp85HfBqKqAOwyQlpe_ESsGEKJsyiSkf11-YfMOZFBaJhLwNG3du_RUoSRXjzgKG_7BkdYZw-DQAJOp4lObgI_a4FPyzxtF38UkB4npyKqKlZJs6xU8_Rqfwnoi470Ww1jlbs6ritVPwXgmAt4gJUBMHsEbG2y0yNasZ33taUu8utjAu1GjgE7VQ4SMjBNXZTpVglT5-h6xBGof68ZZOvyNhm68Yayg9oxCnyOSB-CxMSgqchI8Axsfv3IpjK1-n-JYIw=w1270-h720-no?authuser=0)
これはメモ帳の画面です。僕が主に使ったのは、
* テキストボックス
* メニューバー
* ボタン
* Destroy
だったのでこの４つについて詳しく説明していきます。
***
**5.テキストボックス**
tkinterにはEntryとtextboxという二つの文字を入力できるウィジェットがあります。
今回はtextboxの方を説明していきたいと思います。
テキストボックスは以下の文を使います。
`self.textbox = tk.Text(root,bg="背景色",fg="文字色",height="表示する行")`
以下、サンプル
```python
#!/usr/bin/env python
# -*- coding: utf8 -*-
import sys
import tkinter

root = tkinter.Tk()

root.geometry("500x600")
root.title("test")
textbox = tkinter.Text(root,bg="white",fg="red",height=80)
textbox.pack()
root.mainloop()
```
![スクショ](https://lh3.googleusercontent.com/K96d2SKzgUwAGc6lWj-fgBqSsW4WLdyEyQDvFq7syaN52xBQhNVn8_Up1Mi1376u0lPEtOmyeBEau6KGgGDQJoUSAg1NezubMgl5J87DFxKHwARETuYtTmjgfM4nwvBOLN-d4Z8FiSlPacD0k4ZhvMoXL9OgXfEWcnwlBfqhIYKFI1C3lNmVD4qbxLZD5IdVV3RACOfCWObJ8fpM314DRU3shqK_2EYD4GdRlFxn8wzHbYAbdQQVN6jszE2bUW0qjEw4vNsocRAsIvWhXw8-Wfqp_hvcBvwOTaLweU7qLD74S866GQpU2l5t47wXQsfjwt6iFCtv8w4w75LfpCC9x70606gb5FaOfjV35T7n-XxJOe3_HkhSdWjxT9QdKcsxdgyJ7F_gk5QVqIuspBlim-KINy8nz6HPTfls90EoEE45mgQFHZ2tIX1ZMk_L0EBM_9LzUYCHTi79L6YwQBzBCzLS1marPiAwjfvMyEgLkkND3usHbSUAqsWsUVBRBSvIQV81VupWUCB8QUDnneRymNQ-OfGAdYz4Dcj06kqdyNCv1ED9AvWELeex1jUQof443W6eXa3vNtFwE4lvea6Vm7qRe0eUaveuWoZ4M31kQAN9G3WY2RcOmTKhK4y3derD_Tygwvi0ZE0u1OD-ktA_cO2cUNe2VVFX1M2ZTnaEmmYP1VQe0-TPsftZpK69srY1PxT1_-A-8TAneFJ2rrjWByrwLSylLzt3-gEyeaJWD2PV15j1sdzNwrNLIiYEq45dWIwxBXlJVd59SAnG6Flpw6AYf87zus8QNkR0496xaLMHL1NUrIzSiVPNUW_26_IgHcnyqZZcHi41mTHls5zjoerEesdcB3RyYuS6KtTelcoS9DHfnJummUKoL8U7b9v8e7hzpo-ZcFepDRoyBh8TwUoEZ4-CjKIujvYDJJAaCD_nQ2L-tHyZSIxlTLORDJAxpFXwbQdhjmRcTBhc4DajhWwPTv-d-Nr5ODYLCGcT5n1-C6bYq-PAo5v23afpCOPg1BPmoJ2K0nJjb6lY-ZTZG-UV7RHG_ETEWH7DeCMCI7shXRNX5ZerHl3drfH4igB4xoHoxS5Fy0Gdv_gvF3c4YEnramn67aDSJw=w500-h600-no?authuser=0)
`textbox = tkinter.Text(root,bg="white",fg="red",height=80)`
のtextboxは、そのテキストボックスのハンドルが格納されています。(すなわち、変数にハンドルを入れています。)
さらにtextbox.pack()で，そのハンドルをウインドウのウィジェットに表示します．
砕いて言うと，自動的に位置を揃えてウインドウ上に配置してくれます。

指定した場所に配置したい場合は、
`textbox.place(x=X座標,y=Y座標)`
のように`place(x=X座標,y=Y座標)`を使用してください。
`textbox.configure(font=(フォント,文字サイズ))`
でテキストボックス内のフォント,文字の大きさを設定できます。
詳しくは[Tk.Text の使い方](https://www.shido.info/py/tkinter12.html)をご確認ください。
***
**6.メニューバー**
メニューバーは以下の文を使います。
`MenuBar = tk.Menu()`
`MenuBar.add_cascade(label="好きな名前", menu=FileMenu)`
`tkinter.config(menu=men)`
`menubar = tkinter.Menu(root)`
`FileMenu = tk.Menu(tearoff=0)`
`FileMenu.add_command(label="好きな名前",command=実行する関数名)`

以下、サンプル

```python
#!/usr/bin/env python
# -*- coding: utf8 -*-
import sys
import tkinter
def test():
    print("hello")
root = tkinter.Tk()

root.geometry("500x600")
root.title("test")

    
MenuBar = tkinter.Menu()


menubar = tkinter.Menu(root)
root.config(menu=MenuBar) 

FileMenu = tkinter.Menu(tearoff=0)

FileMenu.add_command(label="TEST",command=test)

#メニューに親メニュー（ファイル）を作成する 
MenuBar.add_cascade(label="TEST", menu=FileMenu)

root.mainloop()

```
![スクショ](https://lh3.googleusercontent.com/E8_1FkSUAen-czriiZFNxjOa-lTtAdI1PiN7YVce3Zj7qcc9MhG-WT7XEwm0FC96fqZkQAexoSEO54raWn0i55HCVQVPCz_xvABbIsx4usHCBLkGMWZHIOdKfi2nNvs8EqPZZUMrVWSmS_1pW-zHUfcUD2FHJQtl_YSQ1sbzgMoyuKiAsCgZt61be0SJ1WTFS-YOolbl3BpjBEA8vngyMWNTFFaqmcMNJSYb-XwgI_0L9oxIvDb5drNwR2Vori7DkYZjXDDbJ35ys7wmzl34XCony7tnsfLRoA7k1Erwa3IEx3SFRVV6Xa2EZDQJkdFkZTSZ1a6vr9WNwMLCBTg3E7J7GtR75dW_3t0IxZEj-ujNkfZq8ZWP8Xk0ylOlXOECSolw1qFE5G37LlAbMa82RZAmCxA7kVr5mXgOH7lAPIDG3ChDQrSoH-XFZSv9m4-rBwqNrJ7xQ0myreEmUyGc07sO04HG7W4PpB-OI0oVu49vb1s6K7Gqyq9HF0_VvKOTY-tiIEKmT9bGY8bHBIca6hsV84T9-FeeimXIpZp9_ef6njpPwLsP-cwU47XKYwzdNHWji61KGpbdlew93L4gZG7t_Dxghj_Zog3cKBcuojN-RtC8ikELK-hiLpnhUkGWpfGd-G5tvoUYY-viBPpsrd5k6sRk3Dphe0TajPFMj_cBFACEp9WsYxU5cu6EQGmYD9wuR_0m7FkbfbT2uuBs7RM8FD3-MJSDNyZejvdMhrx-cRYnm0mKd2j8bal6z0EYy9ZS5N_LLjVYyThXS9wOHO1GTz4wahx_vb_4TghgfoG3pkPfc0ov-RxTWXU-JdKQUXtGtwRpPH7TCIkJ5NB9G0caynwplFLeWfyKk4pueoj7vTzRFSlgcNnCmUDLHbNY5W_ckhgpbXnbACSGjl0PzKD611R0x_Ntyc-F8ZmPvg_L-s3pwhRmgzxXUUU5lg8X0fnZJY78280Jkc4Wog9sOD_BctFizkklu3P-_bTcKKbrImIial0Zdk92Z8aRudA9pdH68kFdVJ4fRK3cbyXDAD-PFt-X2GzF2RiHd1kpMaFJSdRbTHJgigGk279xy2vzNG-eE97I_WO6mq0xMYDHi-QRmsiFpbMBWQ=w500-h600-no?authuser=0)
   メニューバーは「tkinter.Menu」で作成します。このメニューバーを画面に定義するのが「root.config(menu=Menuber)」です。
このメニュバーを使うには、関数を宣言する必要があります。関数は`def 関数名():`で作成できこの次の行に動作を入力します。

メニュー要素を追加するには「add_cascade」を使用します。

次に子要素を作成します。子要素とは「ファイル」がクリックされたときに表示されるメニューです。
先ほど作成した親要素の変数「FileMenu」に「add_command」を使って子要素を追加します。子要素の名前は「label」で定義します。
そして子要素がクリックされるときに、発生させるイベントは「commnd」で定義します。ここでは事前に定義した関数を呼び出しています。
***
**7.ボタン**
ボタンは**Button**で作成できます。
```python
#!/usr/bin/env python
# -*- coding: utf8 -*-
import sys
import tkinter


root = tkinter.Tk()
root.title("TEST")
root.geometry("400x300")

#ボタン
Button = tkinter.Button(text="ボタン")
Button.pack()

root.mainloop()
```
![ボタン](https://lh3.googleusercontent.com/4Qeiwx7caXEBpXk_Tp9NGFZRYEztlhrdGddP7H99GUvo3dtwcijWmCAqvZ0G7DTOiWB7q2phvY-W-UiR2Hr2d2l7W5cKExCCgSmVWJowUmkPsAPhRGqaOzAQzqdYABCV1K9p0H8UOP8LdNjeo1ryF73h3bdV3pU3VY9B4vTmCK3XfTZwBPLhfj0x7J7ARt9r4ySzD39w_L7IQMsfYUqalIhOU0o-JXtSXpTybYAxJ5FL2q4Tm7r-48n7eAkmCQjD4sSKXkK7JoZQVkCcAg7Qpb4bGoyRtJolUhvyxxpp07M9044xnWPoUFMDXDxG0AsVBOihLls1CRz9bxK9XIIwrxnjm_4BXgejXIXiQggo_7Z7W-gePx_0249ElyX5W6AzSVpNUfnmHSir2_1mTAA066I-pJe6u4176yMrlcQr6SS6KLSgJnSmoNAyyECyhMU-eShudqeC4lcsI7Rs4EQ9XXS-IkB2kJ13iG6EpCV5k3nSiDwRcZAONubo2FZsVYxsYQ3wjmI8myfUCyYHV7eTEuF3ihlFFQSzpA16PIe5jyQBzOHYUTatdJ0-kVNmNoMdZZNXCT0c4RnBrahy2jaH4DoquZNJjYneARx11cMqn-2Rdcs95IvMabk_vxu-GBBF-ytKcbki_E1pcvnGN7ZWinbS0-R2UrVKVUhbJjnISfgZyn0-ZSJNIU7gPbp0QtWq3FSQs8w3gJRP6zE43PZSFEhfL-Ka_GtNT3taTj4X-bRVctgIc3yF12Y8H1wKSLmmXLfwsDxh5tsXHJPuVQmLWrs4U3A1ktcdGS-DxJpiL28OF2iZnkFTjj466UZ59FvIhzEnGmgqlOwtbhWaknHrYMyRcR6RpLEHIrvW3C31hCjk0JjhwNRN8Bn4iSfmZ3kINC53g28ElqrYV60yQdOKgL0W9hJdZf3Y1KPg0OEvbmQownai6Wo0Rwx65Wh9yqpAcoxqbT43dne-wQlW4wwzUvpXLKY6EPJVsgQapBAu4tCkV5iUO_Lgz9ux-YOZYBRITwdmnKOCX84gVulhw_vvel2J_io3fpJAQCwYPNYVSH7_02sbxLP2fpwBHLP5sAb6An9LCkmzb6XxnI3H2AYdUKbD1nVgeLMzkQ=w328-h246-no?authuser=0)
`.tkinter.Button(text=u'ボタンに表示する文字')`
***
**幅を指定する。**
`with=希望する幅`で指定できます。
```python
#!/usr/bin/env python
# -*- coding: utf8 -*-
import sys
import tkinter


root = tkinter.Tk()
root.title(u"TEST")
root.geometry("400x300")

#ボタン
Button = tkinter.Button(text="ボタン",width=39)
Button.pack()

root.mainloop()
```
![ボタン](https://lh3.googleusercontent.com/kTn-io6nK0bbQ4AvllsXzgIsHCmlwY8sGP7Yh5vQruoS19vzM6u8yAwauuDsCRZEzqEyoCB7AR-1Fe8ajfd0GSDIShEsmardIwCTxXhFTv_9X3vBIeEoWv7yNhrMIIJjPBi-Zmlx2HvS0TPNA51b0T8TxGpPEqbvKASKh2B5UXjd6BND9ByrBZJaengvGvAXi_FfA_nOX4jYh-gSXvqNy3DRnUOIKsUZUqvxwUMDpRzQ93qvDEiCfslUwMIvxkyvvXx14rZcsM19g61BH63608-W17Q1-pDa0wW2BnxU4igYd0cKA34sfNfWWJFAGUuuE_dPW8NKkjs39r1819svlCkaDQSiKUraa4EaMCDyhJm0f9lwl5tk0D-e7kdMQ3m2snPDm4KEiz5fC3SYJYEvZ8FUREps2TrR9Mdrwr9Wv3dQHQc1J0sQz4bbXbKcrQh0FyyF0sBoRPwZHWzE29TvH7BVURE1GY7_zQ5BdsxntZlhStLvNuewmH0SOhEdblBZoGEsB2Vib8TVLPPvBviSFpDqZ8bIW8C7Sodc-kYNQ4G7wekmLMM-azgRJgqw2ldaQ3ZRWXcwKGCwp5pR6XxqFkARSuHexhT4KTVdJPllNDUkoq305sw4SaE2ugHPEX4UGSc29rUch4u1KiOih6crkQKqC5zMmX7u8tFVBc9f2VMQa-vrKGxEcjjRI1TQlvo2NwXZIQmwM30fbb0RTuFr-atOO1JqKgMb1m8x2wDBBRNu4f5JsV0YsSs7BR7SON-vFY-0u0xHmQ1kN3jSdU46u1VEs-6hhF8Xah67u_oAdmPZM88JasvFwqNE6j7I0-C5iT2Ta8hKfDZb3Y3e0E72AhDqCcgMQtvUwUTj9WTOvbkuf-yyWgqPM7XwkboJEUmCXRtrSziOx1XnpeEQTqSI88Yfk9fA33ZrbTZA4nmInOoCU77PoNYymhElU1DMaU66rdwszFgnBSC_ixK9NcRPi9cil3lP20aLx8wxXJrTjT1ee2njH-uAMfYP8LJxw_pJjTmwO_Zjv3w4NuXkdQJ39CIIWa8VS8ssrWAKC5ELBZDv5pdRdDJclgNrSWXmUAwcfy3jFNxM4pyJD71HPurqy6G32jj4s0W9QA=w400-h300-no?authuser=0)
**ボタンを押すと関数を実行する。**
ボタンは基本，関数（def:）にアクションを組んでいきます．
ボタンを押すとhelloとターミナルに表示されるプログラムを作ってみます。
```python
#!/usr/bin/env python
# -*- coding: utf8 -*-
import sys
import tkinter

def test():
    print("hello")
root = tkinter.Tk()
root.title(u"TEST")
root.geometry("400x300")

#ボタン
Button = tkinter.Button(text="ボタン",width=39,command=test)
Button.pack()

root.mainloop()
```
![ボタン](https://lh3.googleusercontent.com/kTn-io6nK0bbQ4AvllsXzgIsHCmlwY8sGP7Yh5vQruoS19vzM6u8yAwauuDsCRZEzqEyoCB7AR-1Fe8ajfd0GSDIShEsmardIwCTxXhFTv_9X3vBIeEoWv7yNhrMIIJjPBi-Zmlx2HvS0TPNA51b0T8TxGpPEqbvKASKh2B5UXjd6BND9ByrBZJaengvGvAXi_FfA_nOX4jYh-gSXvqNy3DRnUOIKsUZUqvxwUMDpRzQ93qvDEiCfslUwMIvxkyvvXx14rZcsM19g61BH63608-W17Q1-pDa0wW2BnxU4igYd0cKA34sfNfWWJFAGUuuE_dPW8NKkjs39r1819svlCkaDQSiKUraa4EaMCDyhJm0f9lwl5tk0D-e7kdMQ3m2snPDm4KEiz5fC3SYJYEvZ8FUREps2TrR9Mdrwr9Wv3dQHQc1J0sQz4bbXbKcrQh0FyyF0sBoRPwZHWzE29TvH7BVURE1GY7_zQ5BdsxntZlhStLvNuewmH0SOhEdblBZoGEsB2Vib8TVLPPvBviSFpDqZ8bIW8C7Sodc-kYNQ4G7wekmLMM-azgRJgqw2ldaQ3ZRWXcwKGCwp5pR6XxqFkARSuHexhT4KTVdJPllNDUkoq305sw4SaE2ugHPEX4UGSc29rUch4u1KiOih6crkQKqC5zMmX7u8tFVBc9f2VMQa-vrKGxEcjjRI1TQlvo2NwXZIQmwM30fbb0RTuFr-atOO1JqKgMb1m8x2wDBBRNu4f5JsV0YsSs7BR7SON-vFY-0u0xHmQ1kN3jSdU46u1VEs-6hhF8Xah67u_oAdmPZM88JasvFwqNE6j7I0-C5iT2Ta8hKfDZb3Y3e0E72AhDqCcgMQtvUwUTj9WTOvbkuf-yyWgqPM7XwkboJEUmCXRtrSziOx1XnpeEQTqSI88Yfk9fA33ZrbTZA4nmInOoCU77PoNYymhElU1DMaU66rdwszFgnBSC_ixK9NcRPi9cil3lP20aLx8wxXJrTjT1ee2njH-uAMfYP8LJxw_pJjTmwO_Zjv3w4NuXkdQJ39CIIWa8VS8ssrWAKC5ELBZDv5pdRdDJclgNrSWXmUAwcfy3jFNxM4pyJD71HPurqy6G32jj4s0W9QA=w400-h300-no?authuser=0)

```command=関数名```でボタンを押した後の動作を指定できます。
そのほかのボタンの機能の[詳細ページ](https://office54.net/python/tkinter/python-tkinter-button)
**8.destroy()**
アプリのUIを消すには destroy() を用います。
以下、サンプル
```python
#!/usr/bin/env python
# -*- coding: utf8 -*-
import sys
import tkinter

def test():
    Button.destroy()
root = tkinter.Tk()
root.title(u"TEST")
root.geometry("400x300")

#ボタン
Button = tkinter.Button(text="ボタン",width=39,command=test)
Button.pack()

root.mainloop()
```
このプログラムでは**ボタン**というタイトルのボタンを押すとそのボタンが消えるというプログラムです。
destroy()は`ウィジェットを入れた変数.destroy()`の構文です。ラベルや、ボタン、テキストボックス、エントリーなど
たくさんのウィジェットを消せます。[詳細](https://ossa2019.stars.ne.jp/Remember/tkinter/tk11.html)
***
**9.最後に**
この記事を読んでくださり、ありがとうございました。
最後に僕が作ったメモ帳のサンプルコードを配布しておきます。
意味不明な書き方をしている文がありますが、ご了承ください。
**pythonは3.6.8**で動作可能です。
たくさんのpipインストールも必要なので注意してください。
```python
#!/usr/bin/env python
# -*- coding: utf8 -*-
 
from email import message
import tkinter as tk
import tkinter.filedialog as filedialog
from unittest import result
import chardet
import tkinter.ttk as ttk
from tkinter import messagebox
import datetime
import pyperclip
import tkinter.font as font
import winsound
import os
import collections
import webbrowser
import sys
import pyperclip

#ver3.6.8動作可能
from fabric.colors import red, green, yellow, blue, magenta, cyan, white

#各イベントの設定
class Utils():
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("メモ帳")
        self.root.geometry("1270x720")
        self.color = "gray13"
        self.textcolor = "white"
        self.result = ""
        self.size = 15
        self.text2 = "none"
        self.count1 = 0
        self.none = "none"
        self.filename = "none"
        self.root.bind("<Control-s>",self.onSaveskey)
        self.root.bind("<Alt-s>",self.onSave2)
        self.root.bind("<Control-o>",self.onOpen2)
        self.root.bind("<Control-t>",self.time2)
        self.root.bind("<Control-b>",self.big2)
        self.root.bind("<Control-m>",self.small2)
        self.root.bind("<Control-d>",self.default)
        self.root.bind("<Control-f>",self.sub_window1)
        self.root.bind("<Control-n>",self.new1)
    
        self.font = "MS ゴシック"
        self.s = "sotugyou-11.19\sotugyou-10 (1).15\卒業制作 (1)\maintest.txt"
        self.fonttest = font.Font
        self.url = "https://sites.google.com/view/memotyo/"
        self.url1 = "https://youtu.be/W_5R7GUPthc"
        self.url2 = "https://www.youtube.com/channel/UCMYZZ-AZxzz6VMqk0yddHvw"
        
        #tk.iconbitmap
        #self.c = collections.Counter(self.str)
        #font = tkinter.StringVar(root)
        print(self.fonttest)
        
        #メニューバーの設定(ファイル)
        menubar = tk.Menu(self.root)                                  
        FileMenu = tk.Menu(tearoff=0)
        FileMenu.add_command(label="新規(Ctrl+N)",command=self.new)
        FileMenu.add_command(label="開く(Ctrl+O)",command=self.onOpen)
        FileMenu.add_command(label="名前を付けて保存(Alt+S)",command=self.onSave)
        FileMenu.add_command(label="保存(Ctrl+S)",command=self.onSaves)
        FileMenu.add_separator()
        FileMenu.add_command(label="終了",command=self.onExit)
        #メニューバーの設定(編集)
        helpmenu = tk.Menu(menubar, tearoff=0,)
        helpmenu.add_command(label='現在時刻を入力(Ctrl+T)', command=self.time)
        helpmenu.add_command(label='検索する(ファイル開くと使用可能)(Ctrol+F)', command=self.sub_window)
        helpmenu.add_command(label='全て選択(Ctrol+A)', command=self.selct_all)
        helpmenu.add_command(label='コピー(Ctrol+C)', command=self.copy)
        helpmenu.add_command(label='貼り付け(Ctrol+V)', command=self.paste)
        helpmenu.add_command(label='切り取り(Ctrol+X)', command=self.cut)

        
        #メニューバーの設定(表示)
        show = tk.Menu(menubar, tearoff=0)
        show.add_command(label='White', command=self.white)
        show.add_command(label='Black', command=self.black)
        show.add_command(label='good eyes1', command=self.goodeyes1)
        show.add_command(label='good eyes2', command=self.goodeyes2)
        show.add_separator()
        show.add_command(label='入力した文字をターミナルに出力', command=self.test)
        show.add_separator()
        show.add_command(label='文字サイズ拡大(Ctrol+b)', command=self.big)
        show.add_command(label='文字サイズデフォルト(Ctrol+d) ', command=self.default2)
        show.add_command(label='文字サイズ縮小(Ctrol+m)', command=self.small)

        show5 = tk.Menu(self.root,tearoff=0)
        show5.add_command(label='MS ゴシック', command=self.font1)
        show5.add_command(label='Arial', command=self.font2)
        show5.add_command(label='游ゴシック', command=self.font3)
        show5.add_command(label='HGP創英ﾌﾟﾚｾﾞﾝｽ', command=self.font4)
        show5.add_command(label='HGP創英角ﾎﾟｯﾌﾟ', command=self.font5)
        show5.add_command(label='デジタル 教科書体', command=self.font6)
        show5.add_command(label='HG行書体', command=self.font7)
        show5.add_command(label='HGS教科書体', command=self.font8)
        show5.add_separator()
        show5.add_command(label='その他', command=self.fonts)

        show6 = tk.Menu(menubar,tearoff=0)

        show6.add_command(label='appをダウンロード', command=self.down)
        show6.add_command(label='説明動画', command=self.movie)
        show6.add_command(label='作成者チャンネル', command=self.cych)
        #BGM = tk.Menu(self.root,tearoff=0)
        #BGM.add_command(label="2:23AM",command=self.bgm1)

        edit = tk.Menu()
        MenuBar = tk.Menu()
        #ウィンドウに表示                                                      
        MenuBar.add_cascade(label="ファイル", menu=FileMenu)
        MenuBar.add_cascade(label="編集", menu=helpmenu)
        MenuBar.add_cascade(label="表示", menu=show)
        MenuBar.add_cascade(label="フォント", menu=show5)
        MenuBar.add_cascade(label="その他", menu=show6)
        #MenuBar.add_cascade(label="BGM",menu=BGM)
        self.root.config(menu=MenuBar)
    
    def text(self):
        
        #wpap=tk.NONEで、折り返しをオフにできる。
        self.textbox = tk.Text(self.root,wrap = tk.NONE,bg=self.color ,fg=self.textcolor,font=50,height=80)
        self.textbox.configure(font=(self.font,self.size))
        self.yscroll = tk.Scrollbar(self.root, orient=tk.VERTICAL, command=self.textbox.yview)
        self.yscroll.pack(side=tk.RIGHT, fill="y")
        self.xscroll = tk.Scrollbar(self.root, orient=tk.HORIZONTAL, command=self.textbox.xview)
        self.xscroll.pack(side=tk.BOTTOM, fill="x")
        self.textbox["yscrollcommand"] = self.yscroll.set
        self.textbox["xscrollcommand"] = self.xscroll.set
        self.textbox.pack(fill=tk.BOTH)
         #フォーカスの設定
        self.textbox.focus_set()
        self.none = self.textbox.get("1.0","end")


                                
    
    def onOpen(self):
        #「開く」イベント
        dialog = filedialog.askopenfilename(filetypes=[("All Files","*.*")])
        if len(dialog) != 0:
            #文字コードを自動識別して読み取るコード
            FILENAME = dialog 
            
            self.filename = FILENAME
            tmp = open(FILENAME,"rb")
            encode = chardet.detect(tmp.read())["encoding"]
            tmp.close()
            file = open(FILENAME,"r",encoding=encode,errors="ignore") 
            text = file.read()
            file.close()
            print(dialog)
            #一度文字を全て削除してから挿入する
            self.textbox.delete("1.0",tk.END)
            self.textbox.insert("1.0",text)
            self.text2 = self.textbox.get("1.0","end")
            
            

    def onOpen2(self,event):
        #「開く」イベント
        dialog = filedialog.askopenfilename(filetypes=[("All Files","*.*")])
        self.s = os.path.abspath(os.curdir)
        print(self.s)
        if len(dialog) != 0:
            #文字コードを自動識別して読み取るコード
            self.FILENAME = dialog 
            print(self.FILENAME)
            self.filename = self.FILENAME
            tmp = open(self.FILENAME,"rb")
            encode = chardet.detect(tmp.read())["encoding"]
            tmp.close()
            file = open(self.FILENAME,"r",encoding=encode,errors="ignore") 
            text = file.read()
            file.close()
            #一度文字を全て削除してから挿入する
            self.textbox.delete("1.0",tk.END)
            self.textbox.insert("1.0",text)
            self.text2 = self.textbox.get("1.0","end")
            
    def onSave(self):
        #「保存」するイベント
        dialog = filedialog.asksaveasfilename(filetypes=[("All Files","*.*")])
        defaultextension = "txt"
        if len(dialog) != 0:
            file = open(dialog,"w",encoding="UTF-8",errors="ignore")
            file.write(self.textbox.get("1.0",tk.END))
            self.text2 = self.textbox.get("1.0","end")
            self.none = self.textbox.get("1.0","end")
            file.close()
            

             
    def onSaves(self):
        self.text2 = self.textbox.get("1.0","end")
        defaultextension = "txt"
        print(self.filename)
        print(type(self.filename))
        if self.filename == "none":
            self.onSave()

        else:
            file = open(self.filename,"w",encoding="UTF-8",errors="ignore")
            file.write(self.textbox.get("1.0",tk.END))
            file.close()
            
        

    def onSaveskey(self,event):
        self.text2 = self.textbox.get("1.0","end")
        defaultextension = "txt"
        print(self.filename)
        print(type(self.filename))
        if self.filename == "none":
            self.onSave()

        else:
            file = open(self.filename,"w",encoding="UTF-8",errors="ignore")
            file.write(self.textbox.get("1.0",tk.END))
            file.close()

           

            
        #「保存」するイベント
    def onSave2(self,event):
        
        #「保存」するイベント
        dialog = filedialog.asksaveasfilename(filetypes=[("All Files","*.*")])
        defaultextension = "txt"
        if len(dialog) != 0:
            file = open(dialog,"w",encoding="UTF-8",errors="ignore")
            file.write(self.textbox.get("1.0",tk.END))
            self.text2 = self.textbox.get("1.0","end")
            self.none = self.textbox.get("1.0","end")
            file.close()
            

    def onSave3(self):
        defaultextension = "txt"
        print(self.filename)
        print(type(self.filename))
        if self.filename == "none":
            self.onSave()

        else:
            file = open(self.filename,"w",encoding="UTF-8",errors="ignore")
            file.write(self.textbox.get("1.0",tk.END))
            file.close()
            self.root.destroy()
            
    

        

    def onExit(self):
        #self.text2 = self.textbox.get("1.0","end")
        if self.textbox.get("1.0","end") == self.none:
            
            
            ret=messagebox.askyesnocancel('メモ帳','名前を付けて保存しますか？')
            if ret == True:
                self.onSave()
            if ret == False:
                self.root.destroy()

           
        else:
            if self.textbox.get("1.0","end") == self.text2:
                self.root.destroy()
            else:
                ret2=messagebox.askyesnocancel('メモ帳','上書き保存または名前を付けて保存をしますか？')
                if ret2 == True:
                    self.onSave3()
                
                if ret2 == False:
                    self.root.destroy()
            

        #「終了」するイベントaskyesnocancel
        
        

    def test(self):
        self.result=self.textbox.get("1.0","end")
        print(self.result)

    def time(self):
        now=datetime.datetime.now()
        time2=format(now,'%Y/%m/%d/%H:%M:%S')
        print(now)
        print(time2)
        self.textbox.insert(tk.END,time2)
        
    def time2(self,event):
        now=datetime.datetime.now()
        time2=format(now,'%Y/%m/%d/%H:%M:%S')
        print(now)
        print(time2)
        self.textbox.insert(tk.END,time2)

    def selct_all(self, event=None):
        self.textbox.tag_add(tk.SEL, '1.0', tk.END+'-1c')
        self.textbox.mark_set(tk.INSERT, '1.0')
        self.textbox.see(tk.INSERT)

    def copy(self, event=None):
        if self.textbox.tag_ranges(tk.SEL): 
            text5 = self.textbox.get(tk.SEL_FIRST, tk.SEL_LAST)  
            self.root.clipboard_clear()              
            self.root.clipboard_append(text5)


    def paste(self, event=None):
        text5 = self.root.selection_get(selection='CLIPBOARD')
        if text5:
            self.textbox.insert(tk.INSERT, text5)
            self.textbox.tag_remove(tk.SEL, '1.0', tk.END) 
            self.textbox.see(tk.INSERT)

        

    def cut(self, event=None):
        if self.textbox.tag_ranges(tk.SEL):
            self.copy()
            self.textbox.delete(tk.SEL_FIRST, tk.SEL_LAST)
    
    
    
    

    def black(self):
        self.color = "gray13"
        self.textcolor = "white"
        texttest = self.textbox.get("1.0","end")
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()
        self.test()
        self.textbox.insert(tk.END,texttest)
        
        
   
    
    def white(self):
        self.color = "gray97"
        self.textcolor = "gray5"
        texttest = self.textbox.get("1.0","end")
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()
        self.test()
        self.textbox.insert(tk.END,texttest)

        #self.textbox.insert(tk.END,self.result)

    def goodeyes1(self):
        self.color = "#3CB371"
        self.textcolor = "gray5"
        texttest = self.textbox.get("1.0","end")
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()
        self.test()
        self.textbox.insert(tk.END,texttest)

        #self.textbox.insert("1.0",self.result)

    def goodeyes2(self):
        print(self.filename)
        self.color = "#79CF9F"
        self.textcolor = "gray5"
        texttest = self.textbox.get("1.0","end")
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()
        self.test()
        self.textbox.insert(tk.END,texttest)

        #self.textbox.insert("1.0",self.result)
    def big(self):
        self.size = self.size + 5
        texttest = self.textbox.get("1.0","end")
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()
        self.textbox.insert(tk.END,texttest)

    
    def default(self,event):
        self.size = 15
        texttest = self.textbox.get("1.0","end")
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()
        self.textbox.insert(tk.END,texttest)


    def default2(self)   :
        self.size = 15
        texttest = self.textbox.get("1.0","end")
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()
        self.textbox.insert(tk.END,texttest)


    def big2(self,event):
        self.size = self.size + 5
        texttest = self.textbox.get("1.0","end")
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()
        self.textbox.insert(tk.END,texttest)

        


    def small(self):
        self.size = self.size - 2
        texttest = self.textbox.get("1.0","end")
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()
        self.textbox.insert(tk.END,texttest)

    def small2(self,event):
        self.size = self.size - 2
        texttest = self.textbox.get("1.0","end")
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()
        self.textbox.insert(tk.END,texttest)

        
    def font1(self):
        self.font = "MS ゴシック"
        texttest = self.textbox.get("1.0","end")
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()
        print(self.font)
        self.textbox.insert(tk.END,texttest)


    def font2(self):
        self.font = "Arial"
        texttest = self.textbox.get("1.0","end")
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()
        print(self.font)
        self.textbox.insert(tk.END,texttest)


    def font3(self):
        self.font= "@游ゴシック"
        texttest = self.textbox.get("1.0","end")
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()
        print(self.font)
        self.textbox.insert(tk.END,texttest)


    def font4(self):
        self.font = "HGP創英ﾌﾟﾚｾﾞﾝｽEB"
        texttest = self.textbox.get("1.0","end")
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()
        print(self.font)
        self.textbox.insert(tk.END,texttest)

    
    
    def font5(self):
        self.font = "HGP創英角ﾎﾟｯﾌﾟ体"
        texttest = self.textbox.get("1.0","end")
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()
        self.textbox.insert(tk.END,texttest)

        

    def font6(self):
        self.font = "UD デジタル 教科書体 NK-B"
        texttest = self.textbox.get("1.0","end")
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()
        self.textbox.insert(tk.END,texttest)

        

    def font7(self):
        self.font = "HG行書体"
        texttest = self.textbox.get("1.0","end")
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()
        self.textbox.insert(tk.END,texttest)

       

    def font8(self):
        self.font = "HGS教科書体"
        texttest = self.textbox.get("1.0","end")
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()
        self.textbox.insert(tk.END,texttest)
     

    def fonts(self):
        sub_win = tk.Toplevel()
        sub_win.geometry("500x100")
        texttest = self.textbox.get("1.0","end")
        
#項目選択時に実行する関数
        def show_selected(event):
            n = Listbox.curselection()
            #self.font = l
            self.font =Listbox.get(n)     #選択項目のindex取得
            self.textbox.destroy()
            self.xscroll.destroy()
            self.yscroll.destroy()
            self.text()      #indexを用いて値を取得し、varにセット
            print(self.font)
            self.textbox.insert(tk.END,texttest)

        #選択した値を格納する変数
        self.l = tk.StringVar(sub_win)
        fonts = (font.families())

        lists = tk.StringVar(value=fonts)
        frame = tk.Frame(sub_win)
        Listbox = tk.Listbox(frame, listvariable=lists, height=4)
        # print(type(lists[0]))
        #表示用ラベル
        l = tk.Label(
            sub_win,
            textvariable=self.font,   #選択した値
            width=15,
            )
        l.pack()

        frame.pack(padx=100,pady=10)
        scrollbar = tk.Scrollbar(frame, orient=tk.VERTICAL, command=Listbox.yview)


        # スクロールバーをListboxに反映
        Listbox["yscrollcommand"] = scrollbar.set

        #Listboxの生成
        Listbox = tk.Listbox(frame, listvariable=lists, height=4)   #値をセット

        #項目選択時にshow_selectedを実行
        Listbox.bind(
            "<<ListboxSelect>>",
            show_selected,
            )

        
        Listbox.grid(row=0, column=0)
        scrollbar.grid(row=0, column=1, sticky=(tk.N, tk.S))
        
       
        # 各種ウィジェットの設置

    def down(self):
        webbrowser.open(self.url, new=0, autoraise=True)

    def movie(self):
        webbrowser.open(self.url1, new=0, autoraise=True)

    def cych(self):
        webbrowser.open(self.url2, new=0, autoraise=True)



    def new(self):
        ret=messagebox.askyesnocancel('メモ帳','名前を付けて保存しますか？')
        if ret == True:
            self.onSave()
        #「終了」するイベントaskyesnocancel
        else:
            pass
        
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()

    def new1(self,event):
        ret=messagebox.askyesnocancel('メモ帳','名前を付けて保存しますか？')
        if ret == True:
            self.onSave()
        #「終了」するイベントaskyesnocancel
        else:
            pass
        
        self.textbox.destroy()
        self.xscroll.destroy()
        self.yscroll.destroy()
        self.text()


        
        





    def sub_window1(self,event):
        self.sub_win1 = tk.Toplevel()
        self.e = tk.Entry(self.sub_win1)
        self.e.pack()
        #Button
        b = tk.Button(self.sub_win1,text="検索！！",command=self.show_entry,)
        b.pack()

    def sub_window(self):
        self.sub_win1 = tk.Toplevel()
        self.e = tk.Entry(self.sub_win1)
        self.e.pack()
        #Button
        b = tk.Button(self.sub_win1,text="検索！！",command=self.show_entry,)
        b.pack()


    def show_entry(self):
        #self.f = self.textbox.get()
        #print(self.f.count(self.e.get))
        #print(self.textbox.get("1.0","end"))
        print("検索した文字["+self.e.get()+"]")  #Entryの入力値を取得して出力    
        f = open(self.filename, "r",encoding="utf-8")
        schedules = f.readlines()
        f.close
        for schedule in schedules:
            schedule_strip = schedule.strip()
            if  self.e.get() in schedule_strip:
                print(yellow(schedule_strip)+"[指定した文字]")
                
        else:
            print("文字が発見されました。")
            print(blue("すべての行↓"))
            print("["+red(self.textbox.get("end"))+"]")
#Entry
    

    def test1 (self):
        print(self.s)  
        
        
       


    

        #btnRead.pack()
    def tkinter(self):
        self.text()
        print(self.color)
        self.root.mainloop()

def main():
    utils=Utils()
    utils.tkinter()

# main関数の実行
if __name__ == "__main__":
    main()
```