2017-10-12 7 views
0

Je suis en train de créer une application de chat simple qui ressemble à un service de messagerie habituel. Le problème est que je n'ai pas réussi à ajouter plus de QLabels sur un QVBoxLayout en appuyant simplement sur le bouton d'envoi. Tout ce qu'il fait est d'envoyer le message à la mise en page comme prévu, mais quand j'envoie un autre message, au lieu de l'ajouter, il remplace le premier message. Le code suivant est exécuté lorsque vous cliquez sur le bouton d'envoi.Création d'un chat simple Interface utilisant PyQt

self.message = QtGui.QLabel() 
# self.messageField is the QTextEdit where the user writes the message 
text = self.messageField.toPlainText() 
self.message.setText(text) 
self.messageField.clear() 
# self.messageLayout is our QVBoxLayout 
self.messageLayout.addWidget(self.message) 
self.messageLayout.setAlignment(self.message, QtCore.Qt.AlignTop) 
# self.widget is on top od the QScrollArea and it holds the QVBoxLayout 
self.widget.setLayoutDirection(QtCore.Qt.RightToLeft) 
self.widget.setLayout(self.messageLayout) 

Je ne sais pas où le problème pose

Répondre

1

self.message = QtGui.QLabel() remplace la première référence de QLabel stocké comme attribut d'instance. Essayez d'implémenter une liste à la place, pour stocker tous les messages depuis le début.

Vous devez ajouter ceci avant, dans la méthode __init__:

self.messages = [] 

Et dans la méthode déclenchée par le bouton:

message = QtGui.QLabel() 

text = self.messageField.toPlainText() 
message.setText(text) 
self.messageField.clear() 
self.messageLayout.addWidget(message) 
self.widget.setLayoutDirection(QtCore.Qt.RightToLeft) 
self.widget.setLayout(self.messageLayout) 
# and to keep a direct reference : 
self.messages.append(message) 

EDIT:

Vous devrez peut-être définir alignement une seule fois au début, juste après avoir défini votre mise en page, qui pourrait corriger le message centré numéro:

self.messageLayout = QVBoxLayout() # (i assume...) 
self.messageLayout.setAlignment(QtCore.Qt.AlignTop) 

et je pense que vous devriez faire la même chose pour ces 2 lignes, pas besoin de répéter chaque fois que vous ajoutez un message à la liste:

self.widget.setLayoutDirection(QtCore.Qt.RightToLeft) 
self.widget.setLayout(self.messageLayout)` 
+0

Merci. Ça a marché. –

+0

Suis maintenant avoir deux problèmes. –

+0

s'il vous plaît dites-moi, je l'ai suggéré sans connaître le contexte réel – PRMoureu