国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python3+PyQt5 自定義窗口部件--子類化內(nèi)置窗口部件

2019-11-08 19:31:18
字體:
供稿:網(wǎng)友

python3+PyQt5實現(xiàn)自定義羅馬數(shù)字的微調(diào)框。

#!/usr/bin/env python3import reimport sysfrom PyQt5.QtCore import QRegExp, Qtfrom PyQt5.QtWidgets import (Qapplication, QSpinBox)from PyQt5.QtGui import QRegExpValidatordef romanFromInt(integer): """ Code taken from Raymond Hettinger's code in Victor Yang's "Decimal to Roman Numerals" recipe in the Python Cookbook. >>> r = [romanFromInt(x) for x in range(1, 4000)] >>> i = [intFromRoman(x) for x in r] >>> i == [x for x in range(1, 4000)] True """ coding = zip( [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1], ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]) if integer <= 0 or integer >= 4000 or int(integer) != integer: raise ValueError("expecting an integer between 1 and 3999") result = [] for decimal, roman in coding: while integer >= decimal: result.append(roman) integer -= decimal return "".join(result)def intFromRoman(roman): """ Code taken from Paul Winkler's "Roman Numerals" recipe in the Python Cookbook. """ roman = roman.upper() coding = (("M", 1000, 3), ("CM", 900, 1), ("D", 500, 1), ("CD", 400, 1), ("C", 100, 3), ("XC", 90, 1), ("L", 50, 1), ("XL", 40, 1), ("X", 10, 3), ("IX", 9, 1), ("V", 5, 1), ("IV", 4, 1), ("I", 1, 3)) integer, index = 0, 0 for numeral, value, maxrepeat in coding: count = 0 while roman[index: index +len(numeral)] == numeral: count += 1 if count > maxrepeat: raise ValueError("not a valid roman number: {0}".format( roman)) integer += value index += len(numeral) if index != len(roman): raise ValueError("not a valid roman number: {0}".format(roman)) return integer# Regex adapted from Mark Pilgrim's "Dive Into Python" bookclass RomanSpinBox(QSpinBox): def __init__(self, parent=None): super(RomanSpinBox, self).__init__(parent) regex = QRegExp(r"^M?M?M?(?:CM|CD|D?C?C?C?)" r"(?:XC|XL|L?X?X?X?)(?:IX|IV|V?I?I?I?)$") regex.setCaseSensitivity(Qt.CaseInsensitive) self.validator = QRegExpValidator(regex, self) self.setRange(1, 3999) self.valueChanged[str].connect(self.fixCase) def fixCase(self, text): self.lineEdit().setText(text.upper()) def validate(self, text, pos): return self.validator.validate(text, pos) def valueFromText(self, text): return intFromRoman(str(text)) def textFromValue(self, value): return romanFromInt(value)if __name__ == "__main__": def report(value): 運行結(jié)果: 這里寫圖片描述 這里寫圖片描述


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 高淳县| 班戈县| 康乐县| 土默特右旗| 诸暨市| 兰溪市| 海晏县| 金溪县| 许昌市| 微山县| 石河子市| 竹溪县| 勐海县| 石河子市| 甘肃省| 九龙县| 灵川县| 莲花县| 巴马| 布拖县| 长汀县| 曲松县| 巴彦县| 阳江市| 健康| 辉县市| 大英县| 大方县| 监利县| 南通市| 施秉县| 韶山市| 武冈市| 苏尼特右旗| 台北县| 遵义市| 兴安县| 梁平县| 华宁县| 简阳市| 隆化县|