python - python pyqt5 类引用

标签 python pyqt pyqt5

panel.py 中,引用类中 buttonA 的类无法发出信号。

但是在panel2.py中引用buttonA类就可以实现 如果想在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.py 中,在 createPanel 函数中,声明实例变量时必须使用实例,在本例中为 self

这应该有效:

面板.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/

相关文章:

python - PyQt5 unicode 翻译 : pylupdate5 outputs escape sequences

python - QLineEdit 更改边框颜色而不更改边框样式

python - 如何实现跨小部件状态的 QListWidget 项目的一致突出显示?

python - PyQt : How to create a lineItem between two button and can move with button?

python - 如何在 PyQt5 中更新窗口?

python - Selenium Python Firefox webdriver : can't modify profile

python时区GMT转换

python - 使用elasticsearch-dsl-py进行范围聚合

Python数据输出到Excel

python - 如何在主Python文件中使用多个.ui文件