如何使用主类中的第二类作为方法

时间:2019-04-21 22:42:50

标签: python class inheritance pyqt5

我的主要班级桌面不返回第二班级的按钮。为什么会发生这种情况。我正在主类中创建方法add_button而不使用第二类,但是由于继承,initUI的一部分停止工作,所以我接受了resolve创建其他类

class Another_desktop(QMainWindow):
    def add_button(self):
        self.btn_play=QPushButton()
        self.btn_play.setStyleSheet('background-color: blue')
        self.btn_play.setIcon(QtGui.QIcon('icons8-circled-play-120.png'))
        self.btn_play.setIconSize(QtCore.QSize(22,22))
        self.btn_play.move(10,40)
        self.btn_stop=QPushButton()
        self.btn_stop.setStyleSheet('background-color: blue')
        self.btn_stop.setIcon(QtGui.QIcon('icons8-pause-button-40.png'))
        self.btn_stop.setIconSize(QtCore.QSize(22,22))
        self.btn_stop.move(50,40)
        self.btn_next=QPushButton()
        self.btn_next.setStyleSheet('background-color: blue')
        self.btn_next.setIcon(QtGui.QIcon('icons8-back-40.png'))
        self.btn_next.setIconSize(QtCore.QSize(22,22))
        self.btn_next.move(200,40)


class Desktop(QMainWindow):
    def __init__(self):
        super().__init__()
        self.__count=0
        self.__layout=0
        self.add_button()
        self.__button_open()
        self.click()
        self.initUI()

    def initUI(self):
        exitAction = QAction(QIcon('exit.png'), '&Exit', self)
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('Exit application')
        exitAction.triggered.connect(qApp.quit)
        self.statusBar()
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAction)
        self.background=self.setStyleSheet('background-color:blue')
        self.size=self.setGeometry(200,200,300,300)
        self.title=self.setWindowTitle('app')
        self.show()

    def add_button(self):
        self.add_but=Another_desktop().add_button()

1 个答案:

答案 0 :(得分:1)

如果要将按钮添加到主类中,则不应创建其他类。

在Qt中,像按钮这样的窗口小部件要成为窗口的一部分,它必须是窗口的子级,并且要成为窗口的子级,至少有两种方法:将窗口小部件设置为所属的布局到窗口以具有该窗口的元素作为父元素,对于QPushButton之类的小部件,父元素在构造函数中传递。

另一方面,我看到您的代码没有意义,例如:

self.background=self.setStyleSheet('background-color:blue')
self.size=self.setGeometry(200,200,300,300)
self.title=self.setWindowTitle('app')

Qt中的setXXX函数不返回任何内容,因为它们是设置器,因此self.background,self.size和self.title将为None。

from PyQt5 import QtCore, QtGui, QtWidgets


class Desktop(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.__count = 0
        self.__layout = 0
        self.add_button()
        # self.__button_open()
        # self.click()
        self.initUI()

    def initUI(self):
        exitAction = QtWidgets.QAction(QtGui.QIcon("exit.png"), "&Exit", self)
        exitAction.setShortcut("Ctrl+Q")
        exitAction.setStatusTip("Exit application")
        exitAction.triggered.connect(QtWidgets.qApp.quit)
        menubar = self.menuBar()
        fileMenu = menubar.addMenu("&File")
        fileMenu.addAction(exitAction)
        self.setStyleSheet("background-color:blue")
        self.setGeometry(200, 200, 300, 300)
        self.setWindowTitle("app")
        self.show()

    def add_button(self):
        self.btn_play = QtWidgets.QPushButton(self) # <--- set parent of btn_play
        # to self
        self.btn_play.setStyleSheet("background-color: blue")
        self.btn_play.setIcon(QtGui.QIcon("icons8-circled-play-120.png"))
        self.btn_play.setIconSize(QtCore.QSize(22, 22))
        self.btn_play.move(10, 40)
        self.btn_stop = QtWidgets.QPushButton(self)
        self.btn_stop.setStyleSheet("background-color: blue")
        self.btn_stop.setIcon(QtGui.QIcon("icons8-pause-button-40.png"))
        self.btn_stop.setIconSize(QtCore.QSize(22, 22))
        self.btn_stop.move(50, 40)
        self.btn_next = QtWidgets.QPushButton(self)
        self.btn_next.setStyleSheet("background-color: blue")
        self.btn_next.setIcon(QtGui.QIcon("icons8-back-40.png"))
        self.btn_next.setIconSize(QtCore.QSize(22, 22))
        self.btn_next.move(200, 40)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = Desktop()
    w.show()
    sys.exit(app.exec_())