前提
'textc.py'モジュールの'testa'クラスのTkinterラベルの文字を、ラベルイベントでlistを引数として他のモジュール'accho.py'モジュールの
'AccountSelecter'クラスの'tk_show'メソッドでlist内の文字列を選択させその値を取得したい
↓のコードではlistを渡せて選択させるまでは出来たのですが、textc.pyモジュールで受け取ることができません。
クラスとクラスメソッドを勉強中の為、クラスメソッドは使用したままで回答をお願いします。
実現したいこと
accho.pyモジュールで選択したlist内の文字列をtextc.pyモジュール内のラベルに表示させたい
該当のソースコード
---textc.py--- import tkinter as tk import accho list = ['aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'iiii', 'jjjj', 'kkkk', 'llll', 'mmmm', 'nnnn', 'oooo', 'pppp', 'qqqq', 'rrrr', 'ssss', 'tttt', 'uuuu', 'vvvv', 'wwww', 'xxxx', 'yyyy', 'zzzz'] class testa: def click_event(event): acc = accho.AccountSelecter.tk_show(list) print(acc) event.widget.config(text=acc) root = tk.Tk() root.title("test_a") root.geometry("670x400") lbl = tk.Label(root,width=60,bg="white") lbl.pack() lbl.bind("<Button-1>", click_event) root.mainloop() ---accho.py--- class AccountSelecter: def __init__(self): pass def tk_show(list): str_xx = '' def lbl_hover(event): event.widget['bg'] = "#00AAE1" def lbl_anhover(event): event.widget['bg'] = "#FFFFFF" def lbl_Double_click(event): str_xx = event.widget.cget("text") root.quit() root.destroy() root = tk.Tk() root.title("使用する文字列をダブルクリック") root.geometry("670x400") font_name = 'MS Gothic' # ラベルの文字サイズ font_size = 9 # ラベルの文字色 ia = len(list) * 15 frm_a = tk.Frame(root) frm_a.pack(fill=tk.BOTH, expand=tk.YES) cnv = tk.Canvas(frm_a, relief=tk.FLAT) cnv.pack(fill=tk.BOTH, expand=tk.YES) frm_b = tk.Frame(cnv) frm_b.pack(anchor=tk.NW, fill=tk.Y, expand=tk.YES) cnv.create_window(0, 0, window=frm_b, anchor=tk.NW) ybar = tk.Scrollbar(cnv, orient=tk.VERTICAL) ybar.pack(side=tk.RIGHT, fill=tk.Y) ybar.config(command=cnv.yview) cnv.config(yscrollcommand=ybar.set) cnv.config(scrollregion=(0, 0, 1600, ia)) column_pos = 0 row_pos = 0 for v in list: if column_pos == 3: column_pos = 0 row_pos += 1 lbl_xx = tk.Label(frm_b, width=35, text=v, relief=tk.FLAT, font=(font_name, font_size)) lbl_xx.grid(row=row_pos, column=column_pos) # ,padx=5,pady=5,ipady=3) lbl_xx.bind("<Enter>", lbl_hover) lbl_xx.bind("<Leave>", lbl_anhover) lbl_xx.bind("<Double-1>", lbl_Double_click) column_pos += 1 root.mainloop() return str_xx if __name__ == "__main__": tk_show()
補足情報(FW/ツールのバージョンなど)
Python 3.10.5
Tkinter 8.6
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー