简体   繁体   English

python pyqt5 类引用

[英]The python pyqt5 class references

panel.py The class that references buttonA in class can not 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. panel.py 类中引用buttonA的类不能发信号 但是在panel2.py中引用buttonA类可以实现 如果要在panel.py类中重复使用buttonA类,这样的问题怎么处理. Try to inherit buttonA class can only occur once btnA1尝试继承 buttonA 类只能出现一次 btnA1

buttonA.py按钮A.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面板.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面板2.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_())

In panel.py , in your createPanel function you have to use an instance, in this case self , when declaring instance variables.panel.py ,在您的createPanel函数中,您必须在声明实例变量时使用一个实例,在本例中为self

This should work:这应该有效:

panel.py面板.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_())

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM