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

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

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

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

Q&A

解決済

1回答

1426閲覧

PyQt5で、複数(2つ)のメニュー画面を用いる場合、一方の画面からもう一方の画面中のLabel(QLabel)のText内容(setText)を変更する方法を教えて下さい

Heromi

総合スコア15

Python 3.x

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

0グッド

1クリップ

投稿2018/10/15 06:25

前提・実現したいこと

PyQt5を使って、複数(2つ)のメニュー画面を切り替えるようなプログラムを開発しています。 ある一方のメニュー画面上の処理の結果により、もう一方のメニュー画面の表示内容(Label(QLabel)のText内容(setText))を変えたい時の方法が分かりません。 
より具体的には、下記ソースコードで、一方のメニュー画面であるWelcomeMenu中で、button2が押されたら、関数hello()に飛び、その関数の中で、もう一方(別のClass)のメニュー画面StartMenu中の関数であるshowlabel()中で定義しているlabel1の内容を変えたいのです。 このようなクラスをまたがるようなことを行いたい場合、どのようにすればご教示頂ければありがたいです。よろしくお願いします。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

python

1 2import sys 3from PyQt5.QtCore import QCoreApplication 4from PyQt5.QtWidgets import QApplication, QPushButton, QWidget, QTabWidget, QLabel 5 6class StartMenu(QWidget): 7 def __init__(self, parent): 8 super().__init__(parent) 9 self.master = parent 10 11 self.showlabel("Just Started") 12 13 self.button1 = QPushButton('Welcome', self) 14 self.button1.move(230, 120) 15 self.button1.clicked.connect(self.welcome) 16 17 self.quitbutton1 = QPushButton('exit', self) 18 self.quitbutton1.move (230, 200) 19 self.quitbutton1.clicked.connect(QCoreApplication.instance().quit) 20 21 def showlabel(self, text): 22 message = text 23 label1 = QLabel(self) 24 label1.setText(message) 25 label1.move(230,50) 26 label1.show() 27 28 def welcome(self): 29 self.master.setCurrentIndex(1) 30 31 32class WelcomeMenu(QWidget): 33 34 def __init__(self, parent): 35 super().__init__(parent) 36 self.master = parent 37 38 39 self.button2 = QPushButton('Hello', self) 40 self.button2.move(230, 120) 41 self.button2.clicked.connect(self.hello) 42 43 self.quitbutton2 = QPushButton('quit', self) 44 self.quitbutton2.move(230, 200) 45 self.quitbutton2.clicked.connect(self.quit) 46 47 def hello(self): 48 ap = StartMenu(self) #この部分をどのような記述にすべきなのでしょうか? 49 ap.showlabel("Hello!!!") #この部分をどのような記述にすべきなのでしょうか? 50 self.master.setCurrentIndex(0) 51 52 def quit(self): 53 self.master.piyo_piyo("piyo_piyo") 54 self.master.setCurrentIndex(0) 55 56 57class App(QTabWidget): 58 def __init__(self): 59 super().__init__() 60 self.setWindowTitle("Hello") 61 62 self.tab1 = StartMenu(self) 63 self.tab2 = WelcomeMenu(self) 64 65 66 self.addTab(self.tab1, "StartMenu") 67 self.addTab(self.tab2, "WelcomeMenu") 68 69 self.setStyleSheet("QTabWidget::pane { border: 0; }") 70 #self.tabBar().hide() 71 self.resize(500, 300) 72 self.move(100, 0) 73 74 def piyo_piyo(self, text): 75 print(text) 76 77 78def main(): 79 app = QApplication(sys.argv) 80 ex1 = App() 81 ex1.show() 82 sys.exit(app.exec_()) 83 84 85if __name__ == '__main__': 86 main() 87

試したこと

関数hello()中に、「#この部分をどのような記述にすべきなのでしょうか?」の行のコマンドを書いたのですが、効果はありませんでした。  クラスの根本的な事を私は理解していないと思っています。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

WelcomeMenu クラスの master が親ウィジェットの参照なので、それを経由して、tab1 にアクセスすればよいのではないでしょうか?

変更点1

def showlabel(self, text): message = text self.label1 = QLabel(self) self.label1.setText(message) self.label1.move(230, 50) self.label1.show()

変更点2

def hello(self): ap = StartMenu(self) #この部分をどのような記述にすべきなのでしょうか? ap.showlabel("Hello!!!") #この部分をどのような記述にすべきなのでしょうか? self.master.setCurrentIndex(0) self.master.tab1.label1.setText("Hello World")

投稿2018/10/15 06:41

tiitoi

総合スコア21956

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

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

Heromi

2018/10/16 06:25

アドバイス頂いた通りに修正したら、問題解決しました。 master.tab1 とする事、本当に勉強になりました。 有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問