#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. Извините, это было потеряно при копировании и вставке, теперь это исправлено. Спасибо