python-如何防止pyqt5应用程序中的窗口和小部件在一个小部件的可见性改变时改变大小

2021-01-08 23点热度 0人点赞 0条评论

我想创建一个对话框,在该对话框中,用户首先应在下拉列表中选择一个项目,对于某些选择,请指定一个附加参数。为了这个例子,假设可能的选择是a和b,对于b,用户必须输入一个文本。选择时文本字段不应可见。

这是一个mwe:

#!/usr/bin/env python
import sys
from PyQt5.QtWidgets import QApplication, QComboBox, QDialog, QGridLayout, QLineEdit

class Example(QDialog) :

    def __init__(self, parent=None) :
        super(QDialog, self).__init__(parent)
        self.mainLayout = QGridLayout()
        self.setLayout(self.mainLayout)

        self.comboBox = QComboBox()
        self.comboBox.addItems(['A', 'B'])
        self.mainLayout.addWidget(self.comboBox, 0, 0)

        self.lineEdit = QLineEdit('')
        self.lineEdit.setMinimumWidth(50)
        self.mainLayout.addWidget(self.lineEdit, 0, 1)

        self.comboBox.activated[str].connect(self.update)
        self.update(str(self.comboBox.currentText()))

    def update(self, choice) :
        if 'B' in choice :
            self.lineEdit.setVisible(True)
        else : 
            self.lineEdit.setVisible(False)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    example = Example()
    example.show()
    sys.exit(app.exec_())

问题是,当最初出现选项A时,对话框的大小刚好足够组合框使用。当选择选项B时,窗口将展开,并且一切正常。但是,当再次选择选项A时,组合框的宽度将增加,占用所有可用空间,而不是在右侧保留空白空间。

如何为文本字段分配空间,无论是否可见?我这里缺什么?

编辑
S.Nick的答案在某种程度上解决了MWE的问题,但不是我希望的那样:只要场景更复杂,小部件就会重新分配,例如,如果在组合框前面添加了Qlabel
    self.label = QLabel('label')
    self.mainLayout.addWidget(self.label, 0, 0)
    self.comboBox = QComboBox()
    self.comboBox.addItems(['A', 'B'])
    self.mainLayout.addWidget(self.comboBox, 0, 1, alignment=Qt.AlignLeft) 
    self.lineEdit = QLineEdit('', self)
    self.lineEdit.setMinimumWidth(50)
    self.mainLayout.addWidget(self.lineEdit, 0, 2)

然后在更改选择时翻转组合框。我想要的是,一旦在开始的空间和位置被分配给每个小部件,无论任何小部件是否可见,空间和位置都是永久的。

查看隐藏内容需要支付:¥1
查看

未经允许不得转载!python-如何防止pyqt5应用程序中的窗口和小部件在一个小部件的可见性改变时改变大小

本文地址:https://ans.52learn.online/2143

ANS52LEARN

DO BEST