1
panel.pyクラスのbuttonAを参照するクラスにはシグナルを送ることができません しかし、panel2.pyの参照ボタンでは、クラスAを達成することができます パネルでbuttonAクラスの使用を繰り返す場合。 pyクラス、そのような問題に対処する方法。だけbtnA1一度python pyqt5クラス参照
buttonA.py
#!/usr/bin/env python
from PyQt5.QtWidgets import QWidget, QPushButton, QVBoxLayout, QApplication
class ButtonA(QWidget):
def __init__(self):
super().__init__()
def createButton(self):
self.btnA1 = QPushButton("btnA1", self)
self.btnA1.pressed.connect(self.onbtnA1Pressed)
self.btnA1.released.connect(self.onbtnA1Released)
vbox = QVBoxLayout()
vbox.addWidget(self.btnA1)
return vbox
def onbtnA1Pressed(self):
self.btnA1.setText("btnA1 clicked")
def onbtnA1Released(self):
self.btnA1.setText("btnA1")
panel.py
#!/usr/bin/env python
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QApplication
import sys, buttonA
class Panel(QWidget):
def __init__(self):
super().__init__()
def createPanel(self):
a1 = buttonA.ButtonA()
a2 = buttonA.ButtonA()
v1 = a1.createButton()
v2 = a2.createButton()
vbox = QVBoxLayout()
vbox.addLayout(v1)
vbox.addLayout(v2)
self.setLayout(vbox)
if __name__ == "__main__":
app = QApplication(sys.argv)
p = Panel()
p.createPanel()
p.show()
sys.exit(app.exec_())
panel2.py
#!/usr/bin/env python
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout
import buttonA, sys
app = QApplication(sys.argv)
w = QWidget()
a1 = buttonA.ButtonA()
a2 = buttonA.ButtonA()
v1 = a1.createButton()
v2 = a2.createButton()
vbox = QVBoxLayout()
vbox.addLayout(v1)
vbox.addLayout(v2)
w.setLayout(vbox)
w.show()
sys.exit(app.exec_())
これはのOPコードを修正しますが、それは本当に理由を説明しません。問題は、* panel.py *において、 'ButtonA'クラスがシグナルを**自分の**スロットに接続することです。しかし、 'createPanel'メソッドは、' ButtonA'のインスタンスをガベージコレクトすることができ、自動的にそれらのスロットを切断します。 * panel2.py *では、 'ButtonA'のインスタンスはグローバル変数なので、スクリプトが終了するまでガベージコレクションされません。 – ekhumoro
大変ありがとうございます。 –