質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

解決済

python pandasデータをダブルクリックで別画面に表示したい

Kazu
Kazu

総合スコア5

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

1回答

0評価

0クリップ

305閲覧

投稿2022/03/07 01:43

編集2022/03/08 09:04

前提・実現したいこと

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()

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

Kazu

2022/03/07 06:39

self.correct_entry00.insert = SubWindow.set_correct_data.values_00のような 記載で class SubWindowで設定した def set_correct_data(self): values_00 = self.tree.item(selected_item)['values'][0] # 値の取得(ID取得) のデータを class CorrectWindowの self.correct_entry00にinsertし表示を行いたいのですが 表示方法が分かりません。 よろしくお願い致します。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。