如何在PyQt5中覆盖来自另一个类的变量?

2024-04-20 11:22:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发PyQt5应用程序:

我有两个类(主窗口和设备面板)。 在主窗口中有一些按钮(qbtn),这使得设备面板在被单击时出现。 我的问题是我需要在'qbtn'click事件上重写devicePanel类中的一些变量。在

所以:

什么时候主窗口.qbtn按下时,它将使devicePanel出现并覆盖它的一些变量(l\u ip、l\st等)。在

我无法将主窗口设为devicePanel的父级,请不要建议,它不会解决我的问题。

这是我的代码:

class mainWindow(QWidget):

    def __init__(self, parent=None):

        super(mainWindow, self).__init__(parent)
        self.initUI()


    def initUI(self):

        self.resize(1280, 800)
        self.setWindowTitle('Test window')
        self.genBtns()
        self.show()


    def genBtns(self):

        devices = []
        devices.append(['A', 21, 1, 'W', '2', 'n/a'])
        devices.append(['A', 22, 2, 'O', '0', 'n/a'])
        devices.append(['A', 31, 3, 'W', '32', '11'])

        for a in range (0, int(len(devices))):
            self.addButton(devices[a][0], devices[a][1], devices[a][2],  devices[a][3],  devices[a][4],  devices[a][5])


    def addButton(self, z, x, y, status, bp, cp):

        qbtn = QPushButton(str(x), self)
        qbtn.clicked.connect(lambda: self.buttonClicked(z, x, y, status, bp, cp))    # BUTTON CLICK EVENT
        qbtn.resize(70, 70)
        qbtn.move(20, 20)
        if (status == 'O'):
            qbtn.setStyleSheet("background-color: red")
        elif (status == 'W'):
            qbtn.setStyleSheet("background-color: blue")
        else:
            qbtn.setStyleSheet("background-color: gray")    


    def buttonClicked(self, z, x, y, status, bp, cp): # BUTTON CLICK METHOD

        self.dp = devicePanel()
        self.dp.initUI()
        self.dp.l_ip = '192.168.0.134'
        self.dp.show()


class devicePanel(QWidget):

    l_ip = '192.168.0.135'    #NEED TO CHANGE THESE VALUES!
    l_st = 'active'
    l_bp = '10'
    l_cp = '2'
    l_bc = '90'
    l_cc = '150'
    l_sc = '240'


    def __init__(self):

        super(devicePanel, self).__init__(None)
        self.addDPbtns()
        self.initUI()

Tags: selfipinitdefstatuscpdpbackground
1条回答
网友
1楼 · 发布于 2024-04-20 11:22:09

更新您的类,以便它接受参数来设置这些值。在本例中,l_xx类变量只是默认值。self.xx变量是实变量。它们将被设置为您传入的任何内容,或者如果您不传入任何内容,它们将成为默认值。在

class devicePanel(QWidget):

    l_ip = '192.168.0.135'    #NEED TO CHANGE THESE VALUES!
    l_st = 'active'
    l_bp = '10'
    l_cp = '2'
    l_bc = '90'
    l_cc = '150'
    l_sc = '240'

    def __init__(ip=None, st=None, bp=None, cp=None, bc=None, cc=None, sc=None):
        super(devicePanel, self).__init__()
        self.ip = ip or self.l_ip
        self.st = st or self.l_st
        self.bp = bp or self.l_bp
        self.cp = cp or self.l_cp
        self.bc = bc or self.l_bc
        self.cc = cc or self.l_cc

然后像这样实例化它

^{pr2}$

相关问题 更多 >