##はじめに
PythonでGUIを開発中です。
webdではよくあるパスワードの表示・非表示を実行したいと思います。
調べても良いのが見つからなかったので作ったのですが、困ったので質問します。
現状
0. パスワード入力用にEntryを2個作り、片方はオプションで[show='*']を付ける。
0. 表示のチェックが付いたら、Entryを交互に切り替える。
##困った点
Chk = Checkbutton(Frm1, variable=self.checkView ,text = '表示' , command=lambda: self.Chenge_PW(i)
それぞれのテェックをi
で紐付けたかったのですが、このコードではどのチェックをクリックしてもself.Chenge_PW
には9が渡されます。
どのようにすれば、各行のチェックボックスのクリックを取得して、パスワードの表示・非表示を切り替えたら良いでしょうか?
そもそも、この方法よりももっとスマートなやり方があれば教えて頂きたいです。
python
1''' mmain ''' 2# tkinter 3import tkinter as tk 4from tkinter.ttk import * 5from ttkthemes import * 6 7 8class Application(Frame): 9 10 def __init__(self, master=None): 11 Frame.__init__(self,master) 12 self.pack(fill='both') #描写 13 14 #フォームの作成 15 self.CrateMainForm(master) 16 17 18 19 20 #region #メインフォームの作成 21 def CrateMainForm(self,master): 22 23 24 """ 25 アカウント情報 フレーム 26 """ 27 Frm1 = Frame(master) 28 Frm1.pack(padx=10 ,pady=5, fill="both") 29 30 31 self.Widget_items = [] 32 self.check_PW_view = [] 33 for i in range(10): 34 items = [] 35 36 # No ラベル 37 self.L_no1 = Label(Frm1) 38 self.L_no1.configure(text=f"{i+1}",) 39 self.L_no1.grid(row=i +1, column=0) 40 41 42 # パスワード テキストボックス 43 TextPassword = tk.StringVar() 44 self.PasswordBox = Entry(Frm1,textvariable=TextPassword ,width = 13,) 45 self.PasswordBox.grid(row=i +1, column=3, sticky="nw") 46 items.append(self.PasswordBox) 47 48 # パスワード テキストボックス * 49 TextPassword = tk.StringVar() 50 self.PasswordBox_show = Entry(Frm1,textvariable=TextPassword , show='*' ,width = 13,) 51 self.PasswordBox_show.grid(row=i +1, column=3, sticky="nw") 52 items.append(self.PasswordBox_show) 53 54 55 # 表示 チェックボックス 56 self.checkView = tk.BooleanVar() 57 Chk = Checkbutton(Frm1, variable=self.checkView ,text = '表示' , command=lambda: self.Chenge_PW(i)) 58 .grid(row=i +1, column=4, sticky="w") 59 self.check_PW_view.append(self.checkView) 60 61 self.Widget_items.append(items) 62 63 64 65 # パスワードの表示非表示の切り替え 66 def Chenge_PW(self , i): 67 tmp = '' 68 # 表示 69 pw_view = self.Widget_items[i][0] 70 pw_Asterisk = self.Widget_items[i][1] 71 72 # falseなら表示する方に 73 if self.check_PW_view[i].get(): 74 pw_Asterisk.grid_remove() 75 pw_view.grid() 76 77 tmp = pw_Asterisk.get() 78 else: 79 pw_view.grid_remove() 80 pw_Asterisk.grid() 81 82 tmp = pw_view.get() 83 84 pw_view.delete(0, tk.END) 85 pw_view.insert(0, tmp) 86 pw_Asterisk.delete(0, tk.END) 87 pw_Asterisk.insert(0, tmp) 88 89 return 90 91#main 92if __name__ == "__main__": 93 94 root = ThemedTk() 95 app = Application(master=root) 96 app.mainloop() 97 98
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/02 08:31