在 PyQt 中缩放 QWidget

Posted

技术标签:

【中文标题】在 PyQt 中缩放 QWidget【英文标题】:Scaling QWidgets in PyQt 【发布时间】:2016-05-17 09:15:47 【问题描述】:

我在 Python 中构建了一个应用程序,使用 PyQt4 库作为我的 GUI。我的 GUI 在其上方绘制了一个图形和一些按钮。图表位于frame_B,图表上方的按钮(和LED)位于frame_A

我在MainWindow 类中创建frame_A(以及frame_B):

class CustomMainWindow(QtGui.QMainWindow):

    def __init__(self):
        super(CustomMainWindow, self).__init__()
        # Do some initialization stuff..
    ''''''

    def initLayout(self):
        # Create frame_A and its corresponding layout
        frame_A = QtGui.QFrame(self)
        setCustomSize(frame_A, 380,800)
        self.layout_A = QtGui.QGridLayout()
        frame_A.setLayout(self.layout_A)

        # Create frame_B, and so forth..

    ''''''

    def setButtons(self):
        # Create btn01..
        # Create btn02..
        # Create btn03..
        # Create btn04..
        # Create btn05..
        # Create led01..
        # Add all buttons to the layout of frame_A:
        self.layout_A.addWidget(self.btn01, *(0,0))
        self.layout_A.addWidget(self.btn02, *(0,1))
        self.layout_A.addWidget(self.btn03, *(0,2))
        self.layout_A.addWidget(self.btn04, *(0,3))
        self.layout_A.addWidget(self.btn05, *(0,4))
        self.layout_A.addWidget(self.led01, *(0,5))

    ''''''

''''''

结果非常令人满意,如上图所示。当我放大我的窗口(通过简单的点击并用鼠标拖动)时,frame_Aframe_B 也会放大。那很好。我不想要任何其他方式。

但令我困扰的是frame_A 中的按钮被均匀分布以填充所有新空间。我更喜欢这样的行为:

任何人有一个聪明的想法来实现这一点?

【问题讨论】:

【参考方案1】:

在最后一个按钮后添加self.layout_A.addStretch()

【讨论】:

它不起作用。我收到错误:AttributeError: 'QGridLayout' object has no attribute 'addStretch()'【参考方案2】:

如果您只想水平添加小部件,我建议使用QHBoxLayout 而不是QGridLayout。这样你就可以使用layout_A.setAlignment(QtCore.Qt.AlignLeft)。不确定这是否也适用于 Gridlayout。

【讨论】:

像魅力一样工作!谢谢先生:-)

以上是关于在 PyQt 中缩放 QWidget的主要内容,如果未能解决你的问题,请参考以下文章

使用 pyqt4 正确处理 Windows 操作系统缩放

OpenGL PyQt 对象不缩放

使用 NavigationToolbar 进行缩放在使用 pyqt 的 matplotlib 中不起作用

如何正确设置在 PyQt5 上缩放的 Pixmap?

PyQT不同的图像自动缩放模式[重复]

如何使小部件随 PyQt5 中的窗口缩放?