使用している言語
Python3
前提・実現したいこと
①「quit」ボタンを押してウィンドウを閉じたい。さらに、コンソール画面の状態を「In [1] 」のように新しいコードを実行できる状態(「実行待ち」の状態)にしたい。
②「def click_import_csv()」内のfilename, dfをローカル変数からグローバル変数にしたい。
該当のソースコード
def import_csv_and_confirm(): #パス取得 & CSV読込・データ列(先頭・最後尾)の確認 print(""" ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ インポートするCSVを選択!!(別ウィンドウが起動) ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ """) #パス取得--------------------------------------------------- import tkinter as tk from tkinter.filedialog import askopenfilename root=tk.Tk() root.withdraw() filename_csv_import = askopenfilename() # show an "Open" dialog box and return the path to the selected file #CSV読込・データ列(先頭・最後尾)の確認--------------------------------------------------- import pandas as pd df_csv_import = pd.read_csv(filename_csv_import) return filename_csv_import, df_csv_import # df_csv_import.head(), df_csv_import.tail() filename, df = import_csv_and_confirm() #--------------------------------------------------- import tkinter as tk from tkinter import messagebox as mbox root = tk.Tk() root.title("Hello, World!") #タイトル作成 root.geometry("500x500") #縦画面のサイズ指定 # ラベルを作成--------------------------------------------------- label = tk.Label(root, text='インポートするCSVを選択!!(別ウィンドウが起動)') label.pack() # ボタンを押した時 --------------------------------------------------- def click_import_csv(): filename, df = import_csv_and_confirm() mbox.showinfo('confirm', filename + 'デスネ') res1 = tk.Label(root, text=filename) res1.pack() res2 = tk.Label(root, text=df) res2.pack() return filename, df #a, b = click_import_csv() #print(a) #print(b) #ボタンを使って Tkinter ウィンドウを閉じる--------------------------------------------------- def endup1(): root.destroy def endup2(): root.quit() def endup3(): root.destroy exit() def endup4(): root.quit() exit() def endup5(): import sys root.destroy sys.exit() def endup6(): import sys root.quit sys.exit() # ボタンを作成 --------------------------------------------------- button1 = tk.Button(root, text='csvファイルをimport', command=click_import_csv) button1.pack() button2 = tk.Button(root, text='quit', command=endup6) button2.pack() root.mainloop()
試したこと
①-1 commandに直接「root.destroy」を入力
→ウィンドウ:閉じた。
コンソール画面:まだ「実行中」の状態。
①-2 command=endup1
→ウィンドウ:同様に「root.destroy」のみ実行されるはずなのに、ウィンドウは閉じない。
コンソール画面:ウィンドウが閉じないので、「実行中」の状態。しかし、ウィンドウ右上の「✖」で閉じるとコンソール画面は「実行待ち」の状態になる。
①-3 command=endup2
→ウィンドウ:閉じずに、フリーズする。
コンソール画面:ウィンドウはフリーズするものの、「実行待ち」の状態になる。
①-4 command=endup3
→ウィンドウ:閉じない。
コンソール画面:ウィンドウが閉じないので、「実行中」の状態。
①-5 command=endup4
→ウィンドウ:閉じる。
コンソール画面:すべてのコンソールがリセットされて、「実行待ち」の状態になる。
※これが一番理想に近いが、できればすべてのリセットは避けたい。
①-6 command=endup5
→ウィンドウ:閉じずに、フリーズする。
コンソール画面:「UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)」と表示されて、「実行待ち」の状態になる。
①-7 command=endup6
→ウィンドウ:閉じずに、フリーズする。
コンソール画面:「UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)」と表示されて、「実行待ち」の状態になる。
②-1 戻り値に対して「a, b = click_import_csv()」として表示させようと試みたが、コンソールは「実行中」の状態なので、変数エクスプローラーには表示されない。
(【質問:コンソールに表示されないだけで、a, b には戻り値が入っているということなのでしょうか?】)
ボタンを実行したときだけcsvを読み込んでdfを作りたいので、最初から関数の外に変数を置いてしまうと未定義変数としてエラーになる。
補足情報(FW/ツールのバージョンなど)
Python3
Anaconda navigator 1.9.12
Spyder3.3.6