разделение экрана по количеству пикселей - PullRequest
1 голос
/ 27 февраля 2020

, поэтому я пытаюсь создать GUI с PyQt5, и мне нужно, чтобы мой GUI был разделен, как показано ниже, числа в пикселях

enter image description here

Я пытаюсь начать заданное значение c windows с заданным значением c пикселей и сохранить его таким образом, даже если я растягиваю свое окно, я хочу, чтобы windows оставался в указанном положении c и оставался прежним размер. Так что в значительной степени windows не меняется и не двигается

Я пытаюсь использовать функцию QSplitter, но я не могу найти какой-либо вариант, чтобы она начиналась с заданного c значения пикселя и была постоянной

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()

1 Ответ

3 голосов
/ 27 февраля 2020

IIU C вы хотите, чтобы размер и положение 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_())

enter image description here

...