gpt4 book ai didi

python - PyQt5中如何让小部件随窗口缩放?

转载 作者:行者123 更新时间:2023-12-04 17:42:04 24 4
gpt4 key购买 nike

我正在尝试设置一个 GUI,它将在 PyQt5 中包含多个页面。该窗口的最小尺寸为 800x600,但可以自定义。我希望窗口中的大部分(但不是全部)元素与其一起缩放。我已经有一个解决方案,但我觉得它不是很优雅。

这是一个 800x600 的窗口示例:

enter image description here

这是缩放后的另一个例子

enter image description here

我尝试过使用 QVBoxLayout,但是使用该系统,我无法设法保持此处的布局(并不是说不可能),而是所有小部件都居中且宽度相同。稍后,我可能还会考虑将小部件添加到与某些现有小部件具有相同 y 值的一侧,这是我不确定如何处理框布局的另一件事.

相关代码如下:

class CreatePage(QWidget):
def __init__(self, parent=None):
super().__init__()
self.initUI()

def initUI(self):
self.homeBtn = QPushButton("Home", self)
self.homeBtn.move(10, 10)

self.frontLabel = QLabel("Front", self)
self.frontLabel.setFont(QFont("Decorative", 20))

self.frontEdit = QTextEdit(self)
self.frontEdit.setFont(QFont("Decorative", 11))

self.backLabel = QLabel("Back", self)
self.backLabel.setFont(QFont("Decorative", 20))

self.backEdit = QTextEdit(self)
self.backEdit.setFont(QFont("Decorative", 11))

def paintEvent(self, e):
qp = QPainter()
qp.setFont(QFont("Decorative", 20))

size = self.size()
h = size.height()
w = size.width()

frontW = qp.fontMetrics().width("Front")
self.frontLabel.move((w/2) - (frontW/2) , h/15)
#I use fontMetrics to determine the width of the text
#I then use this information to centre the text

self.frontEdit.move(50, h/15 + 40)
self.frontEdit.resize(w-100, h/3)

backW = qp.fontMetrics().width("Back")
self.backLabel.move((w/2) - (backW/2), h/2)

self.backEdit.move(50, h/2 + 40)
self.backEdit.resize(w-100, h/3)

对于任何一般的草率表示歉意,我是 PyQt 和整个 GUI 编程的新手。不管怎样,我用于调整和移动小部件的公式是相当随意的。有谁知道实现这种效果的更好方法吗?

最佳答案

试一试:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class CreatePage(QWidget):
def __init__(self, parent=None):
super().__init__()
self.initUI()

def initUI(self):
self.homeBtn = QPushButton("Home")

self.frontLabel = QLabel("Front")
self.frontLabel.setFont(QFont("Decorative", 20))
self.frontEdit = QTextEdit(placeholderText="frontEdit")
self.frontEdit.setFont(QFont("Decorative", 11))

self.backLabel = QLabel("Back")
self.backLabel.setFont(QFont("Decorative", 20))
self.backEdit = QTextEdit(placeholderText="backEdit")
self.backEdit.setFont(QFont("Decorative", 11))

grid = QGridLayout()
grid.addWidget(self.homeBtn, 0, 0, alignment=Qt.AlignTop | Qt.AlignLeft)
grid.addWidget(self.frontLabel, 1, 0, alignment=Qt.AlignCenter)
grid.addWidget(self.frontEdit, 2, 0)
grid.addWidget(self.backLabel, 3, 0, alignment=Qt.AlignCenter)
grid.addWidget(self.backEdit, 4, 0)

self.setLayout(grid)

if __name__=="__main__":
app = QApplication(sys.argv)
myapp = CreatePage()
myapp.show()
sys.exit(app.exec_())

enter image description here

关于python - PyQt5中如何让小部件随窗口缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54055264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com