連載8:pythonで利用者情報入力を作る

最終掲載です!
今までの連載を合わせて、最終型を作ります
長くなりますがよろしくお願いします

  1. # -*- coding: utf-8 -*-
  2. # dbname = kihon.db
  3. # table = uesr
  4. # id = entry1
  5. # na1 (姓) = entry2
  6. # na2 (名) = entry3
  7. # na3 (セイ) = entry4
  8. # ne4 (メイ) = entry5
  9. # ci (市町村) = box1
  10. # se1 (西暦年) = box2
  11. # se2 (月) = box3
  12. # se3 (日) = box4
  13. # si (支給量) = entry8
  14. # kou (工賃単価) = entry9
  15. # schema [id:int],[姓],[名],[セイ],[メイ],[市町村],[契約日],[支給量:int],[工賃:int]
  16. import tkinter as tk
  17. import tkinter.ttk as ttk
  18. import sqlite3
  19. import tkinter.messagebox as msg
  20. # 空のデータベース、テーブルを作成し接続
  21. dbname = “kihon.db”
  22. c = sqlite3.connect(dbname)
  23. def select_bottun():
  24. entry1.delete(0,tk.END)
  25. entry2.delete(0,tk.END)
  26. entry3.delete(0,tk.END)
  27. entry4.delete(0,tk.END)
  28. entry5.delete(0,tk.END)
  29. box1.delete(0,tk.END)
  30. box2.delete(0,tk.END)
  31. box3.delete(0,tk.END)
  32. box4.delete(0,tk.END)
  33. entry8.delete(0,tk.END)
  34. entry9.delete(0,tk.END)
  35. entry14.delete(0,tk.END)
  36. entry18.delete(0,tk.END)
  37. entry19.delete(0,tk.END)
  38. entry20.delete(0,tk.END)
  39. create_sql
  40. def quit_button():
  41. root.destroy()
  42. def create_sql():
  43. c = sqlite3.connect(“aozora.db”)
  44. na1 = entry2.get()
  45. na2 = entry3.get()
  46. na3 = entry4.get()
  47. na4 = entry5.get()
  48. ci = box1.get()
  49. se1 = box2.get()
  50. se2 = box3.get()
  51. se3 = box4.get()
  52. si = entry8.get()
  53. kou = entry9.get()
  54. se4 = (se1+se2+se3)
  55. print (na1+na2+na3+na4+ci+se4+si+kou)
  56. try:
  57. user = “””
  58. CREARE TABLE user
  59. (
  60. na1 TEXT NOT NULL,
  61. na2 TEXT NOT NULL,
  62. na3 TEXT NOT NULL,
  63. na4 TEXT NOT NULL,
  64. ci TEXT NOT NULL,
  65. se1 TEXT NOT NULL,
  66. se2 TEXT NOT NULL,
  67. se3 TEXT NOT NULL,
  68. si INT NOT NULL,
  69. kou INT NOT NULL
  70. )
  71. “””
  72. c.execute(user)
  73. c.execute(“COMMIT”)
  74. except:
  75. pass
  76. try:
  77. c.execute(“””
  78. INSERT INTO
  79. user(姓,名,セイ,メイ,市町村,契約日,支給量,工賃単価)
  80. VALUES(‘{}’,'{}’,'{}’,'{}’,'{}’,'{}’,{},{});”””.format(na1,na2,na3,na4,ci,se4,si,kou))
  81. c.execute(“COMMIT;”)
  82. text=(“一件登録されました!”)
  83. tk.messagebox.showinfo(“info”,text)
  84. except:
  85. text=(“エラーにより登録できませんでした”)
  86. tk.messagebox.showinfo(“info”,text)
  87. #————————————————————————————————————
  88. # “”” リストボックスの選択を読み取る関数,その結果を入力ウィジェットに入れる”””
  89. #————————————————————————————————————
  90. def get_list(nanikanyuuryoku):
  91. cur = c.cursor()
  92. index = mylist.curselection()[0]
  93. user_id2 = (user_id[index], )
  94. cur.execute(‘select * from user where id = ?’, user_id2)
  95. user_id3 = cur.fetchone()
  96. entry1.delete(0,50)
  97. entry1.insert(0, user_id3[0])
  98. entry2.delete(0,50)
  99. entry2.insert(0, user_id3[1])
  100. entry3.delete(0,50)
  101. entry3.insert(0, user_id3[2])
  102. entry4.delete(0,50)
  103. entry4.insert(0, user_id3[3])
  104. entry5.delete(0,50)
  105. entry5.insert(0, user_id3[4])
  106. entry14.delete(0,50)
  107. entry14.insert(0, user_id3[5])
  108. entry18.delete(0,50)
  109. entry18.insert(0, user_id3[6][0:4])
  110. entry19.delete(0,50)
  111. entry19.insert(0, user_id3[6][4:6])
  112. entry20.delete(0,50)
  113. entry20.insert(0, user_id3[6][6:8])
  114. entry8.delete(0,50)
  115. entry8.insert(0, user_id3[7])
  116. entry9.delete(0,50)
  117. entry9.insert(0, user_id3[8])
  118. root = tk.Tk()
  119. root.resizable(0,0)
  120. root.title(“あおぞら業務入力支援”)
  121. root.geometry(“640×640”)
  122. status = tk.Label(root, text=“from : zono屋・・・ ”,borderwidth=2,relief=“ridge”)
  123. status.pack(side=tk.BOTTOM, fill=tk.X)
  124. # 1th < scrollbar > cd
  125. frame1 = tk.LabelFrame(root,bd=1,relief=“sunken”,text=” name “,height=600,foreground=“purple”)
  126. frame1.pack(side=“left”,anchor=“nw”,fill=“x”,padx=8,pady=2)
  127. scrollbar = tk.Scrollbar(frame1,bd=5,relief=“sunken”)
  128. scrollbar.pack(side=“right”,fill=“y”)
  129. # 2th ” menu ” < 利用者ID > 
  130. frame2 = tk.LabelFrame(root,bd=1,relief=“sunken”,text=” manu “,width=600,height=100,foreground=“purple”)
  131. frame2.pack(side=“top”,anchor=“n”,fill=“x”,ipady=5,padx=2)
  132. label1 = tk.Label(frame2,text=“利用者 ID”,width=10,height=2,bd=1,relief=“sunken”,bg=“ghost white”)
  133. label1.grid(row=1,column=1,padx=2,pady=2)
  134. entry1 = tk.Entry(frame2,text=“”,width=15,bg=“light grey”)
  135. entry1.grid(row=1,column=2,padx=2,ipady=5)
  136. # 3th ” start date of use ” < 西暦年 > < 月 > < 日 >
  137. frame3 = tk.LabelFrame(root,bd=1,relief=“sunken”,text=” start date of use “,width=600,height=100,foreground=“purple”)
  138. frame3.pack(side=“top”,fill=“x”,pady=5,padx=2)
  139. label9 = tk.Label(frame3,text=“確認表示欄”,width=10,height=2,bd=1,relief=“sunken”,bg=“ghost white”)
  140. label9.grid(row=2,column=1,padx=2,pady=5)
  141. entry18= tk.Entry(frame3,text=“”,width=10,bg=“light grey”)
  142. entry18.grid(row=2,column=2,padx=2,ipady=5)
  143. label18= tk.Label(frame3,text=“年”,width=7,height=2,bd=1,relief=“sunken”,bg=“ghost white”)
  144. label18.grid(row=2,column=3,padx=2,pady=5)
  145. entry19= tk.Entry(frame3,text=“”,width=10,bg=“light grey”)
  146. entry19.grid(row=2,column=4,padx=2,ipady=5)
  147. label19= tk.Label(frame3,text=“月”,width=7,height=2,bd=1,relief=“sunken”,bg=“ghost white”)
  148. label19.grid(row=2,column=5,padx=2,pady=5)
  149. entry20= tk.Entry(frame3,text=“”,width=10,bg=“light grey”)
  150. entry20.grid(row=2,column=6,padx=2,ipady=5)
  151. label20= tk.Label(frame3,text=“日”,width=7,height=2,bd=1,relief=“sunken”,bg=“ghost white”)
  152. label20.grid(row=2,column=7,padx=2,pady=5)
  153. label10 = tk.Label(frame3,text=“利用開始日”,width=7,height=2,bd=1,relief=“sunken”,bg=“ghost white”)
  154. label10.grid(row=1,column=1,ipadx=10,pady=5)
  155. val = tk.StringVar()
  156. box2 = ttk.Combobox(frame3, values = (” “,“2015”,“2016”,“2017”,“2018”,“2019”,“2020”,“2021”), textvariable=val, state=‘readonly’,width=7,height=2)
  157. box2.current(0) #初期値を'(index=0)’に設定
  158. box2.grid(row=1,column=2,padx=2,ipady=5)
  159. label12= tk.Label(frame3,text=“年”,width=7,height=2,bd=1,relief=“sunken”,bg=“ghost white”)
  160. label12.grid(row=1,column=3,padx=2,pady=5)
  161. val = tk.StringVar()
  162. box3 = ttk.Combobox(frame3, values = (” “,“01”,“02”,“03”,“04”,“05”,“06”,“07”,“08”,“09”,“10”,“11”,“12”), textvariable=val, state=‘readonly’,width=7,height=2)
  163. box3.current(0) #初期値を'(index=0)’に設定
  164. box3.grid(row=1,column=4,padx=2,ipady=5)
  165. label14= tk.Label(frame3,text=“月”,width=7,height=2,bd=1,relief=“sunken”,bg=“ghost white”)
  166. label14.grid(row=1,column=5,padx=2,pady=5)
  167. val = tk.StringVar()
  168. box4 = ttk.Combobox(frame3, values = (” “,“01”,“02”,“03”,“04”,“05”,“06”,“07”,“08”,“09”,“10”,“11”,“12”,“13”,“14”,“15”,“16”,“17”,“18”,“19”,“20”,“21”,“22”,“23”,“24”,“25”,“26”,“27”,“28”,“29”,“30”,“31”), textvariable=val, state=‘readonly’,width=7,height=2)
  169. box4.current(0)
  170. box4.grid(row=1,column=6,padx=2,ipady=5)
  171. label16= tk.Label(frame3,text=“日”,width=7,height=2,bd=1,relief=“sunken”,bg=“ghost white”)
  172. label16.grid(row=1,column=7,padx=2,pady=5)
  173. # 4th “name Confirm input” < 姓 > < 名 > < セ イ > < メ イ >
  174. frame4 = tk.LabelFrame(root,bd=1,relief=“sunken”,text=” name Confirm input “,width=600,height=200,foreground=“purple”)
  175. frame4.pack(side=“top”,fill=“x”,pady=5,padx=2)
  176. label3 = tk.Label(frame4,text=” 姓 (*)”,width=10,height=2,bd=1,relief=“sunken”,bg=“ghost white”)
  177. label3.grid(row=2,column=1,padx=2,pady=5)
  178. entry2 = tk.Entry(frame4,width=15,text=“”)
  179. entry2.grid(row=2,column=2,padx=2,ipady=5)
  180. label4 = tk.Label(frame4,text=” 名 (*)”,width=10,height=2,bd=1,relief=“sunken”,bg=“ghost white”)
  181. label4.grid(row=2,column=3,padx=2,pady=5)
  182. entry3 = tk.Entry(frame4,text=“”,width=15)
  183. entry3.grid(row=2,column=4,padx=2,ipady=5)
  184. label5 = tk.Label(frame4,text=” セイ (*)”,width=10,height=2,bd=1,relief=“sunken”,bg=“ghost white”)
  185. label5.grid(row=3,column=1,padx=2,pady=5)
  186. entry4 = tk.Entry(frame4,text=“”,width=15)
  187. entry4.grid(row=3,column=2,padx=2,ipady=5)
  188. label6 = tk.Label(frame4,text=” メイ (*)”,width=10,height=2,bd=1,relief=“sunken”,bg=“ghost white”)
  189. label6.grid(row=3,column=3,padx=2,pady=5)
  190. entry5 = tk.Entry(frame4,text=“”,width=15)
  191. entry5.grid(row=3,column=4,padx=2,ipady=5)
  192. # 5th ” other ” < 市町村名 > < 支給量 > < 工賃単価 >
  193. frame5 = tk.LabelFrame(root,bd=1,relief=“sunken”,text=” other “,width=600,height=100,foreground=“purple”)
  194. frame5.pack(side=“top”,fill=“x”,pady=5,padx=2)
  195. label17 = tk.Label(frame5,text=” 市町村名 “,width=10,height=2,bd=1,relief=“sunken”,bg=“ghost white”)
  196. label17.grid(row=1,column=1,padx=2,pady=5)
  197. val = tk.StringVar()
  198. box1 = ttk.Combobox(frame5,values = (” “,“鹿児島市”,“熊本市”), textvariable=val, state=‘readonly’,width=12,height=2)
  199. box1.current(0)
  200. box1.grid(row=1,column=2,padx=5,ipady=5)
  201. label17 = tk.Label(frame5,text=“確認表示欄 “,width=10,height=2,bd=1,relief=“sunken”,bg=“ghost white”)
  202. label17.grid(row=1,column=3,padx=2,pady=5)
  203. entry14 = tk.Entry(frame5,text=“”,width=15,bg=“light grey”)
  204. entry14.grid(row=1,column=4,padx=2,ipady=5)
  205. label17 = tk.Label(frame5,text=” 支給量 “,width=10,height=2,bd=1,relief=“sunken”,bg=“ghost white”)
  206. label17.grid(row=2,column=1,padx=2,pady=5)
  207. entry8 = tk.Entry(frame5,text=“”,width=15)
  208. entry8.grid(row=2,column=2,padx=2,ipady=5)
  209. label17 = tk.Label(frame5,text=” 工賃単価 “,width=10,height=2,bd=1,relief=“sunken”,bg=“ghost white”)
  210. label17.grid(row=3,column=1,padx=2,pady=5)
  211. entry9 = tk.Entry(frame5,text=“”,width=15)
  212. entry9.grid(row=3,column=2,padx=2,ipady=5)
  213. # 7th ” edit ” 【追 加】  【更 新】
  214. frame7 = tk.LabelFrame(root,bd=1,relief=“sunken”,text=” edit “,width=600,height=100,foreground=“purple”)
  215. frame7.pack(side=“top”,fill=“x”,pady=5,padx=5)
  216. button2 = tk.Button(frame7,text=“追 加”,width=10,height=2,bg=“lightgray”,command=select_bottun)
  217. button2.pack(side=“left”,padx=2,pady=5)
  218. button3 = tk.Button(frame7,text=“更 新”,width=10,height=2,bg=“lightgray”,command=create_sql)
  219. button3.pack(side=“left”,padx=2,pady=5)
  220. mylist = tk.Listbox(frame1,yscrollcommand = scrollbar.set,height=600)
  221. mylist.insert(0) # リストボックス内の項目をクリックする #
  222. mylist.pack(side=“left”,fill=“both”)
  223. scrollbar.config(command = mylist.yview)
  224. # 8th ” end ” 【終 了】 
  225. frame8 = tk.LabelFrame(root,bd=1,relief=“sunken”,text=” end “,width=600,height=100,foreground=“purple”)
  226. frame8.pack(side=“top”,fill=“x”,pady=5,padx=5)
  227. label18 = tk.Label(frame8,text=” 項目 (*) は 必須 !”,width=20,height=2,bd=1)
  228. label18.pack(side=“left”,padx=5,pady=5)
  229. button4 = tk.Button(frame8,text=“終 了”,width=10,height=2,bg=“lightgray”,command=quit_button)
  230. button4.pack(side=“right”,padx=5,pady=5)
  231. sql = “””
  232. SELECT *
  233. FROM user order by セイ
  234. “””
  235. user_id = []
  236. for r in c.execute(sql):
  237. mylist.insert(tk.END,r[1] + ” “ + r[2])
  238. user_id.append(r[0])
  239. mylist.bind(“<ButtonRelease-1>”,get_list)
  240. root.mainloop()

完成図

tkinterで作成したGUIです

連載7:pythonで利用者情報入力を作る

『button に関数を紐付ける 』

  (例) 関数は、def quit_button(): の形で作る事が可能です。

     上記の関数の内容は、『ボタンを閉じますよ』という意味で

    関数実行は、上記の def quit_button():  の 【def】  【:】  だけを取って

    quit_button() で実行 されます。

    関数は、自分で色々な用途に分けて作成出来ます。
  
    今回は、基本情報入力の作成にあたって、必要な関数を下記に
  
    書きました。関数について、掘り下げての勉強は、また日を改めて!
 

 
 
基本情報入力のボタンに関数を紐付け

  1. def reset button():         
  2. def quit_button():
  3. def create_sql():
  4. def get_list():
  5. 更新ボタン  create_sql()
  6. 追加ボタン  reset bottoun()
  7. 終了ボタン  quit_buttoun():

次回で最終掲載!

連載6 : pythonで利用者情報入力を作る

『resetの設定』
入力した値が、次の入力時にリセットされるように
(ユーザーフォームに入っている値を消す)

  1. # 長いので割愛
  2. # dbname = “aozora.db”
  3. # c = sqlite3.connect(dbname) の下から
  4. def select_bottun():
  5. entry1.delete(0,tk.END)
  6. entry2.delete(0,tk.END)
  7. entry3.delete(0,tk.END)
  8. entry4.delete(0,tk.END)
  9. entry5.delete(0,tk.END)
  10. box1.delete(0,tk.END)
  11. box2.delete(0,tk.END)
  12. box3.delete(0,tk.END)
  13. box4.delete(0,tk.END)
  14. entry8.delete(0,tk.END)
  15. entry9.delete(0,tk.END)
  16. entry14.delete(0,tk.END)
  17. entry18.delete(0,tk.END)
  18. entry19.delete(0,tk.END)
  19. entry20.delete(0,tk.END)
  20. create_sql

連載5:pythonで利用者情報入力を作る

『 insret 』
sqlite3にtkinterで作成したユーザーフォームから入力<確認!>
Scheme(table構造): id:int,[姓],[名],[セイ],[メイ],[市町村],[契約日],[支給量:int],[工賃:int]
置き換え<姓:na1>,<名:na2>,<セイ:na3>,<メイ:na4>,<市町村:ci>,<年:se1>,<月:se2>,<日:se3>,<支給量:si>,<工賃:kou>,<年月日:se1+se2+se3>

  1. # 長くなるので insert部分のみ記入
  2. # dbname = “kihon.db”
  3. # c = sqlite3.connect(dbname) の下から
  4. def create_sql():
  5. c = sqlite3.connect(“kihon .db”)
  6. na1 = entry2.get()
  7. na2 = entry3.get()
  8. na3 = entry4.get()
  9. na4 = entry5.get()
  10. ci = box1.get()
  11. se1 = box2.get()
  12. se2 = box3.get()
  13. se3 = box4.get()
  14. si = entry8.get()
  15. kou = entry9.get()
  16. se4 = (se1+se2+se3)
  17. print (na1+na2+na3+na4+ci+se4+si+kou)
  18. try:
  19. user = “””
  20. CREARE TABLE user
  21. (
  22. na1 TEXT NOT NULL,
  23. na2 TEXT NOT NULL,
  24. na3 TEXT NOT NULL,
  25. na4 TEXT NOT NULL,
  26. ci TEXT NOT NULL,
  27. se1 TEXT NOT NULL,
  28. se2 TEXT NOT NULL,
  29. se3 TEXT NOT NULL,
  30. si INT NOT NULL,
  31. kou INT NOT NULL
  32. )
  33. “””
  34. c.execute(user)
  35. c.execute(“COMMIT”)
  36. except:
  37. pass
  38. try:
  39. c.execute(“””
  40. INSERT INTO
  41. user(姓,名,セイ,メイ,市町村,契約日,支給量,工賃単価)
  42. VALUES(‘{}’,'{}’,'{}’,'{}’,'{}’,'{}’,{},{});”””.format(na1,
  43. na2,na3,na4,ci,se4,si,kou))
  44. c.execute(“COMMIT;”)
  45. text=(“一件登録されました!”)
  46. tk.messagebox.showinfo(“info”,text)
  47. except:
  48. text=(“エラーにより登録できませんでした”)
  49. tk.messagebox.showinfo(“info”,text)

連載4:pythonで利用者情報入力を作る

『 sqlite3からuser formに読み込み 』
sqlite3からtkinterで作成したユーザーフォームにデータを読み込みます

  1. # -*- coding: utf-8 -*-
  2. import tkinter as tk
  3. import tkinter.ttk as ttk
  4. import sqlite3
  5. import tkinter.messagebox as msg
  6. dbname = “aozora.db”
  7. c = sqlite3.connect(dbname)
  8. # “”” リストボックスの選択を読み取る関数,その結果を入力ウィジェットに入れる”””
  9. def get_list(nanikanyuuryoku):
  10. cur = c.cursor()
  11. index = mylist.curselection()[0]
  12. user_id2 = (user_id[index], )
  13. cur.execute(‘select * from user where id = ?’, user_id2)
  14. user_id3 = cur.fetchone()
  15. entry1.delete(0,50)
  16. entry1.insert(0, user_id3[0])
  17. entry2.delete(0,50)
  18. entry2.insert(0, user_id3[1])
  19. entry3.delete(0,50)
  20. entry3.insert(0, user_id3[2])
  21. entry4.delete(0,50)
  22. entry4.insert(0, user_id3[3])
  23. entry5.delete(0,50)
  24. entry5.insert(0, user_id3[4])
  25. entry14.delete(0,50)
  26. entry14.insert(0, user_id3[5])
  27. entry18.delete(0,50)
  28. entry18.insert(0, user_id3[6][0:4])
  29. entry19.delete(0,50)
  30. sql = “””
  31. SELECT *
  32. FROM user order by セイ
  33. “””
  34. user_id = []
  35. for r in c.execute(sql):
  36. mylist.insert(tk.END,r[1] + ” “ + r[2])
  37. user_id.append(r[0])
  38. mylist.bind(“<ButtonRelease-1>”,get_list)
  39. root.mainloop()
  40. entry19.insert(0, user_id3[6][4:6])
  41. entry20.delete(0,50)
  42. entry20.insert(0, user_id3[6][6:8])
  43. entry8.delete(0,50)
  44. entry8.insert(0, user_id3[7])
  45. entry9.delete(0,50)
  46. entry9.insert(0, user_id3[8])
  47. #———————-    割愛   ————————#
  48. sql = “””
  49. SELECT *
  50. FROM user order by セイ
  51. “””
  52. user_id = []
  53. for r in c.execute(sql):
  54. mylist.insert(tk.END,r[1] + ” “ + r[2])
  55. user_id.append(r[0])
  56. mylist.bind(“<ButtonRelease-1>”,get_list)
  57. root.mainloop()

出来上がりは、以下の通り
tkinterで作成した入力画面