毎度のことお世話になっております。
現在、python3.4言語でPyQt4を学んでいます。
本当ならPyQt4の書籍で学びたいのですが、
今現在、日本語によるものがないので、仕方なしに
Qt4の書籍を読み、PyQt4のドキュメントと照らし合わせながら学習を進めているという状況です。
ここで本題の質問なのですが、このコードを見てください。
python
1class Fusen(QWidget): 2 def __init__(self, mainwindow): 3 super().__init__() 4 self.createButton(mainwindow) 5 def createButton(self, mainwindow): 6 newFusenTB = QToolButton() 7 newFusenTB.setText('+') 8 newFusenTB.clicked.connect(lambda: mainwindow.createNewFusen()) # 問題のコード 9 ####Widgetの設定は省略#### 10 11class MainWindow(QMainWindow): 12 def __init__(self): 13 super().__init__() 14 self.createWindow() 15 def self.createWindow(self): 16 self.m_newFusenAct = QAction('&New Fusen', self) 17 self.m_newFusenAct.triggered.connect(lambda: self.createNewFusen()) 18 self.menubar = self.menuBar() 19 filemenu = self.menuBox.addMenu('&File') 20 filemenu.addAction(self.m_newFusenAct) 21 ###Windowの設定は省略### 22 def createNewFusen(self): 23 ptr = Fusen(self) #Fusenクラスのオブジェクト生成 24 ptr.show()
python
1MainWindow 2|-------------------------| 3|File| | # MenuBar 4|-------------------------| 5| | 6| | 7|-------------------------| 8 9Fusen 10|-------------------------| 11| [+] | # [+] は ToolButton 12|-------------------------| 13| | 14| | 15|-------------------------|
このプログラムを起動させると、まずMainWindowが表示されて、そのあとメニューバーのFile->NewFusenをクリックします。
そうすると、別のウィンドウであるFusenが表示される。
そして、Fusenの[+](ToolButton)をクリックしても、同じく新しいFusenが表示される。というプログラムになる予定です。
ですが、バグが発生しまして、
メニューのNewFusenのボタンをクリックして、Fusenクラスのオブジェクトが生成されるとき、
Fusenクラスのコンストラクタで、[+]ツールボタンが生成されると同時にconnectされているスロットが読まれて、また新たにFusenクラスのオブジェクトが生成される。(もしかしたら生成されるというのは勘違い?)
という、無限ループに陥ってしまうというわけです。
質問としては、
第一に無限ループを脱出する方法なのですが、
考えてみたのですが、どうも思い浮かびません。
解決策の予想ですが、どうもこの「シグナルとスロット」の関係にあるのではないかと思っているのですが、
どうなのでしょうか。
皆さんのお力を借りたく質問させてもらいましたが、
こちらの質問、説明に不備等がありましたら、
訂正いたしますので、ご意見をお聞かせください。
どうかよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/16 23:31