我需要在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)
答案 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 ++编写的,虽然它仍然指出了作者代码中的有效错误,所以我不会删除它,因为它可能对某人有用。