Search code examples
pythonqtqt4cursorqlineedit

Python: Qt4 QLineEdit the TextCursor Doesn't disappear


I've a Dialog window with some QLineEdits to insert the data in my software, I Switch from first QLineEdit to the next with TAB key on keyboard

I want the background to change its color to (for example) Yellow and when is focused out (the focus is switched to another) it must go back to White a QLineEdit is Focused,the . for doing this, I inserted a Different StyleSheet in FocusInEvent and FocusOutEvent.

But i have a problem...

The Problem is When i focus on QlineEdit it works (The background change color to yellow) but if i write something and i switch to the next QLineEdit. the TextCursor in the last QlineEdit doesn't disappear and I view two or also more Text Cursors in my window.

*I omit part of source code (Like=>Layout, Database Functions, etc..) because I think they are irrelevant for helping me to fix my problem.

from PyQt4 import QtGui,QtCore;

class AddWindow(QtGui.QDialog):

    def __init__(self):
        QtGui.QDialog.__init__(self);

        #Surname
        self.SurnameLabel=QtGui.QLabel("Surname:",self);
        self.SurnameLabel.move(5,20);

        self.SurnameBox=QtGui.QLineEdit(self);
        self.SurnameBox.move(5,35);
        self.SurnameBox.focusInEvent=self.OnSurnameBoxFocusIn;
        self.SurnameBox.focusOutEvent=self.OnSurnameBoxFocusOut;

        #Name
        self.NameLabel=QtGui.QLabel("Name:",self);
        self.NameLabel.move(150,20);

        self.NameBox=QtGui.QLineEdit(self);
        self.NameBox.move(150,35);
        self.NameBox.focusInEvent=self.OnNameBoxFocusIn;
        self.NameBox.focusOutEvent=self.OnNameBoxFocusOut;

    def OnSurnameBoxFocusIn(self,event):
        self.SurnameBox.setStyleSheet("QLineEdit {background-color:yellow}");

    def OnSurnameBoxFocusOut(self,event):
        self.SurnameBox.setStyleSheet("QLineEdit {background-color:white}");

    def OnNameBoxFocusIn(self,event):
        self.NameBox.setStyleSheet("QLineEdit {background-color:yellow}");

    def OnNameBoxFocusOut(self,event):
        self.NameBox.setStyleSheet("QLineEdit {background-color:white}");            

Solution

  • The problem is your implement some event is important of cursor behavior and your code has been interrupt it. To fix it please get old behavior back them after your code has work successful;

    def OnSurnameBoxFocusIn(self,event):
        self.SurnameBox.setStyleSheet("QLineEdit {background-color:yellow}");
        QtGui.QLineEdit.focusInEvent(self.SurnameBox,event) # <- put back old behavior
    
    def OnSurnameBoxFocusOut(self,event):
        self.SurnameBox.setStyleSheet("QLineEdit {background-color:white}");
        QtGui.QLineEdit.focusOutEvent(self.SurnameBox,event) # <- put back old behavior
    
    def OnNameBoxFocusIn(self,event):
        self.NameBox.setStyleSheet("QLineEdit {background-color:yellow}");
        QtGui.QLineEdit.focusInEvent(self.NameBox,event) # <- put back old behavior
    
    def OnNameBoxFocusOut(self,event):
        self.NameBox.setStyleSheet("QLineEdit {background-color:white}");
        QtGui.QLineEdit.focusOutEvent(self.NameBox,event) # <- put back old behavior
    

    Regards,