如何向这个基于PySide的ui添加状态

时间:2014-04-16 11:21:04

标签: python pyside

查看代码

import sys
from PySide import QtCore, QtGui


class MyWidget(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.quit = QtGui.QPushButton("Quit", self)
        self.setGeometry(300, 300, 250, 150)
        self.statusBar().showMessage('Ready')


app = QtGui.QApplication(sys.argv)
widget = MyWidget()
widget.show()
sys.exit(app.exec_())

现在我想做的就是添加状态。现在状态在QtGui.QMainWindow中可用 我怎样才能将这个事实添加到上面的程序中?在pyside编码中,似乎对于每个组件,我们需要创建一个类,并且一些连接到主类......这里的理论是什么?

我试过这样,但是没有用。

import sys
from PySide import QtCore, QtGui


class MyWidget(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.quit = QtGui.QPushButton("Quit", self)
        self.setGeometry(300, 300, 250, 150)
        self.statusBar().showMessage('Ready')
        self.s = MyStatus()

class MyStatus(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)

        self.statusBar().showMessage('Ready')

app = QtGui.QApplication(sys.argv)
widget = MyWidget()
widget.show()
sys.exit(app.exec_())

2 个答案:

答案 0 :(得分:1)

您不需要为每个组件创建一个类,但如果您想修改/覆盖每个组件的内置函数,则需要为它创建一个类。

要在主窗口中添加内容,只需创建一个对象并将其添加到布局中即可。如下:

import sys
from PySide import QtGui , QtCore

class MyStatusBar(QtGui.QStatusBar):
    def __init__(self, parent=None):
        super(MyStatusBar, self).__init__(parent)
    #Override any functions, or define new function for our status bar here

class MyMainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        #Set the size of the window
        self.setMinimumSize(300,300)
        #Create a status bar, from our OWN class
        self.status_bar = MyStatusBar(self)
        self.status_bar.setGeometry(QtCore.QRect(0, 0, 50, 50))
        self.status_bar.showMessage('Ready')
        #Add a simple quit button, from the DEFAULT class
        self.quit_button = QtGui.QPushButton(self)
        self.quit_button.clicked.connect(self.close)
        self.quit_button.setGeometry(QtCore.QRect(100, 100, 100, 35))
        self.quit_button.setText("Close")


#Start the application    
app = QtGui.QApplication(sys.argv)
top = MyMainWindow()
top.show()
app.exec_()

答案 1 :(得分:1)

如果你想要一个带状态栏的窗口,请使用QMainWindow:它有一个内置的(还有一个菜单栏,工具栏,停靠小部件等)。其他小部件没有这些内置功能,因此很自然地,它们没有像statusBar方法那样的东西。如果你坚持不使用QMainWindow而艰难地做事,你必须自己添加所有这些功能。

虽然我不推荐这样做,但这是一个简单的演示,它为QWidget添加状态栏:

import sys
from PySide import QtCore, QtGui

class MyWidget(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.central_widget = QtGui.QWidget(self)

        self.quit = QtGui.QPushButton("Quit", self)
        self.setGeometry(300, 300, 250, 150)

        layout = QtGui.QVBoxLayout(self.central_widget)
        layout.addWidget(self.quit)

        self.status = QtGui.QStatusBar(self)

        layout = QtGui.QVBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(self.widget)
        layout.addStretch()
        layout.addWidget(self.status)

        self.status.showMessage('Ready')

app = QtGui.QApplication(sys.argv)
widget = MyWidget()
widget.show()
sys.exit(app.exec_())