2017-10-12 112 views
0

我目前正在創建一個看起來像通常的消息服務的簡單聊天應用程序。我面臨的問題是,我沒有通過只按發送按鈕添加更多的QLBoxels在QVBoxLayout上。它所做的只是按預期的方式將消息發送到佈局,但是當我發送另一條消息而不是追加消息時,它會替換第一條消息。 單擊發送按鈕時將運行以下代碼。使用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()替換存儲爲一個實例屬性中的第QLabel參考。

嘗試實現一個列表,而不是從一開始就存儲所有消息。

您需要之前添加此,在__init__方法:

self.messages = [] 

而在由按鈕觸發的方法:

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) 

編輯:

您可能需要定義只在開始時對齊一次,在您定義佈局之後,可能會修復居中消息問題:

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

,我認爲你應該做的這兩條線一樣的,沒必要這樣你追加的消息到列表中,每次重複:

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

感謝。有效。 –

+0

我現在有兩個問題。 –

+0

請告訴我,我在不知道真實背景的情況下提出了這個問題 – PRMoureu