pyqt — как убрать бордер с виджета в статусбаре?

Я использую виджеты QLabel для отображения сообщений об ошибках пользователю в строке состояния. Это отлично работает со следующим кодом;

self.statusbar = self.statusBar()

label = QtGui.QLabel("this is a test error message")
stylesheet = """
QLabel {
font-weight: bold;
color: #FF0000;
}
"""
label.setStyleSheet(stylesheet)
self.statusbar.addWidget(label)

Единственная проблема в том, что вокруг виджетов есть рамка, от которой я не могу избавиться. Функционально это не проблема, поскольку сообщение все еще видно, но выглядит довольно уродливо, и я хотел бы избавиться от него. Я не могу понять, откуда он исходит. Будь то что-то, что мне нужно установить в строке состояния или виджете. Я попытался изменить таблицу стилей как для строки состояния, так и для метки, чтобы добавить «граница: 0px», но безрезультатно. Я попытался установить рамку меток на label.setFrameShape(QtGui.QFrame.NoFrame), но это тоже не так.

У кого-нибудь есть идеи, как я могу от него избавиться?


person ollie dunn    schedule 10.03.2011    source источник


Ответы (2)


Вы делаете это с помощью таблиц стилей. Вероятно, у вас есть такая строка, как Application app(argc, argv);

под ним добавьте такой: app.setStyleSheet("QStatusBar::item {граница: 0px сплошной черный}; ");

и эти надоедливые коробки исчезнут.

person bostonsqd    schedule 16.03.2011
comment
как бы вы это сделали, если бы не использовали таблицы стилей? Я загружаю предопределенную палитру. Установка таблицы стилей, как вы это сделали, стирает все остальные настройки палитры и все портит. - person BigBrownBear00; 11.07.2014

попробуйте использовать self.statusbar.showMessage('this is a test error message'), так как QStatusBar не предназначен для отображения меток. Если вам нужно больше гибкости, чем это, вы можете подумать о создании подкласса QStatusBar и изменении его функции paintEvent на метки особого случая. Любой из этих подходов будет намного проще поддерживать, чем устанавливать таблицы стилей для каждой метки, которую вы хотите, но в любом случае там, но, как обычно, YMMV.

для получения дополнительной информации посетите страницу руководства для QStatusBar

person theheadofabroom    schedule 11.03.2011
comment
Спасибо за ваш ответ. Я использую showMessage для различных типов обратной связи, включая сообщения об ошибках. Ошибки просто не выделяются. Итак, глядя на документы, я добавил виджет, чтобы я мог контролировать его внешний вид. В документах указано, что showMessage предназначен для временных сообщений, addWidget — для отображения обычных и постоянных сообщений, так что это казалось лучшим способом. Однако мне нравится идея создания подкласса QStatusBar. Это может дать мне гибкость, в которой я нуждаюсь. Я посмотрю на это. - person ollie dunn; 13.03.2011