python - 根据像素数分屏
问题描述
所以我正在尝试使用 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()
解决方案
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_())
推荐阅读
- python-requests - Plone 自己发出第二个 http 请求
- grid - Bootstrap 4 Grid 14 col 两行大小相同
- kotlin - 流和通道流有什么区别?
- java - 通过 LYO 获取 DOORS 属性类型
- java - 如何读取默认接口方法中的实现类?
- python - 使用 Python 3.8 和 macOS15 (Catalina) 的 pymc3 的 Theano 锁定问题
- c# - 仅当按下某个组合键时,如何将 WPF 控件的不透明度从 0 更改为 100%?
- specifications - ECMA CLI 规范:值类型的 initobj 指令描述
- sql - 在 Apply 块中使用需要表参数的标量函数
- amazon-web-services - Elastic Beanstalk 上的 OpenSSL 漏洞