在QVBoxLayout中添加QStatusBar

时间:2014-02-10 09:55:25

标签: python qt pyqt qstatusbar

我需要在QVBoxLayout的表格下方添加状态栏。问题是我不知道为什么状态栏没有显示。在QBoxLayout中,我添加了一个tableView,在表格下我需要有状态栏。这是我的代码的一部分:

  self.setGeometry(200,200,600,600)
  if self._model.productName()!='':
    self.setWindowTitle('TITLE')
  QVBoxLayout(self).addWidget(self.tv)

  # add staus bar
  statusBar = QStatusBar()
  statusLabel = QLabel("Here comes the status bar message!!")
  statusBar.addWidget(statusLabel)
  QVBoxLayout(self).addWidget(statusBar)

3 个答案:

答案 0 :(得分:3)

显示状态栏的理想方法是首先从QtGui.QMainWindow类继承,然后使用statusBar方法创建状态栏。

所以在创建GUI的主类中,你可以这样做:

class Window(QtGui.QMainWindow):
    def __init__(self, parent):
       super(Window, self).__init__()
       self.statusbar = self.statusBar()

然后,您可以通过以下方式在状态栏中显示消息:

self.statusbar.showMessage('This message will be shown in the status bar')

不需要使用QLabel来显示状态栏消息。

或者,您可以从QtGui.QWidget类继承并执行此操作:

self.statusbar = QStatusBar()
self.statusbar.showMessage('Some status bar message')

另外,正如one of the other answers指出的那样,你对布局的创建方式错了。

self.layout = QVBoxLayout(self)
self.layout.addWidget(self.tv)

这应该是正确的方法。

答案 1 :(得分:2)

您无需在QLabel中添加QStatusBar,只需执行以下操作:

self.statusBar = QStatusBar()
self.statusBar.showMessage("Some message")
...

答案 2 :(得分:1)

您在管理布局方面存在错误,要实现布局,只要您使用它的小部件存在,它就需要存在。所以基本上你要做的就是用new创建布局并将其放在一些小部件中。

您目前正在做的是创建布局并将其用于self QVBoxLayout(self),这是临时变量,然后再创建另一个临时变量。

创建布局的正确方法是:

 QVBoxLayout *layout = new QVBoxLayout (self);
 layout->addWidget (...);
 layout->addWidget (...);

编辑:这个答案是为C ++编写的,虽然它仍然指出了作者代码中的有效错误,所以我不会删除它,因为它可能对某人有用。