Ich suche nach einer Möglichkeit, verschiedene QWidgets (QLineEdit, PasswordEdit) in einer class zu integrieren.
Bisher verwende ich für jedes QWidget eine eigene Klasse (Beispiel).
Die Events (focusInEvent, focusOutEvent, mousePressEvent, eventFilter), sind bei den verschiedenen QWidgets identisch.
Code: Alles auswählen
class TextInput(QLineEdit):
def __init__(self, parent):
super(TextInput, self).__init__()
self.parent = parent
self.installEventFilter(self)
def focusInEvent(self, event):
colorField(widget=self.parent.focusWidget(), parent=self.parent)
super(TextInput, self).focusInEvent(event)
def focusOutEvent(self, event):
try:
i = self.parent.inputWidgets.index(self.parent.focusWidget())
except ValueError:
return None
self.parent.lastCol = i-1 if i > 0 else 0
widget = self.parent.inputWidgets[self.parent.lastCol]
colorField(widget=widget, parent=self.parent)
super(TextInput, self).focusOutEvent(event)
def mousePressEvent(self, QMouseEvent):
if QMouseEvent.type() == QEvent.MouseButtonPress:
button = ""
i = self.parent.inputWidgets.index(self.parent.focusWidget())
if QMouseEvent.button() == Qt.LeftButton:
button = "Left"
self.parent.keyRelease = 'mouse'
self.parent.inputControl()
elif QMouseEvent.button() == Qt.RightButton:
button = "Right"
elif QMouseEvent.button() == Qt.MiddleButton:
button = "Middle"
super(TextInput, self).mousePressEvent(QMouseEvent)
def eventFilter(self, widget, event):
if event.type() == QEvent.KeyRelease and widget is self:
key = event.key()
i = self.parent.inputWidgets.index(self.parent.focusWidget())
if widget.text().strip() == '':
try:
self.parent.Login.setEnabled(False)
except AttributeError:
pass
try:
self.parent.Registration.setEnabled(False)
except AttributeError:
pass
try:
self.parent.Send.setEnabled(False)
except AttributeError:
pass
for w in self.parent.inputWidgets[
(i if len(self.parent.inputWidgets)-1 == i
else i+1):]:
w.clear()
colorField(widget=w, parent=self.parent)
if key in (Qt.Key_Return, Qt.Key_Enter):
self.parent.keyRelease = 'return'
colorField(widget=widget, parent=self.parent)
self.parent.inputControl()
elif key == Qt.Key_Down:
self.parent.keyRelease = 'down'
colorField(widget=widget, parent=self.parent)
self.parent.inputControl()
elif key == Qt.Key_Up:
self.parent.keyRelease = 'up'
self.parent.inputControl()
colorField(widget=widget, parent=self.parent)
elif key == Qt.Key_Tab:
self.parent.keyRelease = 'down'
try:
check = {
0 : self.parent.checkMail,
1 : self.parent.checkLogin,
2 : self.parent.userPassword,
3 : self.parent.userPasswordRepeat
}[self.parent.lastCol]
except AttributeError:
check = False
if not check:
widget = self.parent.inputWidgets[self.parent.lastCol]
widget.setFocus()
else:
colorField(widget=widget, parent=self.parent)
return QWidget.eventFilter(self, widget, event)
Grüße Nobuddy