Issue
In panel.py
the class that references buttonA
in class cannot be signaled.
But in the panel2.py
reference buttonA
class can be achieved
If you want to repeat the use of buttonA
class in the panel.py
class, how to deal with such a problem. Try to inherit buttonA
class can only occur once btnA1
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_())
Solution
In panel.py
, in your createPanel
function you have to use an instance, in this case self
, when declaring instance variables.
This should work:
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):
self.a1 = buttonA.ButtonA()
self.a2 = buttonA.ButtonA()
self.v1 = self.a1.createButton()
self.v2 = self.a2.createButton()
vbox = QVBoxLayout()
vbox.addLayout(self.v1)
vbox.addLayout(self.v2)
self.setLayout(vbox)
if __name__ == "__main__":
app = QApplication(sys.argv)
p = Panel()
p.createPanel()
p.show()
sys.exit(app.exec_())
Answered By - U12-Forward
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.