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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

486閲覧

moduleで表示したGUIのボタンから読み込み元のGUIメソッドを呼び出したい

tomo1998

総合スコア34

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2018/10/25 21:25

前提・実現したいこと

ボタンを押したら本プログラム側のGUIを閉じて、自作したModuleにあるGUIで画面を表示する、といった仕組みになっているプログラムを作りました
そこで次は、ModuleのGUIにボタンを追加してこのボタンを押したらModuleのGUIを閉じて本プログラム側のGUIを再び呼び出すようにする・・・といった仕様にしたいのですがなかなかうまく行きません。
なのでModule側から本プログラム側のGUIを呼び出せる方法を教えてください

該当のソースコード

本プログラム側のコードはこんな感じになっています

python3

1import tkinter as tk 2import Module.Messen1 as m1 #読み込むモジュールファイルの位置 3def menu_gui(): 4 def measuring01_button(): 5 root.destroy() 6 measuring01_gui() #読み込んだモジュールのgui表示メソッド 7 8 root=tk.Tk() 9 root.title("Test Programm") 10 11 Button001=tk.Button(Frame001,text="Test001",command=measuring01_button) 12 Button001.grid(column=0,row=2) 13 14 root.mainloop() 15 16menu_gui()

試したこと

読み込んだModule先でボタンを設置し、ボタンを押したら『menu_gui()』を呼び出すように設定したので、これで本プログラム側のGUIをまた呼び出せれると思ったのですがどういうわけか
NameError: name 'menu_gui' is not defined
というエラーが・・・
一体どうすればModule側から本プログラム側のGUIを呼び出せれますか?

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

本来であれば、importして呼び出す必要がありますが、循環参照になるため、一工夫必要です。

一つの例として、以下のコードを提示します。これは元に戻るために呼んで欲しい関数を渡す方法です。

python

1# N1.py 2import tkinter as tk 3 4from N2 import startup2 5 6def startup(): 7 8 def btn_click(): 9 main.destroy() 10 startup2(startup) 11 12 main = tk.Tk() 13 main.title("teratail 154332") 14 button = tk.Button( text="Test", command=btn_click) 15 #button.pack() 16 button.grid(column=1, row=2) 17 18 main.mainloop() 19 20startup()

python

1# N2.py 2import tkinter as tk 3 4#from N1 import startup 5 6def startup2(parent_startup): 7 8 def btn_click(): 9 main.destroy() 10 parent_startup() 11 12 main = tk.Tk() 13 main.title("NO2 teratail 154332") 14 button = tk.Button( text="Test2", command=btn_click) 15 #button.pack() 16 button.grid(column=1, row=2) 17 18 main.mainloop()

bash

1$ python N1.py

投稿2018/10/29 08:49

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomo1998

2018/10/29 11:11

なるほど! parentを関数の前につければ呼び出し元のメソッドを呼び出せれるんですね! 助かりました!ありがとうございますー!
t_obara

2018/10/30 03:54

別に引数の名称はなんでも良いので、「parent」という名称に意味はないですよ、念のため。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問