Bonjour,
Un petit problème d'ergonomie (en toute modestie).
Voilà je voudrais que mon widget LineEdit se remette à blanc tout seul quand j'ai trouvé ce que je cherchais dans mon QCompleter.
Comme un dessin étaye mieux une discussion voici mon code (encore une fois en toute modestie)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
 
import os, sys
from PyQt5.QtGui import QStandardItemModel,QStandardItem
from PyQt5.QtCore import QStringListModel,pyqtSignal
from PyQt5.QtWidgets import (QApplication,QWidget,QVBoxLayout,
                    QLayout,QLineEdit,QCompleter,
                    QListWidget,QMainWindow)
 
 
class Principal(QMainWindow):
 
    def __init__(self):
        super().__init__()
 
        myW=QWidget()
        self.setCentralWidget(myW)
        self.setGeometry(500,500,400,200)
        self.setWindowTitle('Test completer.activated')
 
        maliste=os.listdir("/usr/share/applications/")
        slm = QStringListModel()
        slm.setStringList(maliste)
 
        self.c = QCompleter()
        self.c.setCaseSensitivity(0)
        self.c.setObjectName("completer")
        self.c.setModel(slm)
 
 
        self.le = QLineEdit()
        self.le.setPlaceholderText("Recherche ....")
        self.le.setClearButtonEnabled(True)
        self.le.setObjectName("LineEdit")
        self.le.setCompleter(self.c)
        #self.le.editingFinished.connect(self.addItem)
        #self.le.returnPressed.connect(self.addItem)
        self.c.activated.connect(self.addItem)
        self.c.activated.connect(self.le.clear)
 
        self.lw=QListWidget()
        self.lw.setStyleSheet("background-color:LightGrey")
 
        self.vBox=QVBoxLayout()
        self.vBox.addWidget(self.lw)
        self.vBox.addWidget(self.le)
 
 
        myW.setLayout(self.vBox)
        self.le.setFocus()
 
 
    def addItem(self):
        sender=self.sender()
        print("entree:",sender.objectName(), self.le.text())
        #print(self.c.currentCompletion(), self.c.currentRow())
        #if sender.objectName() =="completer":
        self.lw.addItem(self.le.text())
        self.le.clear()
 
        #self.c.disconnect()
 
        print("sortie:",sender.objectName(), self.le.text())
 
if __name__ == '__main__':
 
    app =QApplication(sys.argv)
    test = Principal()
    test.show()
    sys.exit(app.exec_())
Une fois la sélection faite dans le Qcompleter (completer.activated.connect(additem)
Pour remettre à blanc le LineEdit il faut cliquer sur le petit "clearbutton" à droite.
La fonction additem fait efface bien le texte du LineEdit mais il reste toujours visible.
La seule façon que j'ai trouvée pour faire disparaitre le texte du LineEdit c'est de faire un completer.disconnect(),
mais comment reconnecter le completer si c'est la seule solution?
comment faire cette remise à blanc sans être obligé de cliquer sur un bouton ?
j'ai essayé de jour avec les signaux du LineEdit en émettant un signal editingfinished ou returnpressed mais aucun résultats.
Merci de votre aide.