Как узнать состав виджета для его полной кастомизации через setStyleSheet. PyQt5
Добрый день столкнулся с проблемой, что не могу управлять стилем виджета, так как не знаю к каким свойствам обратится, здесь нашел вот такой пример по кастомизации QCalendarWidget ссылка. Вопрос, как уважаемый, нашел такие атрибуты как '#qt_calendar_navigationbar'или 'CalendarWidget QToolButton::menu-indicator' когда задавал стиль. Подскажите способ как я могу узнать состав стандартного виджета. Заранее благодарю.
Ответы (1 шт):
Частично свойства описаны в Qt Style Sheets Reference
Но если этого мало, можете для любого виждета получить интересующее. Рекурсивно обойдите дерево деток нужного вам объекта и получите то что вам надо.
Приведу пример на c++ (надеюсь проблем переписать на python не будет)
// Функция рекурсивного обхода деток
static void dump_object_tree(QObject* o, QString pr=""){
foreach (QObject* child, o->children()) {
qDebug()<<QString("%1 %2 (%3)").arg(pr).arg(child->objectName()).arg(child->metaObject()->className());
dump_object_tree(child,pr+" ");
}
}
// и к примеру в конструкторе посмотрим состав QCalendarWidget, лежащего на форме
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
// .......
dump_object_tree(ui->calendarWidget);
}
В выводе получим:
" (QVBoxLayout)"
" (QCalendarModel)"
" qt_calendar_calendarview (QCalendarView)"
" qt_scrollarea_viewport (QWidget)"
" qt_scrollarea_hcontainer (QWidget)"
" (QScrollBar)"
" (QBoxLayout)"
" qt_scrollarea_vcontainer (QWidget)"
" (QScrollBar)"
" (QBoxLayout)"
" (QStyledItemDelegate)"
" (QHeaderView)"
" qt_scrollarea_viewport (QWidget)"
" qt_scrollarea_hcontainer (QWidget)"
" (QScrollBar)"
" (QBoxLayout)"
" qt_scrollarea_vcontainer (QWidget)"
" (QScrollBar)"
" (QBoxLayout)"
" (QItemSelectionModel)"
" (QHeaderView)"
" qt_scrollarea_viewport (QWidget)"
" qt_scrollarea_hcontainer (QWidget)"
" (QScrollBar)"
" (QBoxLayout)"
" qt_scrollarea_vcontainer (QWidget)"
" (QScrollBar)"
" (QBoxLayout)"
" (QItemSelectionModel)"
" (QTableCornerButton)"
" (QItemSelectionModel)"
" qt_calendar_navigationbar (QWidget)"
" qt_calendar_prevmonth (QPrevNextCalButton)"
" qt_calendar_nextmonth (QPrevNextCalButton)"
" qt_calendar_monthbutton (QToolButton)"
" (QMenu)"
" (QAction)"
" (QAction)"
" (QAction)"
" (QAction)"
" (QAction)"
" (QAction)"
" (QAction)"
" (QAction)"
" (QAction)"
" (QAction)"
" (QAction)"
" (QAction)"
" (QAction)"
" qt_calendar_yearbutton (QToolButton)"
" qt_calendar_yearedit (QSpinBox)"
" qt_spinbox_lineedit (QLineEdit)"
" (QWidgetLineControl)"
" qt_spinboxvalidator (QValidator)"
" (QHBoxLayout)"
" (QCalendarDelegate)"
" (QCalendarTextNavigator)"
Часть детей (типа QAction) интереса не представляют, но часть можем использовать. К примеру поменять фон кнопки предыдущего месяца:
#qt_calendar_prevmonth { background-color: green; }