как изменить фон заголовка QTreeWidget при наведении

#python #python-3.x #qt #pyqt5 #qtreewidget

#python #python-3.x #qt #pyqt5 #qtreewidget

Вопрос:

я создаю программу с QTreeWidget, и я не знаю, как изменить цвет фона заголовка при наведении, я пытался, но наведение не работает.Это мой код.

 self.mytreeview.setStyleSheet('''
QHeaderView::section {
    background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,
                                      stop:0 #616161, stop: 0.5 #505050,
                                      stop: 0.6 #434343, stop:1 #656565);
    color: white;
    padding-left: 4px;
    border: 1px solid #6c6c6c;
}
QHeaderView::section:hover {
background-color:blue;
    border: 2px solid red;
}
QTreeView {
    show-decoration-selected: 1;
    
    outline:0;
}

QTreeView::item {
    color:#f5f6f7;
    
}

QTreeView::item:hover {
    background: rgba(80, 120, 242, 100);
    border-top:1px solid #002cf2;
    border-bottom:1px solid #002cf2;
    
    
}

QTreeView::item:selected {
    background: rgb(80, 120, 242)
}


''')
self.mytreeview.verticalScrollBar().setStyleSheet(" QScrollBar:verticaln"
" {n"
"     background-color: #2A2929;n"
"     width: 15px;n"
"     margin: 15px 3px 15px 3px;n"
"     border: 1px transparent #2A2929;n"
"     border-radius: 4px;n"
" }n"
"n"
" QScrollBar::handle:verticaln"
" {n"
"     background-color: rgb(119, 139, 255);         /* #605F5F; */n"
"     min-height: 5px;n"
"     border-radius: 4px;n"
" }n"
" QScrollBar::handle:vertical:hovern"
" {n"
"     background-color:rgb(60, 73, 255);         /* #605F5F; */n"
"     min-height: 5px;n"
"     border-radius: 4px;n"
" }n"
"n"
" QScrollBar::sub-line:verticaln"
" {n"
"     margin: 3px 0px 3px 0px;n"
"     border-image: url(:/newPrefix/Simple_PySide_Base-master/icons/sort-up.png);n"
"     height: 10px;n"
"     width: 10px;n"
"     subcontrol-position: top;n"
"     subcontrol-origin: margin;n"
" }n"
"n"
" QScrollBar::add-line:verticaln"
" {n"
"     margin: 3px 0px 3px 0px;n"
"     border-image: url(:/newPrefix/Simple_PySide_Base-master/icons/sort-down.png);n"
"     height: 10px;n"
"     width: 10px;n"
"     subcontrol-position: bottom;n"
"     subcontrol-origin: margin;n"
" }n"
"n"
" QScrollBar::sub-line:vertical:hover,QScrollBar::sub-line:vertical:onn"
" {n"
"n"
"     border-image:url(:/newPrefix/Simple_PySide_Base-master/icons/sort-up-hover.png);n"
"     height: 10px;n"
"     width: 10px;n"
"     subcontrol-position: top;n"
"     subcontrol-origin: margin;n"
" }n"
"n"
"n"
" QScrollBar::add-line:vertical:hover, QScrollBar::add-line:vertical:onn"
" {n"
"     border-image: url(:/newPrefix/Simple_PySide_Base-master/icons/sort-down-hover.png);n"
"     height: 10px;n"
"     width: 10px;n"
"     subcontrol-position: bottom;n"
"     subcontrol-origin: margin;n"
" }n"
"n"
" QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:verticaln"
" {n"
"     background: none;n"
" }n"
"n"
"n"
" QScrollBar::add-page:vertical, QScrollBar::sub-page:verticaln"
" {n"
"     background: none;n"
" }")
  

Согласно @musicamante, теперь я отредактировал это с помощью моей полной таблицы стилей. Все работает нормально, единственная проблема в том, что наведение не влияет. это может работать с Qtabwidget или QtabelWidget, но я хочу, чтобы это было в Qtreewidget.

Комментарии:

1. Я не понимаю вашего вопроса. Ваш код работает нормально, так как граница становится красной при наведении курсора, но вы не устанавливаете никакого фона в псевдо. :hover В чем именно ваша проблема?

2. Нет, на самом деле я установил все, даже таблицу стилей дерева виджетов, я просто сократил ее до небольшого примера. Я знаю, что не устанавливаю фон. Но все работает, кроме этого, я также изменил фон раздела заголовка. но наведение не работает для меня. Моя версия pyqt — 5.15.1. почему это не будет работать в моей программе?@musicamante

3. @musicamante Можете ли вы, пожалуйста, написать свою программу в разделе ответов. Я не могу понять, почему это происходит

4. Если вы используете более расширенную таблицу стилей, вы должны показать нам: как уже было сказано, ваш код работает должным образом, если ваш не работает, это, вероятно, потому, что вы сделали что-то не так в тех частях таблицы стилей, которые вы нам не предоставили. Я не писал никакой программы, я просто протестировал ее на стандартном QTableWidget в Designer, используя вашу таблицу стилей.

5. Спасибо! Но я думаю, что это может сработать на виджете QTabel, просто проверьте и подтвердите с помощью QTreeWidget, а не в виде дерева. Я также отредактировал свой пост со всей таблицей стилей @musicamante

Ответ №1:

Кажется, что обязательным требованием для :hover псевдо в QHeaderView является наличие интерактивных разделов, что по умолчанию не включено для заголовка QTreeView.

Тогда решение довольно простое:

     self.mytreeview.header().setSectionsClickable(True)
  

Комментарии:

1. Спасибо! Это работает нормально. Я просто использую ваш комментарий. А также вы забыли добавить header() в раздел ответов, потому что у виджета дерева нет атрибута setSectionsClickable(True) . и я пометил его как правильный ответ.

2. Извините, это было потеряно при копировании и вставке, теперь это исправлено. Спасибо