PyQt5 - 将小部件放在QTextEdit

时间:2017-08-30 13:40:52

标签: python pyqt pyqt5 qtextedit

我正在使用pyqt5开发文本编辑器,我想实现一个查找框,它就像这样粘贴在我的textarea的右上角:

图像

textarea = QTextEdit()
layout = QHBoxLayout() # tried hbox, vbox and grid
find_box = QLineEdit()
empty = QTabWidget()
layout.addWidget(empty)
layout.addWidget(empty)
layout.addWidget(find_box)
textarea.setLayout(layout)

所以使用这段代码,即使窗口调整大小,我设法让我的Find Box粘在我的texarea的左边。但不知何故,我的textarea布局的y位置从中间开始:

图像

一个糟糕的解决方案是将textarea设置为我的Find Box父级,使用move(x,y)设置Find Box的位置但是每当我的窗口或我的textarea获得时我都必须抓住调整大小并再次使用move()来设置新位置。

那么为什么我的QTextEdit布局从中间开始呢?无论如何要避免这种情况吗?

1 个答案:

答案 0 :(得分:1)

我通过使用gridlayout并将延伸因子设置为行和列来实现它。

from PyQt5.QtWidgets import *
import sys

class Wind(QWidget):
    def __init__(self):
        super().__init__()
        self.setupUI()

    def setupUI(self):
        self.setGeometry(300,300, 300,500)
        self.show()
        text_area= QTextEdit()
        find_box = QLineEdit()

        # this layout is not of interest
        layout = QVBoxLayout(self)
        layout.addWidget(text_area)

        # set a grid layout put stuff on the text area
        self.setLayout(layout)

        text_layout= QGridLayout()

        # put find box in the top right cell (in a 2 by 2 grid) 
        text_layout.addWidget(find_box, 0, 1)

        # set stretch factors to 2nd row and 1st column so they push the find box to the top right
        text_layout.setColumnStretch(0, 1)
        text_layout.setRowStretch(1, 1)

        text_area.setLayout(text_layout)


def main():
    app= QApplication(sys.argv)
    w = Wind()
    exit(app.exec_())


if __name__ == '__main__':
    main()