【问题标题】:QHBoxLayout (size, resize, move)QHBoxLayout(大小,调整大小,移动)
【发布时间】:2019-12-04 21:28:47
【问题描述】:

任务:

例如(下面的代码)我们创建 QHBoxLayout,其中有两个按钮。

import sys
from PyQt5.QtWidgets import (QWidget, QPushButton, QHBoxLayout, QApplication)
class Example(QWidget):
    
        def __init__(self):
            super().__init__()
    
            hbox = QHBoxLayout()
            okButton = QPushButton("OK")
            cancelButton = QPushButton("Cancel")
            hbox.addWidget(okButton)
            hbox.addWidget(cancelButton)
            self.setLayout(hbox)
    
            self.setGeometry(100, 100, 500, 500)
            self.show()
    
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

必要:

在主窗口设置hbox (QHBoxLayout) (W_pix, H_pix) 及其坐标(X_pos, Y_pos) 的大小(它们不适合,我在文档中没有找到这样的功能对于 QHBoxLayout、QWidget 的描述)。

v.2

import sys

from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import QRect
from PyQt5.QtWidgets import (QWidget, QPushButton,
                             QHBoxLayout, QApplication, QMainWindow, QVBoxLayout)

class Example(QMainWindow):

    def __init__(self):
        super().__init__()
        self.hbox = QVBoxLayout()
        self.okButton = QPushButton("OK")
        self.cancelButton = QPushButton("Cancel")
        self.hbox.addWidget(self.okButton)
        self.hbox.addWidget(self.cancelButton)

        self.setGeometry(100, 100, 500, 500)
        self.setLayout(self.hbox)
        self.hbox.setGeometry(QtCore.QRect(200, 200, 300, 300))
        self.show()

app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

【问题讨论】:

  • 你能显示输出截图吗?并解释代码在图像的帮助下究竟是如何工作的?
  • 我可以看到可用于 QHBoxLayout doc.qt.io/qt-5/qboxlayout.html#setGeometry的几何图形
  • 示例代码正在运行。问题是你不能改变大小和位置。也许:hbox.setGeometry(100, 100, 200, 200)? (但没用:TypeError: setGeometry(self, QRect): argument 1 has unexpected type 'int')
  • 代码运行没有错误,如下所示:hbox.setGeometry (QtCore.QRect (200, 200, 300, 300)) 但大小 QHBoxLayout() 不会改变。
  • 在上面显示的示例代码中,没有窗口,它是一个小部件。基本上,您已经为小部件设置了布局,并且正在显示小部件。更改小部件的几何形状并将该小部件放在窗口中。你可能会得到你想要的结果。

标签: python pyqt5 qwidget


【解决方案1】:

QXLayout 不是视觉元素,因此不能直接应用建立几何图形(位置和大小),而必须对其进行解释。

QHBoxLayout 的任务是使用 sizeHint、sizePolicy、最小和最大尺寸等信息水平分布小部件,并将使用为小部件建立位置的最大可用尺寸。

考虑到最后一点,您可以将您的需求外推到该小部件,因为如上所述处理布局的几何图形是该小部件的几何图形。所以在这种情况下,创建了一个用作容器的 QWidget。

from PyQt5.QtWidgets import QApplication, QHBoxLayout, QMainWindow, QPushButton, QWidget


class Example(QMainWindow):
    def __init__(self):
        super().__init__()

        x_pos, y_pos = 10, 10
        w_pix, h_pix = 150, 150

        container = QWidget(self)
        container.setContentsMargins(0, 0, 0, 0)
        container.setFixedSize(w_pix, h_pix)
        container.move(x_pos, y_pos)
        container.setStyleSheet("background-color:salmon;")

        hbox = QHBoxLayout(container)
        hbox.setContentsMargins(0, 0, 0, 0)

        self.okButton = QPushButton("OK")
        self.cancelButton = QPushButton("Cancel")

        hbox.addWidget(self.okButton)
        hbox.addWidget(self.cancelButton)

        self.resize(640, 480)


if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 2017-05-20
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多