【问题标题】:PyQt: Getting the amount of lines from QTextEditPyQt:从 QTextEdit 获取行数
【发布时间】:2016-06-15 02:48:31
【问题描述】:

我正在尝试制作一个聊天应用程序,所以我在用户键入内容的地方添加了 QTextEdit 小部件,小部件的最大高度是 30 像素,所以基本上是 一个 行.

    self.msgtext = QtGui.QTextEdit(self)
    self.msgtext.setObjectName('msgtext')
    self.msgtext.setStyleSheet("#msgtext {background-color: black; color: yellow; font-size: 18pt; }")
    self.msgtext.setMaximumSize(500, 30)
    self.msgtextplain = self.msgtext.toPlainText()

每当用户换行时,我想增加小部件的最大高度,但我不知道是否有任何信号可以告诉我已经到达新行。

是否有任何信号,可以从 QTextEdit 中计算行数?

【问题讨论】:

    标签: python pyqt


    【解决方案1】:

    您可以使用blockCount(),但不要忘记调整您为QTextEdit 使用的任何父级的大小。这是一个例子:

    import sys
    from PyQt5 import QtGui, QtWidgets, QtCore
    
    class Window(QtWidgets.QWidget):
        def __init__(self):
            QtWidgets.QWidget.__init__(self)
    
            self.msgtext = QtWidgets.QTextEdit(self)
            self.msgtext.setObjectName('msgtext')
            self.msgtext.setStyleSheet("#msgtext {background-color: black; color: yellow; font-size: 18pt; }")
            self.msgtext.resize(500, 30)
            self.msgtextplain = self.msgtext.toPlainText()
    
            self.msgtext.textChanged.connect(self.changed)
    
        def changed(self):
            lines = self.msgtext.document().blockCount()
            self.msgtext.resize(500, 30*lines)
            self.resize(500, 30*lines)
    
    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        win = Window()
        win.show()
        sys.exit(app.exec_())
    

    它是 PyQt5。要在 PyQt4 中执行此操作,请将 QtWidgets 的所有内容更改为 QtGui(并明显检查导入行;这应该足够了,但请告诉您是否有任何困难)。结果如下:

    【讨论】:

    • 非常感谢您的精彩而详细的回答!,工作没有任何问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 2016-03-19
    • 1970-01-01
    相关资源
    最近更新 更多