前提・実現したいこと
pandasを利用しcsvデータ表示を行っており
そのデータをダブルクリックすることで別画面(tkinter)で表示したい
発生している問題・エラーメッセージ
def set_correct_data(self)でデータ格納をしているのですが class CorrectWindow(tkm.Frame)でデータ参照が出来ていない状況です。
該当のソースコード
python
import tkinter as tkm import pandas as pd from tkinter import ttk from tkinter import * from tkinter.ttk import * from tkcalendar import DateEntry #-----------サブウィンドウ画面(検索)START---------- class SubWindow(tkm.Frame): def __init__(self,master): super().__init__(master) self.pack() self.CorrectWindow = [] master.geometry("1500x400+100+300") master.title("検索画面") master.grab_set() self.set_data() self.sub_widget() self.subwindow = [] self.CorrectWindow = [] #CSV情報読込 def set_data(self): self.data = pd.read_csv("c://test.csv", dtype=object, encoding="utf_8_sig", na_filter=False) self.colname_list = ["ID", "日付","登録者社員番号","支店","種別","プロジェクト番号","枝番","顧客名","金額","最終更新者社員番号", "最終更新日時", "登録実行日時"] # 検索結果に表示させる列名 self.width_list = [10, 15, 30, 10, 40, 40, 10, 200, 50, 40, 100, 100] self.search_col = "検索キーワード" # 検索キーワードの入力されている列名 #各種パーツ読込 def sub_widget(self): self.sw_main = ttk.PanedWindow(self.master, orient="vertical") self.sw_main.pack(expand=True, fill=tkm.BOTH, side="left") self.sw_top = ttk.PanedWindow(self.sw_main, orient="horizontal", height=25) self.sw_main.add(self.sw_top) self.sw_bottom = ttk.PanedWindow(self.sw_main, orient="vertical") self.sw_main.add(self.sw_bottom) self.creat_input_frame(self.sw_top) self.create_tree(self.sw_bottom) #キーワード入力部分作成 def creat_input_frame(self, parent): fm_input = ttk.Frame(parent) parent.add(fm_input) lbl_keyword = ttk.Label(fm_input, text="キーワード", width=7) lbl_keyword.grid(row=1, column=1, padx=2, pady=2) self.keyword = tkm.StringVar() ent_keyword = ttk.Entry(fm_input, justify="left", textvariable=self.keyword, width= 50) ent_keyword.grid(row=1, column=2, padx=2, pady=2) ent_keyword.bind("<Return>", self.search) #CSVファイル表示 def create_tree(self, parent): self.result_text = tkm.StringVar() lbl_result = ttk.Label(parent, textvariable=self.result_text) parent.add(lbl_result) self.tree = ttk.Treeview(parent) self.tree["column"] = self.colname_list self.tree["show"] = "headings" self.tree.bind("<Double-1>", self.onDuble) for i, (colname, width) in enumerate(zip(self.colname_list, self.width_list)): self.tree.heading(i, text=colname) self.tree.column(i, width=width) #セル位置調整 self.tree.column(0, anchor=E) self.tree.column(1, anchor=CENTER) self.tree.column(2, anchor=CENTER) self.tree.column(3, anchor=CENTER) self.tree.column(4, anchor=CENTER) self.tree.column(5, anchor=E) self.tree.column(6, anchor=E) self.tree.column(7, anchor=W) self.tree.column(8, anchor=E) self.tree.column(9, anchor=CENTER) parent.add(self.tree) #検索実施 def search(self, event=None): keyword = self.keyword.get() result = self.data[self.data[self.search_col].str.contains(keyword, na=False)] self.update_tree_by_search_result(result) #検索結果更新 def update_tree_by_search_result(self, result): self.tree.delete(*self.tree.get_children()) self.result_text.set(f"検索結果:{len(result)}") for _, row in result.iterrows(): values = row[self.colname_list].to_list() values[0] = f"{int(values[0]):06}" values[6] = f"{int(values[6]):03}" self.tree.insert("", "end", values=values) #修正画面表示 def onDuble(self, event): self.subwindow.append(tkm.Toplevel(highlightthickness=5, highlightbackground="white", highlightcolor="red")) self.set_correct_data() self.CorrectWindow.append(CorrectWindow(self.subwindow[len(self.subwindow)-1],len(self.subwindow))) #-----------修正データ読込-START---------- def set_correct_data(self): selected_item = self.tree.selection()[0] #選択した行取得 values_0 = selected_item # 値の取得(行取得) values_00 = self.tree.item(selected_item)['values'][0] # 値の取得(ID取得) values_01 = self.tree.item(selected_item)['values'][2] # 値の取得(登録社員番号取得) values_02 = self.tree.item(selected_item)['values'][3] # 値の取得(支店取得) values_03 = self.tree.item(selected_item)['values'][4] # 値の取得(種別取得) values_05 = self.tree.item(selected_item)['values'][5] # 値の取得(プロジェクト番号取得) values_06 = self.tree.item(selected_item)['values'][6] # 値の取得(枝番取得) values_07 = self.tree.item(selected_item)['values'][7] # 値の取得(顧客名取得) values_08 = self.tree.item(selected_item)['values'][8] # 値の取得(金額取得) class CorrectWindow(tkm.Frame): def __init__(self,master,num): super().__init__(master) self.pack() master.geometry("550x250+500+350") master.title("修正画面") master.grab_set() self.correct_widget() def correct_widget(self): self.correct_lbl00 = ttk.Label(self.master, text="ID", width=17, anchor="e", justify=RIGHT) self.correct_lbl01 = ttk.Label(self.master, text="登録者社員番号", width=17, anchor="e", justify=RIGHT) self.correct_lbl02 = ttk.Label(self.master, text="支店", width=17, anchor="e", justify=RIGHT) self.correct_lbl03 = ttk.Label(self.master, text="種別", width=13, anchor="e", justify=RIGHT) self.correct_lbl04 = ttk.Label(self.master, text="日付", width=17, anchor="e", justify=RIGHT) self.correct_lbl04_1 = ttk.Label(self.master, text="※電子データに記載がある日付を入力", width=30, anchor="e", justify=RIGHT) self.correct_lbl05 = ttk.Label(self.master, text="プロジェクト番号", width=17, anchor= "e", justify=RIGHT) self.correct_lbl06 = ttk.Label(self.master, text="枝番", width=17, anchor="e", justify=RIGHT) self.correct_lbl07 = ttk.Label(self.master, text="顧客名", width=17, anchor="e", justify=RIGHT) self.correct_lbl08 = ttk.Label(self.master, text="金額(税込)", width=17, anchor="e", justify=RIGHT) self.correct_lbl08_1 = ttk.Label(self.master, text="※金額が発生しない場合でも 0 を入力", width=32, anchor="e", justify=RIGHT) self.correct_lbl00.place(x=10, y=10) self.correct_lbl01.place(x=10, y=35) self.correct_lbl02.place(x=10, y=60) self.correct_lbl03.place(x=190, y=60) self.correct_lbl04.place(x=10, y=85) self.correct_lbl04_1.place(x=235, y=85) self.correct_lbl05.place(x=10, y=110) self.correct_lbl06.place(x=166, y=110) self.correct_lbl07.place(x=10, y=135) self.correct_lbl08.place(x=10, y=160) self.correct_lbl08_1.place(x=220, y=160) self.correct_entry00 = ttk.Entry(self.master, justify=tkm.LEFT, width=13) self.correct_entry01 = ttk.Entry(self.master, justify=tkm.LEFT, width=13) self.correct_combo02 = ttk.Combobox(self.master, justify=tkm.CENTER, width=13) self.correct_combo03 = ttk.Combobox(self.master, justify=tkm.CENTER, width=16) self.correct_date04 = DateEntry(self.master, date_pattern='yyyy/mm/dd', width=13) self.correct_entry05 = ttk.Entry(self.master, justify = tkm.LEFT, width = 13) self.correct_entry06 = ttk.Entry(self.master, justify=tkm.LEFT, width=5) self.correct_entry07 = ttk.Entry(self.master, justify=tkm.LEFT, width=60) self.correct_entry08 = ttk.Entry(self.master, justify=tkm.RIGHT, width=13) self.correct_entry00.place(x=130, y=10) self.correct_entry01.place(x=130, y=35) self.correct_combo02.place(x=130, y=60) self.correct_combo03.place(x=280, y=60) self.correct_date04.place(x=130, y=85) self.correct_entry05.place(x=130, y=110) self.correct_entry06.place(x=280, y=110) self.correct_entry07.place(x=130, y=135) self.correct_entry08.place(x=130, y=160) self.correct_entry00.insert = SubWindow.set_correct_data.values_00 def main(): win = tkm.Tk() app = SubWindow(win) app.mainloop() if __name__ == '__main__': main()
まだ回答がついていません
会員登録して回答してみよう