PyQt4中的多个类

4 投票
2 回答
1921 浏览
提问于 2025-04-17 19:47

我刚学完Python的基础,现在想用PyQt4来做图形界面。不过我现在遇到麻烦了,不知道怎么用多个类。我花了很多时间在网上找答案,但始终没找到合适的,所以希望你们能帮帮我。

这是我的示例代码:

import sys
from PyQt4 import QtGui, QtCore

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):

        self.b1 = QtGui.QPushButton("Button", self)
        self.b1.move(100,100)


        self.setGeometry(300,300,200,200)
        self.setWindowTitle("Example")
        self.show()

class Bar(QtGui.QMainWindow):

    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.initUI()

    def initUI(self):

        self.statusBar().showMessage("Statusbar")


def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec())

if __name__ == "__main__":
    main()

现在只有“Example”类里的按钮显示出来,而“Bar”类里的状态栏却没有。那么我该怎么才能同时使用这两个类呢?是不是一个类需要从另一个类继承什么东西?抱歉如果我说得很笨,可能还有很多错误,但如果你能帮我,我会非常感谢!

2 个回答

0

QMainWindow 是一个包含多个 QWidgets(小部件)和一个 QStatusBar(状态栏)的窗口,而 QWidget(小部件)本身是没有状态栏的。你需要调整一下你的继承结构。

import sys
from PyQt4 import QtCore, QtGui

class Example(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(Example, self).__init__(parent)
        self.statusBar().showMessage("howdy stackoverflowers!!")

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())
5

你需要创建一个 Bar 对象,并调用它的 show 方法:

def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    bar = Bar()
    bar.show()
    sys.exit(app.exec_())

如果你想把按钮和状态栏放在一个窗口里,就把所有的控件放进 QMainWindow 里:

import sys
from PyQt4 import QtGui, QtCore

class Bar(QtGui.QMainWindow):

    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.initUI()

    def initUI(self):
        self.setGeometry(300,300,200,200)
        self.b1 = QtGui.QPushButton("Button", self)
        self.b1.move(100,100)
        self.setWindowTitle("Example")
        self.statusBar().showMessage("Statusbar")

def main():
    app = QtGui.QApplication(sys.argv)
    bar = Bar()
    bar.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

撰写回答