panel.py不能发出在类中引用buttonA的类的信号
但是在panel2.py参考按钮中可以实现一个类
如果要在panel.py类中重复使用buttonA类,如何处理此类问题。尝试继承buttonA类只能出现一次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_())

最佳答案

panel.pycreatePanel函数中,在声明实例变量时必须使用实例,在本例中为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_())

关于python - python pyqt5类引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46889571/

10-12 18:17