Python 在Pyside中的自定义QProgressBar上绘制记号

Python 在Pyside中的自定义QProgressBar上绘制记号,python,pyside,qprogressbar,Python,Pyside,Qprogressbar,我试图在自定义进度条中绘制一些记号,但我不清楚为什么该行根本没有显示出来 导入系统 导入操作系统 sys.path.append('Z:\\pipeline\\site packages') sys.path.append(os.path.dirname(os.path.abspath(_文件__))) 从PySide导入QtGui、QtCore QProgressBarPro类(QtGui.QProgressBar): progressClicked=QtCore.Signal() prog

我试图在自定义进度条中绘制一些记号,但我不清楚为什么该行根本没有显示出来

导入系统 导入操作系统 sys.path.append('Z:\\pipeline\\site packages') sys.path.append(os.path.dirname(os.path.abspath(_文件__))) 从PySide导入QtGui、QtCore QProgressBarPro类(QtGui.QProgressBar): progressClicked=QtCore.Signal() progressChanging=QtCore.Signal() progressChanged=QtCore.Signal() def uuu init uuu(self,parent=None): 超级(QProgressBarPro,self)。\uuuu init\uuuuu(父级) self.default_值=50.0 self.lmb_按下=错误 self.setFormat(“%p”) 自我设定范围(0.0100.0) self.stepEnabled=True self.step=5 self.setToolTip(“按住+Ctrl获取percise值
右键单击重置默认值”) def步进整轮(自身,x,基准=5): 返回整数(基*圆(浮点(x)/基) def从光标(自身、xpos)设置值: 宽度=self.frameGeometry().width() 百分比=浮动(xpos)/宽度 val=自身最大值()*百分比 如果启用了self.step: modifiers=QtGui.QApplication.keyboardModifiers() 如果修改器!=QtCore.Qt.ControlModifier: val=自身步骤(val,自身步骤) self.setValue(val) def鼠标压力事件(自身、事件): self.progressClicked.emit() 鼠标按钮=事件按钮() 如果鼠标_按钮==QtCore.Qt.RightButton: self.setValue(self.default_值) 其他: xpos=event.pos().x() 从光标(xpos)设置值 self.lmb_按下=真 self.progressChanging.emit() def mouseReleaseEvent(自身,事件): self.lmb_按下=错误 self.progressChanged.emit() def mouseMoveEvent(自身、事件): 如果按下self.lmb_: xpos=event.pos().x() 从光标(xpos)设置值 self.progressChanging.emit() def paintEvent(自身,事件): painter=QtGui.QPainter() 油漆工.抽绳(10,0,10,10) QtGui.QProgressBar.paintEvent(self,event) #演示 类示例(QtGui.QWidget): 定义初始化(自): super(例如,self)。\uuuuu init\uuuuuuuu() self.initUI() def initUI(self): self.ui_progress=QProgressBarPro() self.ui_progress.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) self.ui_progress.setValue(10) gdl=QtGui.QVBoxLayout() gdl.addWidget(self.ui\u进度) self.setLayout(gdl) 自我调整大小(300300) self.setWindowTitle(“工具提示”) self.show() def main(): app=QtGui.QApplication(sys.argv) ex=示例() sys.exit(app.exec_()) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': main()
您需要更改
paintEvent
功能

我写了第一个方法,它提供了与您的图像相同的结果:

def paintEvent(self, event):
    QtGui.QProgressBar.paintEvent(self, event)
    painter = QtGui.QPainter(self)
    brush = QtGui.QBrush(QtCore.Qt.SolidPattern)
    # Set gray color
    brush.setColor(QtGui.QColor(204,204,204))
    painter.setPen(QtGui.QPen(brush, 2, QtCore.Qt.SolidLine,QtCore.Qt.RoundCap))
    #print(str(self.width())+","+str(self.height()))
    progressbarwidth = self.width()
    progressbarheight = self.height()
    ## Drawing one vertical line each 1/5
    painter.drawLine(progressbarwidth*1/5, 0, progressbarwidth*1/5, progressbarheight)
    painter.drawLine(progressbarwidth*2/5, 0, progressbarwidth*2/5, progressbarheight)
    painter.drawLine(progressbarwidth*3/5, 0, progressbarwidth*3/5, progressbarheight)
    painter.drawLine(progressbarwidth*4/5, 0, progressbarwidth*4/5, progressbarheight)
所取得的成果如图所示

def paintEvent(self, event):
    QtGui.QProgressBar.paintEvent(self, event)
    painter = QtGui.QPainter(self)
    brush = QtGui.QBrush(QtCore.Qt.SolidPattern)
    # Set gray color
    brush.setColor(QtGui.QColor(204,204,204))
    painter.setPen(QtGui.QPen(brush, 2, QtCore.Qt.SolidLine,QtCore.Qt.RoundCap))
    #print(str(self.width())+","+str(self.height()))
    progressbarwidth = self.width()
    progressbarheight = self.height()
    ## Drawing one vertical line each 1/5
    painter.drawLine(progressbarwidth*1/5, 0, progressbarwidth*1/5, progressbarheight)
    painter.drawLine(progressbarwidth*2/5, 0, progressbarwidth*2/5, progressbarheight)
    painter.drawLine(progressbarwidth*3/5, 0, progressbarwidth*3/5, progressbarheight)
    painter.drawLine(progressbarwidth*4/5, 0, progressbarwidth*4/5, progressbarheight)