国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

python3+PyQt5實現(xiàn)自定義分數(shù)滑塊部件

來源:懂視網(wǎng) 責(zé)編:小OO 時間:2020-11-27 14:12:37
文檔

python3+PyQt5實現(xiàn)自定義分數(shù)滑塊部件

本文通過Python3+PyQt5實現(xiàn)自定義部件–分數(shù)滑塊。它既能支持鍵盤也支持鼠標(biāo),使用物理(視口)坐標(biāo)通過繪制方式顯示。#,#。/usr/bin/env python3import platformfrom PyQt5.QtCore import (QPointF.QRectF.QSize.Qt,pyqtSignal)from PyQt5.QtWidgets import (QApplication.QDialog,QSizePolicy.QGridLayout.QLCDNumber.QLabel.QSpinBox.QWidget)from PyQt5.QtGui import QColor,QFont,QPainter,QFontMetricsF。運行結(jié)果。;
推薦度:
導(dǎo)讀本文通過Python3+PyQt5實現(xiàn)自定義部件–分數(shù)滑塊。它既能支持鍵盤也支持鼠標(biāo),使用物理(視口)坐標(biāo)通過繪制方式顯示。#,#。/usr/bin/env python3import platformfrom PyQt5.QtCore import (QPointF.QRectF.QSize.Qt,pyqtSignal)from PyQt5.QtWidgets import (QApplication.QDialog,QSizePolicy.QGridLayout.QLCDNumber.QLabel.QSpinBox.QWidget)from PyQt5.QtGui import QColor,QFont,QPainter,QFontMetricsF。運行結(jié)果。;
這篇文章主要為大家詳細介紹了python3+PyQt5實現(xiàn)自定義分數(shù)滑塊部件,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文通過Python3+PyQt5實現(xiàn)自定義部件–分數(shù)滑塊。它既能支持鍵盤也支持鼠標(biāo),使用物理(視口)坐標(biāo)通過繪制方式顯示。

#!/usr/bin/env python3

import platform
from PyQt5.QtCore import (QPointF, QRectF, QSize, Qt,pyqtSignal)
from PyQt5.QtWidgets import (QApplication, QDialog,QSizePolicy,
 QGridLayout, QLCDNumber, QLabel,
 QSpinBox, QWidget)
from PyQt5.QtGui import QColor,QFont,QPainter,QFontMetricsF,QPalette, QPolygonF
X11 = True
try:
 from PyQt5.QtGui import qt_x11_wait_for_window_manager
except ImportError:
 X11 = False


class FractionSlider(QWidget):

 XMARGIN = 12.0
 YMARGIN = 5.0
 WSTRING = "999"
 valueChanged = pyqtSignal(int,int) 

 def __init__(self, numerator=0, denominator=10, parent=None):
 super(FractionSlider, self).__init__(parent)
 self.__numerator = numerator
 self.__denominator = denominator
 self.setFocusPolicy(Qt.WheelFocus)
 self.setSizePolicy(QSizePolicy(QSizePolicy.MinimumExpanding,
 QSizePolicy.Fixed))


 def decimal(self):
 return self.__numerator / float(self.__denominator)


 def fraction(self):
 return self.__numerator, self.__denominator


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


 def minimumSizeHint(self):
 font = QFont(self.font())
 font.setPointSize(font.pointSize() - 1)
 fm = QFontMetricsF(font)
 return QSize(fm.width(FractionSlider.WSTRING) *
 self.__denominator,
 (fm.height() * 4) + FractionSlider.YMARGIN)


 def setFraction(self, numerator, denominator=None):
 if denominator is not None:
 if 3 <= denominator <= 60:
 self.__denominator = denominator
 else:
 raise ValueError("denominator out of range")
 if 0 <= numerator <= self.__denominator:
 self.__numerator = numerator
 else:
 raise ValueError("numerator out of range")
 self.update()
 self.updateGeometry()


 def mousePressEvent(self, event):
 if event.button() == Qt.LeftButton:
 self.moveSlider(event.x())
 event.accept()
 else:
 QWidget.mousePressEvent(self, event)


 def mouseMoveEvent(self, event):
 self.moveSlider(event.x())


 def moveSlider(self, x):
 span = self.width() - (FractionSlider.XMARGIN * 2)
 offset = span - x + FractionSlider.XMARGIN
 numerator = int(round(self.__denominator *
 (1.0 - (offset / span))))
 numerator = max(0, min(numerator, self.__denominator))
 if numerator != self.__numerator:
 self.__numerator = numerator
 #self.emit(SIGNAL("valueChanged(int,int)"),
 # self.__numerator, self.__denominator)
 self.valueChanged.emit(self.__numerator, self.__denominator)
 self.update()


 def keyPressEvent(self, event):
 change = 0
 if event.key() == Qt.Key_Home:
 change = -self.__denominator
 elif event.key() in (Qt.Key_Up, Qt.Key_Right):
 change = 1
 elif event.key() == Qt.Key_PageUp:
 change = (self.__denominator // 10) + 1
 elif event.key() in (Qt.Key_Down, Qt.Key_Left):
 change = -1
 elif event.key() == Qt.Key_PageDown:
 change = -((self.__denominator // 10) + 1)
 elif event.key() == Qt.Key_End:
 change = self.__denominator
 if change:
 numerator = self.__numerator
 numerator += change
 numerator = max(0, min(numerator, self.__denominator))
 if numerator != self.__numerator:
 self.__numerator = numerator
 #self.emit(SIGNAL("valueChanged(int,int)"),
 # self.__numerator, self.__denominator)
 self.valueChanged.emit(self.__numerator, self.__denominator)
 self.update()
 event.accept()
 else:
 QWidget.keyPressEvent(self, event)


 def paintEvent(self, event=None):
 font = QFont(self.font())
 font.setPointSize(font.pointSize() - 1)
 fm = QFontMetricsF(font)
 fracWidth = fm.width(FractionSlider.WSTRING)
 indent = fm.boundingRect("9").width() / 2.0
 if not X11:
 fracWidth *= 1.5
 span = self.width() - (FractionSlider.XMARGIN * 2)
 value = self.__numerator / float(self.__denominator)
 painter = QPainter(self)
 painter.setRenderHint(QPainter.Antialiasing)
 painter.setRenderHint(QPainter.TextAntialiasing)
 painter.setPen(self.palette().color(QPalette.Mid))
 painter.setBrush(self.palette().brush(
 QPalette.AlternateBase))
 painter.drawRect(self.rect())
 segColor = QColor(Qt.green).darker(120)
 segLineColor = segColor.darker()
 painter.setPen(segLineColor)
 painter.setBrush(segColor)
 painter.drawRect(FractionSlider.XMARGIN,
 FractionSlider.YMARGIN, span, fm.height())
 textColor = self.palette().color(QPalette.Text)
 segWidth = span / self.__denominator
 segHeight = fm.height() * 2
 nRect = fm.boundingRect(FractionSlider.WSTRING)
 x = FractionSlider.XMARGIN
 yOffset = segHeight + fm.height()
 for i in range(self.__denominator + 1):
 painter.setPen(segLineColor)
 painter.drawLine(x, FractionSlider.YMARGIN, x, segHeight)
 painter.setPen(textColor)
 y = segHeight
 rect = QRectF(nRect)
 rect.moveCenter(QPointF(x, y + fm.height() / 2.0))
 #painter.drawText(rect, Qt.AlignCenter,
 #QString.number(i))
 painter.drawText(rect, Qt.AlignCenter,str(i)) 
 y = yOffset
 rect.moveCenter(QPointF(x, y + fm.height() / 2.0))
 painter.drawText(rect, Qt.AlignCenter,
 str(self.__denominator))
 painter.drawLine(QPointF(rect.left() + indent, y),
 QPointF(rect.right() - indent, y))
 x += segWidth
 span = int(span)
 y = FractionSlider.YMARGIN - 0.5
 triangle = [QPointF(value * span, y),
 QPointF((value * span) +
 (2 * FractionSlider.XMARGIN), y),
 QPointF((value * span) +
 FractionSlider.XMARGIN, fm.height())]
 painter.setPen(Qt.yellow)
 painter.setBrush(Qt.darkYellow)
 painter.drawPolygon(QPolygonF(triangle))


if __name__ == "__main__":
 import sys

 app = QApplication(sys.argv)
 form = QDialog()
 sliderLabel = QLabel("&Fraction")
 slider = FractionSlider(denominator=12)
 sliderLabel.setBuddy(slider)
 denominatorLabel = QLabel("&Denominator")
 denominatorSpinBox = QSpinBox()
 denominatorLabel.setBuddy(denominatorSpinBox)
 denominatorSpinBox.setRange(3, 60)
 denominatorSpinBox.setValue(slider.fraction()[1])
 denominatorSpinBox.setAlignment(Qt.AlignRight|Qt.AlignVCenter)
 numeratorLabel = QLabel("Numerator")
 numeratorLCD = QLCDNumber()
 numeratorLCD.setSegmentStyle(QLCDNumber.Flat)
 layout = QGridLayout()
 layout.addWidget(sliderLabel, 0, 0)
 layout.addWidget(slider, 0, 1, 1, 5)
 layout.addWidget(numeratorLabel, 1, 0)
 layout.addWidget(numeratorLCD, 1, 1)
 layout.addWidget(denominatorLabel, 1, 2)
 layout.addWidget(denominatorSpinBox, 1, 3)
 form.setLayout(layout)

 def valueChanged(denominator):
 numerator = int(slider.decimal() * denominator)
 slider.setFraction(numerator, denominator)
 numeratorLCD.display(numerator)

 #form.connect(slider, SIGNAL("valueChanged(int,int)"),
 #numeratorLCD, SLOT("display(int)"))
 slider.valueChanged[int,int].connect(numeratorLCD.display)
 #form.connect(denominatorSpinBox, SIGNAL("valueChanged(int)"),
 #valueChanged)
 denominatorSpinBox.valueChanged[int].connect(valueChanged)
 form.setWindowTitle("Fraction Slider")
 form.show()
 app.exec_()

運行結(jié)果:

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

python3+PyQt5實現(xiàn)自定義分數(shù)滑塊部件

本文通過Python3+PyQt5實現(xiàn)自定義部件–分數(shù)滑塊。它既能支持鍵盤也支持鼠標(biāo),使用物理(視口)坐標(biāo)通過繪制方式顯示。#,#。/usr/bin/env python3import platformfrom PyQt5.QtCore import (QPointF.QRectF.QSize.Qt,pyqtSignal)from PyQt5.QtWidgets import (QApplication.QDialog,QSizePolicy.QGridLayout.QLCDNumber.QLabel.QSpinBox.QWidget)from PyQt5.QtGui import QColor,QFont,QPainter,QFontMetricsF。運行結(jié)果。;
推薦度:
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 亚洲第二页| 国产a国产片 | 在线永久免费观看的毛片 | 一道精品视频一区二区三区男同 | 小处雏高清一区二区三区 | 精品久久中文网址 | 国产精品成人一区二区 | 欧美最猛性xxxxx动态图 | 国产一区三区二区中文在线 | 日韩一区精品 | 拍真实国产伦偷精品 | 国产在线精品观看 | 91精品国产综合久久久久久 | 亚洲国产欧美91 | 亚洲精品视频免费在线观看 | 视频在线一区二区 | 91精品一区二区三区久久久久 | 91精品国产高清久久久久久91 | 久久99精品一区二区三区 | 国产一区二区免费视频 | 久久国产一级毛片一区二区 | 欧美日韩亚洲国产无线码 | 亚洲第一页中文字幕 | 欧美色第一页 | 99久久免费国产精品特黄 | 亚洲欧美视屏 | 国产高清视频免费在线观看 | 欧美日韩中文 | 成年全黄大色大黄 | 亚洲欧美综合另类 | 国产手机在线αⅴ片无码观看 | 欧美亚洲图区 | 美女全黄网站 | 久久国产精品一区二区 | 国产亚洲一区二区三区在线观看 | 欧美视频免费看 | 色老头久久久久久久久久 | 亚洲国产精品一区二区久久 | 五月天婷婷基地 | 欧美在线视频一区二区 | 伊人情人综合成人久久网小说 |