連載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です