質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.05%

  • Python

    5154questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • SQLite

    530questions

    SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

  • Tkinter

    86questions

    Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

python3 配列、sqlite3とtkinter連携 が学べる本やサイトがあれば教えて下さい。

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 110

zono_daiichi

score 7

全くプログラミングを経験がない状態から、pythonの学習を始めて3ヶ月が経ちます。tkinterでのフォームはある程度、自分が思ったように配置ができるようになりました、ですが、自分でネットで調べながら勉強していて、なかなか前に進めない、消化不良の部分があり、是非、理解してもっと前に進みたいと思っています。

『分からない点』
① sqlite3とtkinterの出し入れ(splite3からデータをtkinterのリストボックスに読み込む)

user_id = []
for r in c.execute(sql):
    mylist.insert(tk.END,r[1] + "  " + r[2])
    user_id.append(r[0])

② tkinter の entryにsqlite3のデータを反映(配列のとらえ方?)

    cur = c.cursor()
    index = mylist.curselection()[0]        
    user_id2 = (user_id[index], )
    cur.execute('select * from user where id = ?', user_id2)
    user_id3 = cur.fetchone()
    entry1.delete(0,50)    
    entry1.insert(0, user_id3[0])    
    entry2.delete(0,50)
    entry2.insert(0, user_id3[1])

pythonのtkinter、sqlite3を連携させたものは何個か作っていますが、「この時はこう入力すればいいんだ」とパターンで覚えておいて、本来の意味を理解せずに現在に至っていて、応用が効かない自分がとてももどかしく、何か上記の内容が詳しく理解できるような『本』、『サイト』、『アドバイス』
がありましたら是非是非、教えていただけたら幸いです。

ちなみに、私が知りたい全体像を把握していただくために、作った物を以下に添付させていただきます。

import tkinter as tk
import tkinter.ttk as ttk
import sqlite3
import tkinter.messagebox as msg
dbname = "text.db"
c = sqlite3.connect(dbname)
def 
select_bottun():
    entry1.delete(0,tk.END)
    entry2.delete(0,tk.END)
    entry3.delete(0,tk.END)
    entry4.delete(0,tk.END)
    entry5.delete(0,tk.END)
    box1.delete(0,tk.END)
    box2.delete(0,tk.END)
    box3.delete(0,tk.END)
    box4.delete(0,tk.END)
    entry8.delete(0,tk.END)
    entry9.delete(0,tk.END)
    entry14.delete(0,tk.END)
    entry18.delete(0,tk.END)
    entry19.delete(0,tk.END)
    entry20.delete(0,tk.END)
    create_sql
def quit_button():
    root.destroy()
def hello_info():
    msg.showinfo("Say Hello", "Hello info")
def create_sql():
    c = sqlite3.connect("aozora.db")
    na1 = entry2.get() 
    na2 = entry3.get()
    na3 = entry4.get()
    na4 = entry5.get()
    ci = box1.get()
    se1 = box2.get()
    se2 = box3.get()
    se3 = box4.get()
    si = entry8.get()
    kou = entry9.get()
    se4 = (se1+se2+se3)
    print (na1+na2+na3+na4+ci+se4+si+kou)    
    try:
        c.execute("""
        INSERT INTO 
        user(姓,名,セイ,メイ,市町村,契約日,支給量,工賃単価)
        VALUES('{}','{}','{}','{}','{}','{}',{},{});""".format(na1,na2,na3,na4,ci,se4,si,kou))
        c.execute("COMMIT;")
        text=("一件登録されました!")
        tk.messagebox.showinfo("info",text)
    except:
        text=("エラーにより登録できませんでした")
        tk.messagebox.showinfo("info",text)


def get_list(nanikanyuuryoku):
    cur = c.cursor()
    index = mylist.curselection()[0]        
    user_id2 = (user_id[index], )
    cur.execute('select * from user where id = ?', user_id2)
    user_id3 = cur.fetchone()
    entry1.delete(0,50)    
    entry1.insert(0, user_id3[0])    
    entry2.delete(0,50)
    entry2.insert(0, user_id3[1])
    entry3.delete(0,50)
    entry3.insert(0, user_id3[2])
    entry4.delete(0,50)
    entry4.insert(0, user_id3[3])
    entry5.delete(0,50)
    entry5.insert(0, user_id3[4])
    entry14.delete(0,50)
    entry14.insert(0, user_id3[5])#,state = "readonly")
    entry18.delete(0,50)
    entry18.insert(0, user_id3[6][0:4])
    entry19.delete(0,50)
    entry19.insert(0, user_id3[6][4:6])
    entry20.delete(0,50)
    entry20.insert(0, user_id3[6][6:8])
    entry8.delete(0,50)
    entry8.insert(0, user_id3[7])
    entry9.delete(0,50)
    entry9.insert(0, user_id3[8])

root = tk.Tk()
root.resizable(0,0)
root.title("福祉業務入力支援")
root.geometry("680x720")
status = tk.Label(root, text="from : maruti system ・・・ ",borderwidth=2,relief="ridge")
status.pack(side=tk.BOTTOM, fill=tk.X)

frame1 = tk.LabelFrame(root,bd=1,relief="sunken",text=" name ",height=600,foreground="purple")
frame1.pack(side="left",anchor="nw",fill="x",padx=8,pady=2)

scrollbar = tk.Scrollbar(frame1,bd=5,relief="sunken")
scrollbar.pack(side="right",fill="y")

frame2 = tk.LabelFrame(root,bd=1,relief="sunken",text=" manu ",width=600,height=100,foreground="purple")
frame2.pack(side="top",anchor="n",fill="x",ipady=5,padx=2)
label1 = tk.Label(frame2,text="利用者 ID",width=10,height=2,bd=1,relief="sunken",bg="ghost white")
label1.grid(row=1,column=1,padx=2,pady=2)
entry1 = tk.Entry(frame2,text="",width=15,bg="light grey")
entry1.grid(row=1,column=2,padx=2,ipady=5)

frame3 = tk.LabelFrame(root,bd=1,relief="sunken",text=" start date of use ",width=600,height=100,foreground="purple")
frame3.pack(side="top",fill="x",pady=5,padx=2)
label9 = tk.Label(frame3,text="確認表示欄",width=10,height=2,bd=1,relief="sunken",bg="ghost white")
label9.grid(row=2,column=1,padx=2,pady=5)
entry18= tk.Entry(frame3,text="",width=10,bg="light grey")
entry18.grid(row=2,column=2,padx=2,ipady=5)
label18= tk.Label(frame3,text="年",width=7,height=2,bd=1,relief="sunken",bg="ghost white")
label18.grid(row=2,column=3,padx=2,pady=5)
entry19= tk.Entry(frame3,text="",width=10,bg="light grey")
entry19.grid(row=2,column=4,padx=2,ipady=5)
label19= tk.Label(frame3,text="月",width=7,height=2,bd=1,relief="sunken",bg="ghost white")
label19.grid(row=2,column=5,padx=2,pady=5)

entry20= tk.Entry(frame3,text="",width=10,bg="light grey")
entry20.grid(row=2,column=6,padx=2,ipady=5)
label20= tk.Label(frame3,text="日",width=7,height=2,bd=1,relief="sunken",bg="ghost white")
label20.grid(row=2,column=7,padx=2,pady=5)
label10 = tk.Label(frame3,text="利用開始日",width=7,height=2,bd=1,relief="sunken",bg="ghost white")
label10.grid(row=1,column=1,ipadx=10,pady=5)
val = tk.StringVar()
box2 = ttk.Combobox(frame3, values = ("  ","2015","2016","2017","2018","2019","2020","2021"), textvariable=val, state='readonly',width=7,height=2)
box2.current(0) #初期値を'(index=0)'に設定
box2.grid(row=1,column=2,padx=2,ipady=5)

label12= tk.Label(frame3,text="年",width=7,height=2,bd=1,relief="sunken",bg="ghost white")
label12.grid(row=1,column=3,padx=2,pady=5)
val = = tk.StringVar()
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)
box3.current(0) #初期値を'(index=0)'に設定
box3.grid(row=1,column=4,padx=2,ipady=5)

label14= tk.Label(frame3,text="月",width=7,height=2,bd=1,relief="sunken",bg="ghost white")
label14.grid(row=1,column=5,padx=2,pady=5)
val = tk.StringVar()
box4 = ttk.Combobox(frame3, values = ("  ","01","02","03","04","05"), textvariable=val, state='readonly',width=7,height=2)
box4.current(0)
box4.grid(row=1,column=6,padx=2,ipady=5)

label16= tk.Label(frame3,text="日",width=7,height=2,bd=1,relief="sunken",bg="ghost white")
label16.grid(row=1,column=7,padx=2,pady=5)
#    4th name Confirm input"  <  姓  >  <  名  > < セ イ > < メ イ > 
frame4 = tk.LabelFrame(root,bd=1,relief="sunken",text=" name Confirm input ",width=600,height=200,foreground="purple")
frame4.pack(side="top",fill="x",pady=5,padx=2)
label3 = tk.Label(frame4,text=" 姓 (*)",width=10,height=2,bd=1,relief="sunken",bg="ghost white")
label3.grid(row=2,column=1,padx=2,pady=5)
entry2 = tk.Entry(frame4,width=15,text="")
entry2.grid(row=2,column=2,padx=2,ipady=5)
label4 = tk.Label(frame4,text=" 名 (*)",width=10,height=2,bd=1,relief="sunken",bg="ghost white")
label4.grid(row=2,column=3,padx=2,pady=5)
entry3 = tk.Entry(frame4,text="",width=15)
entry3.grid(row=2,column=4,padx=2,ipady=5)
label5 = tk.Label(frame4,text=" セイ (*)",width=10,height=2,bd=1,relief="sunken",bg="ghost white")
label5.grid(row=3,column=1,padx=2,pady=5)
entry4 = tk.Entry(frame4,text="",width=15)
entry4.grid(row=3,column=2,padx=2,ipady=5)     
label6 = tk.Label(frame4,text=" メイ (*)",width=10,height=2,bd=1,relief="sunken",bg="ghost white")
label6.grid(row=3,column=3,padx=2,pady=5)
entry5 = tk.Entry(frame4,text="",width=15)
entry5.grid(row=3,column=4,padx=2,ipady=5)
#    5th " other "  < 市町村名 > < 支給量 > < 工賃単価 >
frame5= tk.LabelFrame(root,bd=1,relief="sunken",text=" other ",width=600,height=100,foreground="purple")
frame5.pack(side="top",fill="x",pady=5,padx=2)
label17 = tk.Label(frame5,text=" 市町村名 ",width=10,height=2,bd=1,relief="sunken",bg="ghost white")
label17.grid(row=1,column=1,padx=2,pady=5)
val = tk.StringVar()
box1 = ttk.Combobox(frame5,values = ("  ","熊本","鹿児島","宮崎"), textvariable=val, state='readonly',width=12,height=2)
box1.current(0)
box1.grid(row=1,column=2,padx=5,ipady=5)
label17 = tk.Label(frame5,text="確認表示欄 ",width=10,height=2,bd=1,relief="sunken",bg="ghost white")
label17.grid(row=1,column=3,padx=2,pady=5)
entry14 = tk.Entry(frame5,text="",width=15,bg="light grey")
entry14.grid(row=1,column=4,padx=2,ipady=5)
label17 = tk.Label(frame5,text=" 支給量 ",width=10,height=2,bd=1,relief="sunken",bg="ghost white")
label17.grid(row=2,column=1,padx=2,pady=5)
entry8 = tk.Entry(frame5,text="",width=15)
entry8.grid(row=2,column=2,padx=2,ipady=5)
label17 = tk.Label(frame5text=" 工賃単価 ",width=10,height=2,bd=1,relief="sunken",bg="ghost white")
label17.grid(row=3,column=1,padx=2,pady=5)
entry9 = tk.Entry(frame5,text="",width=15)
entry9.grid(row=3,column=2,padx=2,ipady=5)
frame7 = tk.LabelFrame(root,bd=1,relief="sunken",text=" edit ",width=600,height=100,foreground="purple")
frame7.pack(side="top",fill="x",pady=5,padx=5)
button2 = tk.Button(frame7,text="追 加",width=10,height=2,bg="lightgray",command=select_bottun)    
button2.pack(side="left",padx=2,pady=5)
button3 = tk.Button(frame7,text="更 新",width=10,height=2,bg="lightgray",command=create_sql)    
button3.pack(side="left",padx=2,pady=5)
mylist = tk.Listbox(frame1,yscrollcommand = scrollbar.set,height=600)
mylist.insert(0)                                        
mylist.pack(side="left",fill="both")
scrollbar.config(command = mylist.yview)
frame8 = tk.LabelFrame(root,bd=1,relief="sunken",text=" end ",width=600,height=100,foreground="purple")
frame8.pack(side="top",fill="x",pady=5,padx=5)
label18 = tk.Label(frame8,text=" 項目 (*) は 必須 !",width=20,height=2,bd=1)
label18.pack(side="left",padx=5,pady=5)
button4 = tk.Button(frame8,text="終 了",width=10,height=2,bg="lightgray",command=quit_button)    
button4.pack(side="right",padx=5,pady=5)
sql = """
    SELECT *
    FROM user order by セイ
    """
user_id = []
for r in c.execute(sql):
    mylist.insert(tk.END,r[1] + "  " + r[2])
    user_id.append(r[0])
mylist.bind("<ButtonRelease-1>",get_list)
root.mainloop()
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 91.05%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python

    5154questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • SQLite

    530questions

    SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

  • Tkinter

    86questions

    Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。