如何使 QGridLayout() 在水平和垂直方向上都可调整大小?
how can I make QGridLayout() resizable in both horizontal and vertical directions?
我可以通过下面的代码成功地得到正确的布局,我怎样才能水平和垂直调整这个QGridLayout的大小?
self._s_q0= QLabel(u'what is your favorite color?')
self._e_q0 = QLineEdit(self)
self._e_q0.setText("yellow is the best color I can think of")
self._s_q1= QLabel(u'what is your favorite animal?')
self._e_q1 = QLineEdit(self)
self._e_q1.setText("cat or dog")
self._s_q2= QLabel(u'do you like swimming?')
self._e_q2 = QLineEdit(self)
self._e_q2.setText("not at all")
self._s_q3= QLabel(u'what date is it today?')
self._e_q3 = QLineEdit(self)
self._e_q3.setText("i dont know, you can ask Tom, he has a cellphone with him right now")
self._groupData = QGroupBox("100 questions list", self)
self._groupData_layout = QGridLayout()
self._groupData.setLayout(self._groupData_layout)
self._groupData_layout.addWidget(self._s_q0, 0, 0)
self._groupData_layout.addWidget(self._e_q0, 0, 1)
self._groupData_layout.addWidget(self._s_q1, 1, 0)
self._groupData_layout.addWidget(self._e_q1, 1, 1)
self._groupData_layout.addWidget(self._s_q2, 2, 0)
self._groupData_layout.addWidget(self._e_q2, 2, 1)
self._groupData_layout.addWidget(self._s_q3, 3, 0)
self._groupData_layout.addWidget(self._e_q3, 3, 1)
------------------------
添加更多描述。
我可以正确获取布局,现在代码生成的布局如下。
这个布局的宽度太宽了,如何缩小而不改变字体大小,如何给这个QGridLayout添加一个滚动条?
身高也一样,有100道题,QGridLayout太长无法全部展示。如何调整QGridLayout的高度,滚动条?
下图就是我想要的最终结果
仅显示部分布局以保存 space UI。拖动滚动条以显示此布局的其他部分。我不知道如何在代码中做到这一点,只需用画图编辑图片即可。
必须做的第一个任务是创建一个显示小部件结构的图表,在这种情况下我们可以使用下图:
.
└── groupbox
└── scrollarea
└── contents
├── form
└── spaceritem
然后你必须处理某些策略来处理大小,下一部分显示结果代码
代码:
class GroupBox(QGroupBox):
def __init__(self, *args, **kwargs):
QGroupBox.__init__(self, *args, **kwargs)
vlayout = QVBoxLayout(self)
scrollArea = QScrollArea(self)
scrollArea.setWidgetResizable(True)
self.scrollAreaWidgetContents = QWidget()
scrollArea.setWidget(self.scrollAreaWidgetContents)
vlayout.addWidget(scrollArea)
hlayout = QHBoxLayout(self.scrollAreaWidgetContents)
flayout = QFormLayout()
hlayout.addLayout(flayout)
hlayout.addItem(QSpacerItem(170, 20, QSizePolicy.Expanding, QSizePolicy.Minimum))
for i in range(100):
le = QLineEdit(self.scrollAreaWidgetContents)
le.setText("i dont know, you can ask Tom, he has a cellphone with him right now")
le.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
flayout.addRow("what date is it {}".format(i), le)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
app.setStyle("fusion")
w = QWidget()
w.setLayout(QVBoxLayout())
g = GroupBox("100 questions list")
w.layout().addWidget(g)
w.show()
sys.exit(app.exec_())
截图:
我可以通过下面的代码成功地得到正确的布局,我怎样才能水平和垂直调整这个QGridLayout的大小?
self._s_q0= QLabel(u'what is your favorite color?')
self._e_q0 = QLineEdit(self)
self._e_q0.setText("yellow is the best color I can think of")
self._s_q1= QLabel(u'what is your favorite animal?')
self._e_q1 = QLineEdit(self)
self._e_q1.setText("cat or dog")
self._s_q2= QLabel(u'do you like swimming?')
self._e_q2 = QLineEdit(self)
self._e_q2.setText("not at all")
self._s_q3= QLabel(u'what date is it today?')
self._e_q3 = QLineEdit(self)
self._e_q3.setText("i dont know, you can ask Tom, he has a cellphone with him right now")
self._groupData = QGroupBox("100 questions list", self)
self._groupData_layout = QGridLayout()
self._groupData.setLayout(self._groupData_layout)
self._groupData_layout.addWidget(self._s_q0, 0, 0)
self._groupData_layout.addWidget(self._e_q0, 0, 1)
self._groupData_layout.addWidget(self._s_q1, 1, 0)
self._groupData_layout.addWidget(self._e_q1, 1, 1)
self._groupData_layout.addWidget(self._s_q2, 2, 0)
self._groupData_layout.addWidget(self._e_q2, 2, 1)
self._groupData_layout.addWidget(self._s_q3, 3, 0)
self._groupData_layout.addWidget(self._e_q3, 3, 1)
------------------------
添加更多描述。 我可以正确获取布局,现在代码生成的布局如下。
这个布局的宽度太宽了,如何缩小而不改变字体大小,如何给这个QGridLayout添加一个滚动条?
身高也一样,有100道题,QGridLayout太长无法全部展示。如何调整QGridLayout的高度,滚动条?
下图就是我想要的最终结果
仅显示部分布局以保存 space UI。拖动滚动条以显示此布局的其他部分。我不知道如何在代码中做到这一点,只需用画图编辑图片即可。
必须做的第一个任务是创建一个显示小部件结构的图表,在这种情况下我们可以使用下图:
.
└── groupbox
└── scrollarea
└── contents
├── form
└── spaceritem
然后你必须处理某些策略来处理大小,下一部分显示结果代码
代码:
class GroupBox(QGroupBox):
def __init__(self, *args, **kwargs):
QGroupBox.__init__(self, *args, **kwargs)
vlayout = QVBoxLayout(self)
scrollArea = QScrollArea(self)
scrollArea.setWidgetResizable(True)
self.scrollAreaWidgetContents = QWidget()
scrollArea.setWidget(self.scrollAreaWidgetContents)
vlayout.addWidget(scrollArea)
hlayout = QHBoxLayout(self.scrollAreaWidgetContents)
flayout = QFormLayout()
hlayout.addLayout(flayout)
hlayout.addItem(QSpacerItem(170, 20, QSizePolicy.Expanding, QSizePolicy.Minimum))
for i in range(100):
le = QLineEdit(self.scrollAreaWidgetContents)
le.setText("i dont know, you can ask Tom, he has a cellphone with him right now")
le.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
flayout.addRow("what date is it {}".format(i), le)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
app.setStyle("fusion")
w = QWidget()
w.setLayout(QVBoxLayout())
g = GroupBox("100 questions list")
w.layout().addWidget(g)
w.show()
sys.exit(app.exec_())
截图: