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

python3+PyQt5實(shí)現(xiàn)自定義流體混合窗口部件

 更新時(shí)間:2018年04月24日 11:16:43   作者:basisworker  
這篇文章主要為大家詳細(xì)介紹了python3+PyQt5實(shí)現(xiàn)自定義流體混合窗口部件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文通過(guò)Python3+PyQt5實(shí)現(xiàn)自定義部件–流體混合窗口部件。通過(guò)邏輯(窗口)坐標(biāo)繪制而成。調(diào)用setWindow,所有的繪制工作都會(huì)根據(jù)邏輯坐標(biāo)系發(fā)生。

#!/usr/bin/env python3

from PyQt5.QtCore import (QPointF, QSize, Qt,pyqtSignal)
from PyQt5.QtWidgets import (QApplication,
 QFrame, QLabel,
 QSizePolicy, QSpinBox, QWidget)
from PyQt5.QtGui import QColor,QPainter,QFontMetricsF,QBrush,QLinearGradient,QPolygon,QPolygonF

class YPipeWidget(QWidget):
 signal_valuechanged = pyqtSignal(int,int)
 def __init__(self, leftFlow=0, rightFlow=0, maxFlow=100,
   parent=None):
 super(YPipeWidget, self).__init__(parent)

 self.leftSpinBox = QSpinBox(self)
 self.leftSpinBox.setRange(0, maxFlow)
 self.leftSpinBox.setValue(leftFlow)
 self.leftSpinBox.setSuffix(" l/s")
 self.leftSpinBox.setAlignment(Qt.AlignRight|Qt.AlignVCenter)
 self.leftSpinBox.valueChanged.connect(self.valueChanged)
 self.rightSpinBox = QSpinBox(self)
 self.rightSpinBox.setRange(0, maxFlow)
 self.rightSpinBox.setValue(rightFlow)
 self.rightSpinBox.setSuffix(" l/s")
 self.rightSpinBox.setAlignment(Qt.AlignRight|Qt.AlignVCenter)
 self.rightSpinBox.valueChanged.connect(self.valueChanged)

 self.label = QLabel(self)
 self.label.setFrameStyle(QFrame.StyledPanel|QFrame.Sunken)
 self.label.setAlignment(Qt.AlignCenter)
 fm = QFontMetricsF(self.font())
 self.label.setMinimumWidth(fm.width(" 999 l/s "))

 self.setSizePolicy(QSizePolicy(QSizePolicy.Expanding,
     QSizePolicy.Expanding))
 self.setMinimumSize(self.minimumSizeHint())
 self.valueChanged()


 def valueChanged(self):
 a = self.leftSpinBox.value()
 b = self.rightSpinBox.value()
 self.label.setText("{0} l/s".format(a + b))
 self.signal_valuechanged.emit(a,b)
 self.update()


 def values(self):
 return self.leftSpinBox.value(), self.rightSpinBox.value()


 def minimumSizeHint(self):
 return QSize(self.leftSpinBox.width() * 3,
   self.leftSpinBox.height() * 5)


 def resizeEvent(self, event=None):
 fm = QFontMetricsF(self.font())
 x = (self.width() - self.label.width()) / 2
 y = self.height() - (fm.height() * 1.5)
 self.label.move(x, y)
 y = self.height() / 60.0
 x = (self.width() / 4.0) - self.leftSpinBox.width()
 self.leftSpinBox.move(x, y)
 x = self.width() - (self.width() / 4.0)
 self.rightSpinBox.move(x, y)


 def paintEvent(self, event=None):
 LogicalSize = 100.0

 def logicalFromPhysical(length, side):
  return (length / side) * LogicalSize

 fm = QFontMetricsF(self.font())
 ymargin = ((LogicalSize / 30.0) +
   logicalFromPhysical(self.leftSpinBox.height(),
     self.height()))
 ymax = (LogicalSize -
  logicalFromPhysical(fm.height() * 2, self.height()))
 width = LogicalSize / 4.0
 cx, cy = LogicalSize / 2.0, LogicalSize / 3.0
 ax, ay = cx - (2 * width), ymargin
 bx, by = cx - width, ay
 dx, dy = cx + width, ay
 ex, ey = cx + (2 * width), ymargin
 fx, fy = cx + (width / 2), cx + (LogicalSize / 24.0)
 gx, gy = fx, ymax
 hx, hy = cx - (width / 2), ymax
 ix, iy = hx, fy

 painter = QPainter(self)
 painter.setRenderHint(QPainter.Antialiasing)
 side = min(self.width(), self.height())
 painter.setViewport((self.width() - side) / 2,
    (self.height() - side) / 2, side, side)
 painter.setWindow(0, 0, LogicalSize, LogicalSize)

 painter.setPen(Qt.NoPen)

 gradient = QLinearGradient(QPointF(0, 0),
      QPointF(0, 100))
 gradient.setColorAt(0, Qt.white)
 a = self.leftSpinBox.value()
 gradient.setColorAt(1, (Qt.red if a != 0 else Qt.white))
 painter.setBrush(QBrush(gradient))
 painter.drawPolygon(QPolygonF([QPointF(ax, ay), QPointF(bx, by), QPointF(cx, cy), QPointF(ix, iy)]))

 gradient = QLinearGradient(QPointF(0, 0), QPointF(0, 100))
 gradient.setColorAt(0, Qt.white)
 b = self.rightSpinBox.value()
 gradient.setColorAt(1, (Qt.blue if b != 0
    else Qt.white))
 painter.setBrush(QBrush(gradient))
 painter.drawPolygon(QPolygonF([QPointF(cx, cy), QPointF(dx, dy),QPointF(ex, ey),QPointF(fx, fy)]))

 if (a + b) == 0:
  color = QColor(Qt.white)
 else:
  ashare = (a / (a + b)) * 255.0
  bshare = 255.0 - ashare
  color = QColor(ashare, 0, bshare)
 gradient = QLinearGradient(QPointF(0, 0), QPointF(0, 100))
 gradient.setColorAt(0, Qt.white)
 gradient.setColorAt(1, color)
 painter.setBrush(QBrush(gradient))
 painter.drawPolygon(QPolygonF(
  [QPointF(cx, cy),QPointF(fx, fy),QPointF(gx, gy), QPointF(hx, hy),QPointF(ix, iy)]))

 painter.setPen(Qt.black)
 painter.drawPolyline(QPolygonF([QPointF(ax, ay), QPointF(ix, iy),QPointF(hx, hy)]))
 painter.drawPolyline(QPolygonF([QPointF(gx, gy), QPointF(fx, fy), QPointF(ex, ey)]))
 painter.drawPolyline(QPolygonF([QPointF(bx, by), QPointF(cx, cy), QPointF(dx, dy)]))

if __name__ == "__main__":
 import sys

 def valueChanged(a, b):
 print(a, b)

 app = QApplication(sys.argv)
 form = YPipeWidget()
 form.signal_valuechanged.connect(valueChanged)
 form.setWindowTitle("YPipe")
 form.move(0, 0)
 form.show()
 form.resize(400, 400)
 app.exec_()

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

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

相關(guān)文章

  • pytest用例間參數(shù)傳遞的兩種實(shí)現(xiàn)方式示例

    pytest用例間參數(shù)傳遞的兩種實(shí)現(xiàn)方式示例

    pytest提供了許多運(yùn)行命令以供定制化運(yùn)行某一類測(cè)試用例或者某個(gè)測(cè)試用例等,下面這篇文章主要給大家介紹了關(guān)于pytest用例間參數(shù)傳遞的兩種實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • python判斷all函數(shù)輸出結(jié)果是否為true的方法

    python判斷all函數(shù)輸出結(jié)果是否為true的方法

    在本篇內(nèi)容里小編給各位整理的是一篇關(guān)于python判斷all函數(shù)輸出結(jié)果是否為true的方法,有需要的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • 在Pytorch中使用樣本權(quán)重(sample_weight)的正確方法

    在Pytorch中使用樣本權(quán)重(sample_weight)的正確方法

    今天小編就為大家分享一篇在Pytorch中使用樣本權(quán)重(sample_weight)的正確方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • Python進(jìn)程間通信用法實(shí)例

    Python進(jìn)程間通信用法實(shí)例

    這篇文章主要介紹了Python進(jìn)程間通信用法,涉及Python通過(guò)multiprocessing模塊操作進(jìn)程的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • Python?中?Pandas?文件操作和讀取?CSV?參數(shù)詳解

    Python?中?Pandas?文件操作和讀取?CSV?參數(shù)詳解

    CSV?又稱逗號(hào)分隔值文件,是一種簡(jiǎn)單的文件格式,以特定的結(jié)構(gòu)來(lái)排列表格數(shù)據(jù),這篇文章主要介紹了Python?之?Pandas?文件操作和讀取?CSV?參數(shù)詳解,需要的朋友可以參考下
    2023-03-03
  • Django如何實(shí)現(xiàn)密碼錯(cuò)誤報(bào)錯(cuò)提醒

    Django如何實(shí)現(xiàn)密碼錯(cuò)誤報(bào)錯(cuò)提醒

    這篇文章主要介紹了Django如何實(shí)現(xiàn)密碼錯(cuò)誤報(bào)錯(cuò)提醒,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值
    2020-09-09
  • python自定義線程池控制線程數(shù)量的示例

    python自定義線程池控制線程數(shù)量的示例

    今天小編就為大家分享一篇python自定義線程池控制線程數(shù)量的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • 使用python實(shí)現(xiàn)壓縮PDF文件大小的方法

    使用python實(shí)現(xiàn)壓縮PDF文件大小的方法

    壓縮 PDF 文件能有效減小文件大小并提高文件傳輸?shù)男?同時(shí)還能節(jié)省計(jì)算機(jī)存儲(chǔ)空間,除了使用一些專業(yè)工具對(duì)PDF文件進(jìn)行壓縮,我們還可以通過(guò) Python 來(lái)執(zhí)行該操作,本文將分享一個(gè)簡(jiǎn)單有效的使用 Python 壓縮 PDF 文件的方法,需要的朋友可以參考下
    2024-06-06
  • Python實(shí)現(xiàn)爬取某站視頻彈幕并繪制詞云圖

    Python實(shí)現(xiàn)爬取某站視頻彈幕并繪制詞云圖

    這篇文章主要介紹了利用Python爬取某站的視頻彈幕,并將其繪制成詞云圖,文中的示例代碼講解詳細(xì),對(duì)我學(xué)習(xí)Python爬蟲(chóng)有一定的幫助,需要的朋友可以參考一下
    2021-12-12
  • python django集成cas驗(yàn)證系統(tǒng)

    python django集成cas驗(yàn)證系統(tǒng)

    cas是什么東西就不多說(shuō)了,簡(jiǎn)而言之就是單點(diǎn)登陸系統(tǒng),一處登陸,全網(wǎng)有權(quán)限的系統(tǒng)均可以訪問(wèn)
    2014-07-07

最新評(píng)論

密山市| 平邑县| 遂川县| 禹州市| 浑源县| 新津县| 凤凰县| 沾益县| 定南县| 山阴县| 太谷县| 桓仁| 汝阳县| 宁远县| 丹凤县| 定结县| 香格里拉县| 泰和县| 兰西县| 宝清县| 城口县| 嘉义市| 菏泽市| 会理县| 永年县| 溧水县| 水富县| 吉隆县| 黄大仙区| 铜陵市| 罗定市| 习水县| 临泽县| 景洪市| 自治县| 巴马| 扶风县| 确山县| 西丰县| 时尚| 灌阳县|