通常来自PyQt的默认QScrollBar对于高dpi显示来说太小了。这就是为什么有必要调整它们的原因。无论如何,一旦你做了它,为什么不从你可以做出的美学改进中受益呢?
这就是你如何调整外观和感觉的方法。你的QScrollBar:
########################################
# My custom QScrollArea #
# widget #
########################################
class MyScrollArea(QScrollArea):
def __init__(self, parent):
super(MyScrollArea, self).__init__(parent)
...
self.setStyleSheet("""QScrollBar:vertical {
width: 45px;
margin: 45px 0 45px 0;
background: #32CC99;
}
QScrollBar::handle:vertical {
border: 10px solid grey;
background: white;
min-height: 10px;
}
QScrollBar::add-line:vertical {
border: 2px solid grey;
background: none;
height: 45px;
subcontrol-position: bottom;
subcontrol-origin: margin;
}
QScrollBar::sub-line:vertical {
border: 2px solid grey;
background: none;
height: 45px;
subcontrol-position: top;
subcontrol-origin: margin;
}
QScrollBar::up-arrow:vertical {
border: 5px solid grey;
height: 40px;
width: 40px
}
QScrollBar::down-arrow:vertical {
border: 5px solid grey;
height: 40px;
width: 40px
}""")
...
### End init ###
### End Class ###
我找到了有关如何设置样式表的以下文档:
http://doc.qt.io/qt-4.8/stylesheet-examples.html#customizing-qscrollbar d
问题:
自定义QScrollBars后,它们完美运行。但是,当点击手柄或箭头时,用户没有获得任何视觉反馈。例如,单击箭头不会产生箭头被按下的视觉反馈。
以下是它应该如何的示例:
答案 0 :(得分:1)
我不知道如何使用样式表实现它。
我创建了三个qss文件。
a.qss
QScrollBar:vertical{
background: black;
width: 10px;
}
b.qss
QScrollBar:vertical{
background: black;
width: 10px;
}
QScrollBar::add-page:vertical{
background: red;
}
c.qss
QScrollBar:vertical{
background: black;
width: 10px;
}
QScrollBar::sub-page:vertical{
background: red;
}
和代码:
class Main(QScrollArea):
def __init__(self):
super(Main, self).__init__()
self.resize(300, 200)
self.index = QWidget()
self.index.setMinimumHeight(1000)
self.index.setMinimumWidth(500)
self.setWidget(self.index)
self.setWidgetResizable(True)
with open('a.qss', 'r') as f:
self.a_text = f.read()
self.setStyleSheet(self.a_text)
with open('b.qss', 'r') as f:
self.b_text = f.read()
with open('c.qss', 'r') as f:
self.c_text = f.read()
# save values.
self.value = 0
self.pre_value = 0
# save pause condition.
self.pauseCond = True
self.timer = QTimer()
self.timer.timeout.connect(self.timerout)
self.verticalScrollBar().actionTriggered.connect(self.change)
self.timer.start(300)
def change(self):
# if sliding the slider(click and Mouse pulley).
self.value = self.verticalScrollBar().sliderPosition()
# if sliding down/right.
if self.pre_value < self.value:
self.setStyleSheet(self.b_text)
# if sliding up/left.
elif self.pre_value > self.value:
self.setStyleSheet(self.c_text)
self.pre_value = self.verticalScrollBar().sliderPosition()
self.pauseCond = True
def timerout(self):
if not self.pauseCond:
return 1
# if click or pulley stop.
if self.verticalScrollBar().sliderPosition() == self.value:
self.setStyleSheet(self.a_text)
self.pauseCond = False
我正在学习英语,我希望你不要介意。
答案 1 :(得分:1)
您实际上可以使用QStyle.hitTestComplexControl()
,但它也要求您对滚动条进行子类化。
在下面的例子中,我完全实现了垂直滚动条,你只需要填写水平滚动条的基本css部分。
static