2

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

  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)
4

3 回答 3

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')

此外,正如其他答案之一指出的那样,您对布局的创建方式有误。

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

这应该是正确的方法。

于 2014-02-10T10:06:43.730 回答
2

您不需要添加QLabelin QStatusBar,只需执行以下操作:

self.statusBar = QStatusBar()
self.statusBar.showMessage("Some message")
...
于 2014-02-10T10:07:05.277 回答
1

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

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

创建布局的正确方法是:

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

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

于 2014-02-10T10:17:30.870 回答