PyQt 中的半可调整大小的小部件
Semi-resizable widgets in PyQt
我尝试用两个主要 widgets
创建一个 gui
。 window 应该可以调整大小。当水平调整大小时,只有其中一个小部件应该展开。当垂直调整大小时,两者都应该扩大。此外,应该可以重新调整水平拆分的大小。我对此进行了说明以使其更清楚:
对于 tkinter
,这可以通过属性 expand
和 fill
轻松实现。在 Qt
中我可以使用 resize event
但我希望我不必手动执行此操作,因为这毕竟是一项常见任务。我试着玩弄 QHBoxLayout
但不幸的是没有成功。
非常感谢任何帮助。谢谢。
您需要在 QSplitter
上使用 setStretchFactor
方法。
一个例子(修改自QSplitter例子here):
import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
hbox = QtGui.QHBoxLayout(self)
left = QtGui.QFrame(self)
left.setFrameShape(QtGui.QFrame.StyledPanel)
right = QtGui.QFrame(self)
right.setFrameShape(QtGui.QFrame.StyledPanel)
splitter = QtGui.QSplitter(QtCore.Qt.Horizontal)
splitter.addWidget(left)
splitter.addWidget(right)
splitter.setStretchFactor(1, 1)
splitter.setSizes([125, 150])
hbox.addWidget(splitter)
self.setLayout(hbox)
QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('Cleanlooks'))
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('QtGui.QSplitter')
self.show()
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
这会生成如下所示的初始 UI:
当图像水平展开时,您可以看到左侧小部件保持相同大小:
垂直展开时,两个小部件都会展开:
最后,拆分器可以调整大小:
如果您在调整拆分器后调整 window 大小,左侧小部件将保持其大小,右侧将 expand/collapse 填充 window 的剩余部分。
我尝试用两个主要 widgets
创建一个 gui
。 window 应该可以调整大小。当水平调整大小时,只有其中一个小部件应该展开。当垂直调整大小时,两者都应该扩大。此外,应该可以重新调整水平拆分的大小。我对此进行了说明以使其更清楚:
对于 tkinter
,这可以通过属性 expand
和 fill
轻松实现。在 Qt
中我可以使用 resize event
但我希望我不必手动执行此操作,因为这毕竟是一项常见任务。我试着玩弄 QHBoxLayout
但不幸的是没有成功。
非常感谢任何帮助。谢谢。
您需要在 QSplitter
上使用 setStretchFactor
方法。
一个例子(修改自QSplitter例子here):
import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
hbox = QtGui.QHBoxLayout(self)
left = QtGui.QFrame(self)
left.setFrameShape(QtGui.QFrame.StyledPanel)
right = QtGui.QFrame(self)
right.setFrameShape(QtGui.QFrame.StyledPanel)
splitter = QtGui.QSplitter(QtCore.Qt.Horizontal)
splitter.addWidget(left)
splitter.addWidget(right)
splitter.setStretchFactor(1, 1)
splitter.setSizes([125, 150])
hbox.addWidget(splitter)
self.setLayout(hbox)
QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('Cleanlooks'))
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('QtGui.QSplitter')
self.show()
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
这会生成如下所示的初始 UI:
当图像水平展开时,您可以看到左侧小部件保持相同大小:
垂直展开时,两个小部件都会展开:
最后,拆分器可以调整大小:
如果您在调整拆分器后调整 window 大小,左侧小部件将保持其大小,右侧将 expand/collapse 填充 window 的剩余部分。