首页 > 解决方案 > 根据像素数分屏

问题描述

所以我正在尝试使用 PyQt5 创建一个 GUI,我需要像下面这样拆分我的 GUI,数字是像素

在此处输入图像描述

我试图以特定的像素值启动特定的窗口并保持这种状态,即使我拉伸我的窗口我希望窗口保持在特定的位置并且仍然是相同的大小。所以几乎所有的窗户都不会改变也不会移动

我正在尝试使用函数 QSplitter,但我找不到任何选项让它从特定像素值开始并保持不变

from PyQt5.QtWidgets import (QWidget, QHBoxLayout, QFrame, 
    QSplitter, QStyleFactory, QApplication)
from PyQt5.QtCore import Qt
import sys

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):      

        hbox = QHBoxLayout(self)

        topleft = QFrame(self)
        topleft.setFrameShape(QFrame.StyledPanel)

        topright = QFrame(self)
        topright.setFrameShape(QFrame.StyledPanel)

        bottom = QFrame(self)
        bottom.setFrameShape(QFrame.StyledPanel)

        splitter1 = QSplitter(Qt.Horizontal)
        splitter1.addWidget(topleft)
        splitter1.addWidget(topright)

        splitter2 = QSplitter(Qt.Vertical)
        splitter2.addWidget(splitter1)
        splitter2.addWidget(bottom)

        hbox.addWidget(splitter2)
        self.setLayout(hbox)

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('QSplitter')
        self.show()

标签: pythonpyqtpyqt5qsplitter

解决方案


IIUC 你希望 QFrame 的大小和位置是固定的,如果是,那么你不应该使用 QSplitter 但必须使用 move 来设置位置和 setFixedSize 来设置大小:

from PyQt5 import QtCore, QtWidgets


class Example(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        f1 = self.create_qframe(QtCore.QPoint(10, 10), QtCore.QSize(640, 480))
        f2 = self.create_qframe(QtCore.QPoint(10, 500), QtCore.QSize(640, 480))

        f3 = self.create_qframe(QtCore.QPoint(660, 10), QtCore.QSize(320, 240))
        f4 = self.create_qframe(QtCore.QPoint(990, 10), QtCore.QSize(320, 240))

        f5 = self.create_qframe(QtCore.QPoint(660, 260), QtCore.QSize(320, 230))
        f6 = self.create_qframe(QtCore.QPoint(990, 260), QtCore.QSize(320, 230))

        f7 = self.create_qframe(QtCore.QPoint(660, 500), QtCore.QSize(320, 240))
        f8 = self.create_qframe(QtCore.QPoint(990, 500), QtCore.QSize(320, 240))

        f9 = self.create_qframe(QtCore.QPoint(660, 750), QtCore.QSize(320, 230))
        f10 = self.create_qframe(QtCore.QPoint(990, 750), QtCore.QSize(320, 230))

        self.setMinimumSize(1320, 990)
        # or self.setFixedSize(1320, 990)

    def create_qframe(self, pos, size):
        frame = QtWidgets.QFrame(self, frameShape=QtWidgets.QFrame.StyledPanel)
        frame.move(pos)
        frame.setFixedSize(size)
        return frame


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    app.setStyle("fusion")
    w = Example()
    w.show()
    sys.exit(app.exec_())

在此处输入图像描述


推荐阅读