python pyqt5类引用
panel.py类中引用buttonA的类无法发出信号 但是在panel2.py参考buttonA类中可以实现 如果要在panel.py类中重复使用buttonA类,请说明如何处理此类问题。尝试继承buttonA类只能发生一次btnA1 钮扣 panel.py 面板2.pypython pyqt5类引用,python,pyqt,pyqt5,Python,Pyqt,Pyqt5,panel.py类中引用buttonA的类无法发出信号 但是在panel2.py参考buttonA类中可以实现 如果要在panel.py类中重复使用buttonA类,请说明如何处理此类问题。尝试继承buttonA类只能发生一次btnA1 钮扣 panel.py 面板2.py 在panel.py中,在createPanel函数中,在声明实例变量时,必须使用实例,在本例中为self 这应该起作用: panel.py #!/usr/bin/env python from PyQt5.QtWidgets
在
panel.py
中,在createPanel
函数中,在声明实例变量时,必须使用实例,在本例中为self
这应该起作用:
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_())
虽然这将修复OPs代码,但并不能真正解释原因。问题在于,在panel.py中,
ButtonA
类将信号连接到自己的插槽。但是createPanel
方法允许垃圾收集ButtonA
的实例,然后会自动断开这些插槽。在panel2.py中,ButtonA
的实例是全局变量,因此它们在脚本退出之前不会被垃圾收集。非常感谢您的精彩解释。
#!/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_())
#!/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_())
#!/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_())