最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python3+PyQt5實(shí)現(xiàn)柱狀圖

 更新時間:2018年04月24日 09:25:31   作者:basisworker  
這篇文章主要為大家詳細(xì)介紹了python3+PyQt5實(shí)現(xiàn)柱狀圖的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文通過Python3+pyqt5實(shí)現(xiàn)了python Qt GUI 快速編程的16章的excise例子。

#!/usr/bin/env python3

import random
import sys
from PyQt5.QtCore import (QAbstractListModel, QAbstractTableModel,
  QModelIndex, QSize, QTimer, QVariant, Qt,pyqtSignal)
from PyQt5.QtWidgets import (QApplication, QDialog, QHBoxLayout,
  QListView, QSpinBox, QStyledItemDelegate,QStyleOptionViewItem, QWidget)
from PyQt5.QtGui import QColor,QPainter,QPixmap

class BarGraphModel(QAbstractListModel):
 dataChanged=pyqtSignal(QModelIndex,QModelIndex)
 def __init__(self):
  super(BarGraphModel, self).__init__()
  self.__data = []
  self.__colors = {}
  self.minValue = 0
  self.maxValue = 0


 def rowCount(self, index=QModelIndex()):
  return len(self.__data)


 def insertRows(self, row, count):
  extra = row + count
  if extra >= len(self.__data):
   self.beginInsertRows(QModelIndex(), row, row + count - 1)
   self.__data.extend([0] * (extra - len(self.__data) + 1))
   self.endInsertRows()
   return True
  return False


 def flags(self, index):
  #return (QAbstractTableModel.flags(self, index)|Qt.ItemIsEditable)
  return (QAbstractListModel.flags(self, index)|Qt.ItemIsEditable)

 def setData(self, index, value, role=Qt.DisplayRole):
  row = index.row()
  if not index.isValid() or 0 > row >= len(self.__data):
   return False
  changed = False
  if role == Qt.DisplayRole:
   value = value
   self.__data[row] = value
   if self.minValue > value:
    self.minValue = value
   if self.maxValue < value:
    self.maxValue = value
   changed = True
  elif role == Qt.UserRole:
   self.__colors[row] = value
   #self.emit(SIGNAL("dataChanged(QModelIndex,QModelIndex)"),
   #   index, index)
   self.dataChanged[QModelIndex,QModelIndex].emit(index, index)
   changed = True
  if changed:
   #self.emit(SIGNAL("dataChanged(QModelIndex,QModelIndex)"),
    #   index, index)
   self.dataChanged[QModelIndex,QModelIndex].emit(index, index)
  return changed


 def data(self, index, role=Qt.DisplayRole):
  row = index.row()
  if not index.isValid() or 0 > row >= len(self.__data):
   return QVariant()
  if role == Qt.DisplayRole:
   return self.__data[row]
  if role == Qt.UserRole:
   return QVariant(self.__colors.get(row,
     QColor(Qt.red)))
  if role == Qt.DecorationRole:
   color = QColor(self.__colors.get(row,
     QColor(Qt.red)))
   pixmap = QPixmap(20, 20)
   pixmap.fill(color)
   return QVariant(pixmap)
  return QVariant()


class BarGraphDelegate(QStyledItemDelegate):

 def __init__(self, minimum=0, maximum=100, parent=None):
  super(BarGraphDelegate, self).__init__(parent)
  self.minimum = minimum
  self.maximum = maximum


 def paint(self, painter, option, index):
  myoption = QStyleOptionViewItem(option)
  myoption.displayAlignment |= (Qt.AlignRight|Qt.AlignVCenter)
  QStyledItemDelegate.paint(self, painter, myoption, index)


 def createEditor(self, parent, option, index):
  spinbox = QSpinBox(parent)
  spinbox.setRange(self.minimum, self.maximum)
  spinbox.setAlignment(Qt.AlignRight|Qt.AlignVCenter)
  return spinbox


 def setEditorData(self, editor, index):
  value = index.model().data(index, Qt.DisplayRole)
  editor.setValue(value)


 def setModelData(self, editor, model, index):
  editor.interpretText()
  model.setData(index, editor.value())


class BarGraphView(QWidget):

 WIDTH = 20

 def __init__(self, parent=None):
  super(BarGraphView, self).__init__(parent)
  self.model = None


 def setModel(self, model):
  self.model = model
  #self.connect(self.model,
  #  SIGNAL("dataChanged(QModelIndex,QModelIndex)"),
  #  self.update)
  self.model.dataChanged[QModelIndex,QModelIndex].connect(self.update)
  #self.connect(self.model, SIGNAL("modelReset()"), self.update)
  self.model.modelReset.connect(self.update)


 def sizeHint(self):
  return self.minimumSizeHint()


 def minimumSizeHint(self):
  if self.model is None:
   return QSize(BarGraphView.WIDTH * 10, 100)
  return QSize(BarGraphView.WIDTH * self.model.rowCount(), 100)


 def paintEvent(self, event):
  if self.model is None:
   return
  painter = QPainter(self)
  painter.setRenderHint(QPainter.Antialiasing)
  span = self.model.maxValue - self.model.minValue
  painter.setWindow(0, 0, BarGraphView.WIDTH * self.model.rowCount(),
       span)
  for row in range(self.model.rowCount()):
   x = row * BarGraphView.WIDTH
   index = self.model.index(row)
   color = QColor(self.model.data(index, Qt.UserRole))
   y = self.model.data(index)
   painter.fillRect(x, span - y, BarGraphView.WIDTH, y, color)


class MainForm(QDialog):

 def __init__(self, parent=None):
  super(MainForm, self).__init__(parent)

  self.model = BarGraphModel()
  self.barGraphView = BarGraphView()
  self.barGraphView.setModel(self.model)
  self.listView = QListView()
  self.listView.setModel(self.model)
  self.listView.setItemDelegate(BarGraphDelegate(0, 1000, self))
  self.listView.setMaximumWidth(100)
  self.listView.setEditTriggers(QListView.DoubleClicked|
          QListView.EditKeyPressed)
  layout = QHBoxLayout()
  layout.addWidget(self.listView)
  layout.addWidget(self.barGraphView, 1)
  self.setLayout(layout)

  self.setWindowTitle("Bar Grapher")
  QTimer.singleShot(0, self.initialLoad)


 def initialLoad(self):
  # Generate fake data
  count = 20
  self.model.insertRows(0, count - 1)
  for row in range(count):
   value = random.randint(1, 150)
   color = QColor(random.randint(0, 255), random.randint(0, 255),
       random.randint(0, 255))
   index = self.model.index(row)
   self.model.setData(index, value)
   self.model.setData(index, QVariant(color), Qt.UserRole)


app = QApplication(sys.argv)
form = MainForm()
form.resize(600, 400)
form.show()
app.exec_()

運(yùn)行結(jié)果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 在Python Flask App中獲取已發(fā)布的JSON對象的解決方案

    在Python Flask App中獲取已發(fā)布的JSON對象的解決方案

    這篇文章主要介紹了在Python Flask App中獲取已發(fā)布的JSON對象的解決方案,文中通過代碼示例介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-08-08
  • Python實(shí)現(xiàn)繪制自定義形狀的詞云示例

    Python實(shí)現(xiàn)繪制自定義形狀的詞云示例

    這篇文章主要介紹了Python實(shí)現(xiàn)繪制自定義形狀的詞云示例,通過將一段文本中出現(xiàn)頻率高的單詞按其出現(xiàn)頻率大小以及顏色深淺排列成一個詞云圖形,從而更好地展示文本中的信息,需要的朋友可以參考下
    2022-10-10
  • python清洗疫情歷史數(shù)據(jù)的過程詳解

    python清洗疫情歷史數(shù)據(jù)的過程詳解

    這篇文章主要介紹了python清洗疫情歷史數(shù)據(jù),包括數(shù)據(jù)獲取方法及使用python讀取csv的詳細(xì)代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • python編程羊車門問題代碼示例

    python編程羊車門問題代碼示例

    這篇文章主要介紹了python編程“羊車門”問題代碼示例,初步接觸,僅供參考。不足之處,歡迎指出。
    2017-10-10
  • 深入淺析Pytorch中stack()方法

    深入淺析Pytorch中stack()方法

    這篇文章主要介紹了Pytorch中stack()方法的總結(jié)及理解,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • 解讀torch.nn.GRU的輸入及輸出示例

    解讀torch.nn.GRU的輸入及輸出示例

    這篇文章主要介紹了解讀torch.nn.GRU的輸入及輸出示例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • python3.8中關(guān)于sklearn問題(win10)

    python3.8中關(guān)于sklearn問題(win10)

    這篇文章主要介紹了python3.8中關(guān)于sklearn問題(win10),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Python獲取文件ssdeep值的方法

    Python獲取文件ssdeep值的方法

    這篇文章主要介紹了Python獲取文件ssdeep值的方法,是一個比較實(shí)用的技巧,本文詳細(xì)講述了實(shí)現(xiàn)這一功能的具體步驟及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2014-10-10
  • 淺談django url請求與數(shù)據(jù)庫連接池的共享問題

    淺談django url請求與數(shù)據(jù)庫連接池的共享問題

    今天小編就為大家分享一篇淺談django url請求與數(shù)據(jù)庫連接池的共享問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python檢測PE所啟用保護(hù)方式詳解

    Python檢測PE所啟用保護(hù)方式詳解

    Python通過pywin32模塊調(diào)用WindowsAPI接口,可以實(shí)現(xiàn)對特定進(jìn)程加載模塊的枚舉輸出并檢測該P(yáng)E程序模塊所啟用的保護(hù)方式,感興趣的可以了解一下
    2022-10-10

最新評論

洪洞县| 晋江市| 南川市| 长汀县| 忻城县| 鄄城县| 宁国市| 临朐县| 呼玛县| 平泉县| 大名县| 临洮县| 泗水县| 朝阳市| 雅安市| 内丘县| 枣阳市| 长阳| 子洲县| 临高县| 阿拉善盟| 澄江县| 天津市| 文成县| 年辖:市辖区| 留坝县| 盐城市| 荆门市| 安乡县| 精河县| 伊通| 沐川县| 舞钢市| 牡丹江市| 沈阳市| 呼和浩特市| 比如县| 扎囊县| 吉安市| 睢宁县| 聂拉木县|