HexSpinBox from SpinBox
16进制
字符从0-9 ,A-F, a-f
范围从0-255
通过查找QT助手,找到SpinBox
实现,主要完成三个虚函数
virtual QValidator::State validate(
QString &text, int &pos) const
virtual QString textFromValue(int value) const
virtual int valueFromText(const QString &text) const
对应三个函数
def validate(self,text,pos): #输入验证
def textFromValue(self, value): #数字变字符 python 使用hex(value)
def valueFromText(self,text): #字符串变成数字 int( text,16)
具体实现如下:
- # -*- coding:utf-8 -*-
- from PyQt5.QtWidgets import QSpinBox, QApplication
- from PyQt5.QtCore import pyqtSlot, QRegExp
- from PyQt5.QtGui import QRegExpValidator
- class HexSpinBox(QSpinBox):
- """docstring for HexSpinBox"""
- def __init__(self, parent=None):
- super(HexSpinBox, self).__init__(parent)
- self.setRange(0, 255)
- self._validator = QRegExpValidator(QRegExp("[0-9A-Fa-f]+"), self)
- def validate(self,text,pos):
- return self._validator.validate(text,pos)
- def textFromValue(self, value):
- if value in range(0,16):
- return "0"+hex(value)[2:].upper()
- else:
- return hex(value)[2:].upper()
- def valueFromText(self,text):
- num = int(text, 16)
- return num
- @pyqtSlot(str)
- def setText(self,text):
- self.setValue(self.valueFromText(text))
- if __name__ == '__main__':
- import sys
- app = QApplication(sys.argv)
- ex = HexSpinBox()
- ex.sizeHint()
- ex.setText('0A')
- ex.show()
- sys.exit(app.exec_())