上がノーマルのスライダーです。
下が今回作成したスライダーです。
Pythonスクリプト
from PyQt6.QtCore import Qt, QSize from PyQt6.QtWidgets import QWidget, QApplication, QVBoxLayout, QSlider QSS = """ QSlider::groove:horizontal { border: 1px solid; height: 10px; /*margin: 30px;*/ background-color: rgb(238, 238, 238); /*position: absolute;*/ left: 20px; right: 20px; } QSlider::handle:horizontal { background-color: rgb(80, 80, 232); height: 40px; width: 40px; border-radius: 20px; margin: -15px -20px; } QSlider::handle:horizontal:pressed { background-color: rgb(148, 148, 254); } QSlider::add-page:horizontal { background: rgb(183, 183, 183); } QSlider::sub-page:horizontal { background: rgb(80, 80, 232); } """ class Window(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('slider sample') self.slider_1 = QSlider() self.slider_1.setFixedSize(QSize(400,200)) self.slider_1.setOrientation(Qt.Orientation.Horizontal) self.slider_2 = QSlider() self.slider_2.setFixedSize(QSize(400,200)) self.slider_2.setOrientation(Qt.Orientation.Horizontal) self.slider_2.setStyleSheet(QSS) layout = QVBoxLayout() layout.addWidget(self.slider_1) layout.addWidget(self.slider_2) self.setLayout(layout) if __name__ == "__main__": app = QApplication([]) ex =Window() ex.show() app.exec()
ハンドルを丸くするポイント
QSlider::handleのheightとwidthに同じ値を設定します。今回の場合、height: 40px、width: 40pxを設定しています。QSlider::handleのmarginの最初の値に(handle height - groove height)/2 * -1を設定します。
今回の場合、(40 -10)/2 * -1 = -15を設定しています。QSlider::handleのmarginの2番目の値にhandle height/2 * -1を設定します。
今回の場合、40/2 * -1 = -20を設定しています。