Qprogressbar有两个值

时间:2014-06-10 06:29:50

标签: python qt4 qprogressbar

我有一些不寻常的问题: 为了显示打包进度,我想一下qprogressbar在一个栏中有两个值 - 一个显示字节读取,另一个显示写出字节,这也给出了压缩比的想象。

QT4可以吗?

另外,我对C ++编码的经验很少,我目前的工作是基于Python,PyQT4,

1 个答案:

答案 0 :(得分:1)

是的,但是你必须实现自己的" DualValueProgressbar"这里有一个例子,不是完整的生产代码,但它会指向你正确的方向。

继续之前的说明:

您是否可以在栏中显示两个值,但在同一个栏中显示两种颜色是完全不同的事情。因此,我建议您使用两个prograssbar来做你想做的事情,保持简单。

在看到任何代码之前,让我解释一下我做了什么。

  1. 子类QProgressBar
  2. 添加名为self.__value_1的变量成员。这将是第二个值。
  3. 覆盖方法paintEvent,以便在栏内绘制self.__value_1
  4. Recomendations:

    1. 编写用于在第二个值上建立限制的代码。 (Minimun和maximun)
    2. 编写处理format属性的代码。
    3. 编写habdle aligment属性的代码。
    4. 结果如下:

      enter image description here

      以下是代码:

      from PyQt4.QtGui import *
      from PyQt4.QtCore import *
      
      class DualValueProgressBar(QProgressBar):
          def __init__(self, parent=None):
              super(DualValueProgressBar, self).__init__(parent)
      
              # The other value you want to show
              self.__value_1 = 0
      
          def paintEvent(self, event):
              # Paint the parent.
              super(DualValueProgressBar, self).paintEvent(event)
              # In the future versions if your custom object you
              # should use this to set the position of the value_1
              # in the progressbar, right now I'm not using it.
              aligment = self.alignment()
              geometry = self.rect() # You use this to set the position of the text.
              # Start to paint.
              qp = QPainter()
              qp.begin(self)
              qp.drawText(geometry.center().x() + 20, geometry.center().y() + qp.fontMetrics().height()/2.0, "{0}%".format(str(self.value1)))
              qp.end()
      
          @property
          def value1(self):
              return self.__value_1
      
          @pyqtSlot("int")
          def setValue1(self, value):
              self.__value_1 = value
      
      
      if __name__ == '__main__':
          import sys
      
          app = QApplication(sys.argv)
          window = QWidget()
          hlayout = QHBoxLayout(window)
          dpb = DualValueProgressBar(window)
          dpb.setAlignment(Qt.AlignHCenter)
          # This two lines are important.
          dpb.setValue(20)
          dpb.setValue1(10)  # Look you can set another value.
          hlayout.addWidget(dpb)
          window.setLayout(hlayout)
          window.show()
      
          sys.exit(app.exec())
      

      最后是代码示例: