【问题标题】:Keeping QPlainTextEdit as small as possible without needing a scroll bar保持 QPlainTextEdit 尽可能小而不需要滚动条
【发布时间】:2020-08-31 22:43:02
【问题描述】:

我有一个QPlainTextEdit,它将包含不同数量的文本 - 有时什么都没有,有时太多以至于它会环绕几十次。我想保持QPlainTextEdit 尽可能高,以保持其所有内容可见。除非完全为空,否则不应有空行。

我尝试将尺寸策略设置为MinimumMinimumExpanding,并将最小和最大高度设置为零。没有这些作品的组合;在所有情况下,一个空的QPlainTextEdit 大约有四行半高。

似乎将高度降低到这个 4.5 行限制以下的唯一东西是setFixedHeight。但是,如果我这样做,那么我将需要自己计算所需的高度,这会破坏首先使用库的意义。

现在,我能想到的唯一可行的方法是这样的:

def onResize_or_textChanged(...):
  my_text_edit.setHeight(0)
  while my_text_exit has a visible scroll bar:
    my_text_edit.setHeight(my_text_edit.height() + 1)

这显然是一个相当老套的解决方案。

如何使QPlainTextEdit 保持完全显示其文本所需的最小高度?

【问题讨论】:

    标签: python-3.x pyqt5 qt5


    【解决方案1】:

    解决方案是计算最小高度,以便使用blockBoundingGeometry() 可以看到所有QTextBlock

    from PyQt5 import QtCore, QtWidgets
    
    
    class MainWindow(QtWidgets.QMainWindow):
        def __init__(self, parent=None):
            super().__init__(parent)
    
            self.te = QtWidgets.QPlainTextEdit()
            self.te.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
            self.te.updateRequest.connect(self.handle_updateRequest)
            self.handle_updateRequest()
    
            central_widget = QtWidgets.QWidget()
            lay = QtWidgets.QVBoxLayout(central_widget)
            lay.addWidget(self.te, alignment=QtCore.Qt.AlignTop)
            self.setCentralWidget(central_widget)
    
            self.resize(640, 480)
    
        def handle_updateRequest(self):
            doc = self.te.document()
            tb = doc.findBlockByNumber(doc.blockCount() - 1)
            h = self.te.blockBoundingGeometry(tb).bottom() + 2 * doc.documentMargin()
            self.te.setFixedHeight(h)
    
    
    if __name__ == "__main__":
        import sys
    
        app = QtWidgets.QApplication(sys.argv)
        w = MainWindow()
        w.show()
        sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      相关资源
      最近更新 更多