tkinterでフォーム画面を作成しています。
mySQLでIDと名前を取得し、コンボボックスで選択できるようにしました。コンボボックスで選択したら、その名前を下段のラベルに表示させて、目視できるようにしてあります。
mySQLに登録するのはIDのみ。コンボボックス・ラベルには名前のみ表示させたいと思っています。
ただ現状は、コンボボックス(ラベルも)にIDと名前の両方が表示されてしまいます。
IDが表示されると見た目が悪いので、何とか名前のみの表示にできないかと苦戦しております。
SQL側の取引区分テーブルには、オートナンバー・取引区分名の2つのカラムがあります。
python3.9.10
1# 取引区分・登録フォーム 2 3import tkinter 4from tkinter import ttk 5from tkinter import Tk, font 6from tkinter import messagebox 7import mysql.connector as mysql 8import datetime 9 10 11root = Tk() 12root.title("取引企業登録フォーム") 13root.geometry("400x350") 14 15 16# mysqlにconnect 17con = mysql.connect( 18 database = 'seisan_system', 19 user = 'root', 20 password = 'mta969696', 21 host = 'localhost', 22 port = '3306', 23 ) 24 25# MYSQLからカラムの取得 26cur = con.cursor() 27sql= "select campany_class_id, campany_class_name from tb_campany_class" 28cur.execute(sql) 29campany_class_rows= cur.fetchall() 30 31# 注1 32# 取引区分の選択した際の下段ラベル表示 33def class_show_selected(event): 34 class_label_2.config(text=class_combobox.get()) 35 36 37 38# 登録ボタンを押した際のテキストを読み取るgetメソッド 39def touroku_sql(): 40 class_id = class_combobox.get() 41 42 43# 注2 44 # SQLを発行してDBへ登録 45 try: 46 cur = con.cursor() 47 cur.execute(""" 48 INSERT INTO tb_campany(campany_class_id) 49 VALUES('{}'); 50 """.format(class_id )) 51 cur.execute("COMMIT;") 52 messagebox.showinfo("メッセージ", "登録しました") 53 # ドメインエラーなどにより登録できなかった場合のエラー処理 54 except: 55 print("エラーにより登録できませんでした") 56 root.destroy() 57 58 59 60# 画面を閉じる関数を与える 61def return_view(): 62 root.destroy() 63 64 65#各種ラベルの設定 66font1 = font.Font(size=10) 67class_label_1 = tkinter.Label(text='取引区分の選択:', font=font1) 68 69 70# 各種エントリー等を入力した際の入力内容確認用ラベル 71class_label_2= tkinter.Label() # 取引区分を選択した際用ラベル 72 73 74#取引区分と会社形態 プルダウンの中身を定義 75class_list =(campany_class_rows) 76class_combobox = ttk.Combobox(values=class_list) 77class_combobox.bind('<<ComboboxSelected>>',class_show_selected,) 78 79 80#各種ラベル等の配置 81class_label_1.place(x=40, y=30) 82class_combobox.place(x=150, y=30) 83 84class_label_2.place(x=20, y=250) 85 86 87# 登録・閉じるボタン作成 88btn_toroku = tkinter.Button( 89 text='登録', width=8, command=touroku_sql) 90btn_end = tkinter.Button( 91 text='閉じる', width=8, command=return_view) 92btn_toroku.place(x=230, y=310) 93btn_end.place(x=310, y=310) 94 95 96root.mainloop() 97
やってみたこと
名前のみを取得すれば、コンボボックスに表示されるのも名前だけにできますが、そうするとmySQLに登録されるのも名前だけになってしまいます。
コンボボックス用にmySQL用とは別に名前を取得して名前だけを表示させるとmySQLに登録する際、何も選択していないことになってしまい登録できませんでした。
ネットで検索しても参考にできそうなものを見つけることができませんでした
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/18 02:31 編集
2022/06/18 03:26 編集
2022/06/22 03:47 編集