код отлично работает в API v1, если я раскомментировать верхние вызовы SIP, то это означает, что я буду использовать v2, то, конечно, я буду видеть ошибки какКак переопределить qvalidator.validate() в api v2?
TypeError: invalid result type from Validator.validate()
я знаю, что нужно для изменения возвращаемого значения .validate(), но если я изменю его на то, что говорит pyqt doc в v2, http://pyqt.sourceforge.net/Docs/PyQt4/qvalidator.html#validate-2 , он дает мне ошибку сегментации (на pyqt 4.6.1, centos 6.3 x64). Зачем?
Код v2 отлично работает на pyqt 4.8 и 4.10, хотя (протестирован на fedora 19 linux и машине с Windows 7). Это ошибка или что мне не хватает?
спасибо!
#!/usr/bin/env python2
# api v2
import sip
sip.setapi('QString', 2)
sip.setapi('QVariant', 2)
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import re,os,sys
class MyQComboBox(QComboBox):
def __init__(self, parent=None, listing=None):
super(MyQComboBox, self).__init__(parent)
if listing != None:
self.listSetup(listing)
def listSetup(self, listing):
self.setEditable(True)
self.listing = listing
self.clear()
self.addItems(self.listing)
self.completer = QCompleter(self.listing)
self.setCompleter(self.completer)
self.valid = QValidator_listValid(self, listing = self.listing)
self.setValidator(self.valid)
# api v1
# class QValidator_listValid(QValidator):
# def __init__(self, parent=None, listing=None):
# super(QValidator_listValid, self).__init__(parent)
# self.listing = listing
# def validate(self, input, pos=None):
# for name in self.listing:
# if re.match(str(input), name, re.I):
# return (QValidator.Acceptable, pos)
# return (QValidator.Invalid, pos)
# api v2
class QValidator_listValid(QValidator):
def __init__(self, parent=None, listing=None):
super(QValidator_listValid, self).__init__(parent)
self.listing = listing
def validate(self, input, pos=None):
for name in self.listing:
if re.match(input, name, re.I):
return (QValidator.Acceptable,input, pos)
return (QValidator.Invalid,input,pos)
if __name__ == "__main__":
app = QApplication(sys.argv)
ui = MyQComboBox()
ui.listSetup(['aaa','bbb','ccc'])
ui.show()
sys.exit(app.exec_())