使用 PyQt 创建一个简单的聊天界面
Creating a simple chat Interface using PyQt
目前正在创建一个看起来像普通消息服务的简单聊天应用程序。我面临的问题是我无法通过按下发送按钮在 QVBoxLayout 上添加更多 QLabel。它所做的只是按预期将消息发送到布局,但是当我发送另一条消息而不是附加消息时,它会替换第一条消息。
下面的代码是运行点击发送按钮时
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)
不知道问题出在哪里
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)`
目前正在创建一个看起来像普通消息服务的简单聊天应用程序。我面临的问题是我无法通过按下发送按钮在 QVBoxLayout 上添加更多 QLabel。它所做的只是按预期将消息发送到布局,但是当我发送另一条消息而不是附加消息时,它会替换第一条消息。 下面的代码是运行点击发送按钮时
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)
不知道问题出在哪里
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)`