2017-10-12 10 views
0

現在、通常のメッセージングサービスのような単純なチャットアプリケーションを作成しています。直面する問題は、Iveが送信ボタンを押すだけでQVBoxLayoutにQLabelsを追加できなかったことです。メッセージはレイアウトに期待通りに送信されますが、別のメッセージを送信すると、追加するのではなく最初のメッセージが置き換えられます。 送信ボタンをクリックすると、次のコードが実行されます。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) 

問題が

答えて

1

self.message = QtGui.QLabel()を産む場所を私は知らないが、インスタンスの属性として保存された第1 QLabelの参照を置き換えます。

リストを実装して、最初からすべてのメッセージを保存するようにしてください。

self.messages = [] 

、ボタンによってトリガ方式で:

あなたは__init__方法では、前にこれを追加する必要が

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:

あなたが定義する必要があり

レイアウトを定義した直後に、最初に一度だけ配置すると、中心のメッセージの問題を修正する可能性があります。

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

と私はあなたがこれらの2行のために同じことを行うべきだと思う、あなたはリストにメッセージを追加し、このたび繰り返す必要はありません:

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

感謝を。出来た。 –

+0

今問題が2つあります。 –

+0

私に教えてください、私は本当のコンテキストを知らないでこれを提案しました – PRMoureu

関連する問題