无法在布局内更改大小

2024-09-29 02:19:19 发布

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

嗯,我有一个文本编辑器,上面有一个按钮。。。我希望文本编辑器位于一个布局中,这样它就可以增大和减小它的大小QDialog,但是我不想对按钮做同样的操作,顺便说一句,它没有我想要的大小,也无法更改它。我能做什么?

代码:

from PyQt4 import QtCore, QtGui
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class TextEditorDlg(QDialog):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.resize(500, 400)
        self.Grid = QtGui.QGridLayout(self)
        self.button = QtGui.QPushButton(self)
        self.Grid.addWidget(self.button, 0, 0)
        self.lineEdit = QtGui.QLineEdit(self)
        self.textEdit = QtGui.QTextEdit(self)
        self.Grid.addWidget(self.lineEdit, 1, 0)
        self.Grid.addWidget(self.textEdit, 2, 0)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    myapp = TextEditorDlg()
    myapp.show()
    sys.exit(app.exec_())

现在看到问题了吗?


Tags: fromimportselfinitsys按钮gridparent
1条回答
网友
1楼 · 发布于 2024-09-29 02:19:19

首先,我不明白你为什么要使用QGridLayout。你知道你根本不用网格吗?您只需使用QVBoxLayout

总之,正如我在评论中提到的,您可能可以使用QHBoxLayoutaddStretch方法获得所需的“输出”:

import sys
from PyQt4 import QtCore, QtGui


class TextEditorDlg(QtGui.QDialog):
    def __init__(self, parent=None):
        super(TextEditorDlg, self).__init__(parent)
        self.resize(500, 400)

        self.button = QtGui.QPushButton(self)
        self.lineEdit = QtGui.QLineEdit(self)
        self.textEdit = QtGui.QTextEdit(self)

        self.button_layout = QtGui.QHBoxLayout()
        self.button_layout.addStretch()
        self.button_layout.addWidget(self.button)
        self.button_layout.addStretch()

        self.grid = QtGui.QGridLayout(self)

        self.grid.addLayout(self.button_layout, 0, 0)
        self.grid.addWidget(self.lineEdit, 1, 0)
        self.grid.addWidget(self.textEdit, 2, 0)

        # Alternative using QVBoxLayout:
        #self.layout = QtGui.QVBoxLayout(self)
        #self.layout.addLayout(self.button_layout)
        #self.layout.addWidget(self.line_edit)
        #self.layout.addWidget(self.text_edit)



if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    myapp = TextEditorDlg()
    myapp.show()
    sys.exit(app.exec_())

您可以调整将整数传递给^{}的拉伸量。

如果要使用QGridLayout将按钮放置在特定位置,则应该执行以下操作:

import sys
from PyQt4 import QtCore, QtGui


class TextEditorDlg(QtGui.QDialog):
    def __init__(self, parent=None):
        super(TextEditorDlg, self).__init__(parent)
        self.resize(500, 400)

        self.button = QtGui.QPushButton(self)
        self.lineEdit = QtGui.QLineEdit(self)
        self.textEdit = QtGui.QTextEdit(self)

        self.grid = QtGui.QGridLayout(self)

        # Use the row-span and column-span arguments!
        self.grid.addWidget(self.button, 0, 0, 1, 1)
        self.grid.addWidget(self.lineEdit, 1, 0, 1, 3)
        self.grid.addWidget(self.textEdit, 2, 0, 1, 3)



if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    myapp = TextEditorDlg()
    myapp.show()
    sys.exit(app.exec_())

可以使用正确的行和列索引以及行跨距和列跨距值将按钮精确地放置在所需的位置。


编辑:如果要更改QPushButton的大小,必须更改按钮的QSizePolicyQTextEdit的策略。例如:

import sys
from PyQt4 import QtCore, QtGui


class TextEditorDlg(QtGui.QDialog):
    def __init__(self, parent=None):
        super(TextEditorDlg, self).__init__(parent)
        self.resize(500, 400)

        self.button = QtGui.QPushButton(self)
        self.button.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Expanding)
        self.lineEdit = QtGui.QLineEdit(self)
        self.textEdit = QtGui.QTextEdit(self)
        self.textEdit.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)

        self.grid = QtGui.QGridLayout(self)

        # Use the row-span and column-span arguments!
        self.grid.addWidget(self.button, 0, 0, 3, 1)
        self.grid.addWidget(self.lineEdit, 3, 0, 1, 3)
        self.grid.addWidget(self.textEdit, 4, 0, 1, 3)



if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    myapp = TextEditorDlg()
    myapp.show()
    sys.exit(app.exec_())

你会看到按钮更大。您可以通过更改行间距来控制大小。 在第self.grid.addWidget(self.button, 0, 0, 3, 1)行中,增大/减小3将增大/减小垂直大小(实际上是小部件占用的行数),增大/减小1将更改水平大小。

注意,如果将小部件放在跨3行的0行,则必须小心不要创建冲突,将新的小部件添加到布局中。

相关问题 更多 >