前提・実現したいこと
pythonとsqlite3で自分用の住所録作成中。tkinterのentryウェジェットにStringVar()型の変数をテーブルのフィールド名と関連した名称で動的に作成し表示しようと思いますがエラーが出て表示できません。
下記コードのtest_1.pyは正常に動作し「田中」が表示されます。test_2.py及び test_3.pyではprint(var_name)又はprint(self.var_name)部分で下記エラー発生。
エラー行前までは正常に動作しそれぞれの値が表示されます。test_1.pyとtest_2.pyの違いが原因の「もと」と思いますが、この違いが理解できません
ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
エラーメッセージ test_2.pyでのエラー 例外が発生しました: NameError name 'var_name' is not defined test_3.pyでのエラー 例外が発生しました: AttributeError 'Myclass' object has no attribute 'var_name'
該当のソースコード
ソースコード # ***** test_1.py ***** import tkinter as tk import tkinter.ttk as ttk root = tk.Tk() # データベーステーブルのフィールド名をキーとした辞書型 tbl_dict={} tbl_dict["id"] = 1 tbl_dict["name"] = 2 # データベーステーブルのフィールド名をキーとし、 # これと関連したtkinterのStringVar()型の変数名の辞書型 var_dict = {} for key in tbl_dict: # キーに関連した変数名 var_dict[key] = "var_" + key # StringVar()型の変数作成 vars()[var_dict[key]] = tk.StringVar() # キーを"name"に指定、そのStringVar()型変数のに”田中”を代入 key = "name" vars()[var_dict[key]] = "田中" # 代入値を表示させる print(vars()[var_dict[key]]) print(var_dict[key]) print(var_name) # ***** test_2.py ***** import tkinter as tk import tkinter.ttk as ttk def test(): root = tk.Tk() # データベーステーブルのフィールド名をキーとした辞書型 tbl_dict={} tbl_dict["id"] = 1 tbl_dict["name"] = 2 # データベーステーブルのフィールド名をキーとし、 # これと関連したtkinterのStringVar()型の変数名の辞書型 var_dict = {} for key in tbl_dict: # キーに関連した変数名 var_dict[key] = "var_" + key # StringVar()型の変数作成 vars()[var_dict[key]] = tk.StringVar() # キーを"name"に指定、そのStringVar()型変数のに”田中”を代入 key = "name" vars()[var_dict[key]] = "田中" # 代入値を表示させる print(vars()[var_dict[key]]) print(var_dict[key]) print(type(var_dict[key])) print(var_name) test() # ***** test_3.py ***** import tkinter as tk import tkinter.ttk as ttk class Myclass(): def __init__(self,a,b): root = tk.Tk() # データベーステーブルのフィールド名をキーとした辞書型 self.tbl_dict={} self.tbl_dict["id"] = a self.tbl_dict["name"] = b def dict_make(self): # データベーステーブルのフィールド名をキーとし、 # これと関連したtkinterのStringVar()型の変数名の辞書型 self.var_dict = {} for key in self.tbl_dict: # キーに関連した変数名 self.var_dict[key] = "self.var_" + key # StringVar()型の変数作成 vars()[self.var_dict[key]] = tk.StringVar() def var_print(self): # キーを"name"に指定、そのStringVar()型変数のに”田中”を代入 key = "name" vars()[self.var_dict[key]] = "田中" print(vars()[self.var_dict[key]]) print(self.var_dict[key]) print(self.var_name) # 代入値を表示させる ex = Myclass(1,2) ex.dict_make() ex.var_print()
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/01 08:48
2021/09/02 01:34
2021/09/02 07:52
2021/09/03 02:56