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

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

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

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

Tkinter

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

Q&A

解決済

1回答

1521閲覧

モジュールが、他のモジュールの値を変更可能か?

tomo1998

総合スコア34

Python 3.x

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

Tkinter

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

0グッド

0クリップ

投稿2018/11/14 20:45

前提・実現したいこと

importされたモジュールが他のモジュールの値を変更することは可能なのでしょうか?
例として、tkinterを使ったプログラムがあり
実行すると開かれる画面A(メインプログラム)と画面B(モジュール)があり、画面Bにはボタンがあってそれを押すと画面Aで表示される数値を1増やす
といったプログラム作成に挑んでみたのですがうまく行きません

該当のソースコード

メインプログラム MainProgram001

python3

1import tkinter as tk 2import ButtonDisplay as BD 3 4def Menu_GUI(): 5 6 root=tk.Tk() 7 label001=tk.Label(root,text="None") 8 label001.pack() 9 Sub= BD.Moduel001() 10 Sub.GUI() 11 root.mainloop() 12if __name__ == '__main__': 13 Menu_GUI() 14

モジュール側のコード ButtonDisplay

python3

1import tkinter as tk 2import MainProgram001 as MP1 3 4class Moduel001(object): 5 def __init__(self): 6 self.count=0 7 8 def GUI(self): 9 root=tk.Tk() 10 Button001=tk.Button(root,text="Push",command=self.Count) 11 Button001.pack() 12 root.mainloop() 13 14 def Count(self): 15 self.count=self.count+1 16 MP1.label001["text"]=self.count 17

エラーメッセージ

実行して、ボタンを押すと以下のエラーメッセージが出ます
画面Bモジュールは、画面Aのメインプログラムを読み込んでいるから、行ける、、、と思ったのですが、どうすれば画面Bが画面Aのラベルに表示された数字を更新できるでしょうか?

MP1.label001["text"]=self.count AttributeError: module 'MainProgram001' has no attribute 'label001'

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

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

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

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

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

guest

回答1

0

ベストアンサー

Tk初心者のため、お作法として正しいのかは分かりませんが、メイン側のラベルをモジュール側に渡すことで目的の動作ができるようになります。

メインプログラム MainProgram001

Python

1import tkinter as tk 2import ButtonDisplay as BD 3 4def Menu_GUI(): 5 root=tk.Tk() 6 label001=tk.Label(root,text="None") 7 label001.pack() 8 Sub= BD.Moduel001() 9 Sub.GUI(label001) # ラベルを渡す 10 root.mainloop() 11if __name__ == '__main__': 12 Menu_GUI()

モジュール側のコード ButtonDisplay

Python

1import tkinter as tk 2#import MainProgram001 as MP1 不要 3 4class Moduel001(object): 5 def __init__(self): 6 self.count=0 7 8 def GUI(self,main_label): 9 self.main_label = main_label # メイン側のラベルを保持 10 root=tk.Tk() 11 Button001=tk.Button(root,text="Push",command=self.Count) 12 Button001.pack() 13 root.mainloop() 14 15 def Count(self): 16 self.count=self.count+1 17 self.main_label["text"] = self.count 18 #MP1.label001["text"]=self.count

投稿2018/11/14 22:06

can110

総合スコア38266

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

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

tomo1998

2018/11/14 22:14

....!! うまく行った... なるほど!お互いにimportし合わないといけないのかと思ってたけどこれで行けるんですね モジュール化って難しい... とっても助かりました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問