Добавьте QStatusBar в QVBoxLayout
Мне нужно добавить строку состояния под таблицей в 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 ответа
Идеальный способ показать строку состояния - это сначала наследовать от 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)
Это должен быть правильный способ сделать это.
Вам не нужно добавлять QLabel
в QStatusBar
Просто сделайте следующее:
self.statusBar = QStatusBar()
self.statusBar.showMessage("Some message")
...
Что ж, вы ошибаетесь в управлении макетами, чтобы макет был реализован, он должен существовать столько, сколько работает виджет, в котором вы его используете. Итак, в основном, что вам нужно сделать, это создать макет с new
и поместите его в какой-нибудь виджет.
В данный момент вы создаете макет и используете его для self
с QVBoxLayout(self)
которая является временной переменной, а затем создает еще одну временную переменную.
Правильный способ создать макет будет:
QVBoxLayout *layout = new QVBoxLayout (self);
layout->addWidget (...);
layout->addWidget (...);
РЕДАКТИРОВАТЬ: Этот ответ был написан для C++, хотя он по-прежнему указывает на допустимую ошибку в авторском коде, поэтому я не буду удалять его, поскольку он все еще может быть полезен для кого-то.