I have an application that I wan't to run on a 10" touch screen. I am trying to make the QSlider handle larger so it will be easier to move. I have found plenty of examples of changing the handle width in the style sheet, but the changes are not being reflected when I run the code. I am using PyQt5 Designer and here is the style sheet for the slider.
QSlider::groove:horizontal {height: 10px; margin: 0 0;}
QSlider::handle:horizontal {background-color: black; border: 1px; height:
40px; width: 40px; margin: 0 0;}
Here is the main program:
from Slidertest import Ui_MainWindow
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
class RPTApp(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(RPTApp, self).__init__(parent)
self.setupUi(self)
def main():
app = QApplication(sys.argv)
window = RPTApp()
window.show()
app.exec_()
if __name__ == '__main__':
main()
Here is the designer code for the slider:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(640, 480)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.PS_timeSlider = QtWidgets.QSlider(self.centralwidget)
self.PS_timeSlider.setGeometry(QtCore.QRect(100, 100, 371, 50))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.PS_timeSlider.sizePolicy().
hasHeightForWidth())
#needed to add a return and break the line above
self.PS_timeSlider.setSizePolicy(sizePolicy)
self.PS_timeSlider.setBaseSize(QtCore.QSize(0, 0))
font = QtGui.QFont()
font.setPointSize(12)
font.setKerning(False)
self.PS_timeSlider.setFont(font)
self.PS_timeSlider.setFocusPolicy(QtCore.Qt.WheelFocus)
self.PS_timeSlider.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
self.PS_timeSlider.setToolTip("")
self.PS_timeSlider.setStatusTip("")
self.PS_timeSlider.setWhatsThis("")
self.PS_timeSlider.setAccessibleName("")
self.PS_timeSlider.setAccessibleDescription("")
self.PS_timeSlider.setStyleSheet("QSlider::groove:horizontal
{height: 10px; margin: 0 0;}\n"
"QSlider::handle:horizontal {background-color: black; border: 1px; height:
40px; width: 40px; margin: 0 0;}\n"
"")
self.PS_timeSlider.setMinimum(0)
self.PS_timeSlider.setMaximum(100)
self.PS_timeSlider.setSingleStep(1)
self.PS_timeSlider.setPageStep(5)
self.PS_timeSlider.setProperty("value", 50)
self.PS_timeSlider.setSliderPosition(50)
self.PS_timeSlider.setTracking(True)
self.PS_timeSlider.setOrientation(QtCore.Qt.Horizontal)
self.PS_timeSlider.setInvertedAppearance(False)
self.PS_timeSlider.setInvertedControls(False)
self.PS_timeSlider.setTickPosition(QtWidgets.QSlider.TicksBothSides)
self.PS_timeSlider.setTickInterval(1)
self.PS_timeSlider.setObjectName("PS_timeSlider")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
I have tried everything I found in my searches, but have had no luck. I would appreciate any help you can provide.
To get this to work, I found that a border must be set on the groove component. Also, to make the handle larger than the groove, a negative margin has to be set on the handle (see Customizing QSlider in the Qt Docs):
QSlider::groove:horizontal {
border: 1px solid;
height: 10px;
margin: 0px;
}
QSlider::handle:horizontal {
background-color: black;
border: 1px solid;
height: 40px;
width: 40px;
margin: -15px 0px;
}
PS: If the slider is added to a layout, it might be necessary to set its minimum height in order to stop it being squashed back to its original dimensions.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With