Добавьте 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++, хотя он по-прежнему указывает на допустимую ошибку в авторском коде, поэтому я не буду удалять его, поскольку он все еще может быть полезен для кого-то.

Другие вопросы по тегам