如何使用不同的alignmen将QLabels添加到QTableWidget中

2024-05-20 01:07:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个QTableWidget,其中应该添加聊天消息(普通的qlabel)。在

我在这个表中只有一列,而对齐方式取决于发送者(me=左,him=右)

我知道我可以使用以下方法将小部件添加到QTableWidget中:

myTable.setCellWidget(row,0,myQLabel)

这会将标签添加到默认对齐方式中。现在,我不知道如何使每一行的对齐是动态的。在

我看到一些答案做了这样的事情,但项目不是小部件,只是文本。在

如何使添加的QWidget进入不同的对齐方式


Tags: 方法消息部件方式mytable动态标签row
1条回答
网友
1楼 · 发布于 2024-05-20 01:07:42

您必须建立到QLabel的对齐方式:

from PyQt5 import QtCore, QtGui, QtWidgets


class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)

        self.m_table = QtWidgets.QTableWidget(0, 1)
        self.m_table.verticalHeader().hide()
        self.m_table.horizontalHeader().setSectionResizeMode(
            QtWidgets.QHeaderView.Stretch
        )
        self.m_lineedit = QtWidgets.QLineEdit()
        self.left_button = QtWidgets.QPushButton(
            "Left", clicked=self.on_left_clicked
        )
        self.right_button = QtWidgets.QPushButton(
            "Right", clicked=self.on_right_clicked
        )

        lay = QtWidgets.QGridLayout(self)
        lay.addWidget(self.m_table, 0, 0, 1, 2)
        lay.addWidget(self.m_lineedit, 1, 0, 1, 2)
        lay.addWidget(self.left_button, 2, 0)
        lay.addWidget(self.right_button, 2, 1)

    @QtCore.pyqtSlot()
    def on_left_clicked(self):
        self.add_label(self.m_lineedit.text(), QtCore.Qt.AlignLeft)
        self.m_lineedit.clear()
        self.m_table.scrollToBottom()

    @QtCore.pyqtSlot()
    def on_right_clicked(self):
        self.add_label(self.m_lineedit.text(), QtCore.Qt.AlignRight)
        self.m_lineedit.clear()
        self.m_table.scrollToBottom()

    def add_label(self, text, alignment):
        label = QtWidgets.QLabel(text, alignment=alignment)
        row = self.m_table.rowCount()
        self.m_table.insertRow(row)
        self.m_table.setCellWidget(row, 0, label)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

enter image description here

更新:

另一个解决方案是创建一个QWidget,其中QLabel被放置在QLabel中,从而建立与QWidget相关的QLabel的对齐。在

^{pr2}$

相关问题 更多 >