【发布时间】:2021-05-19 04:11:48
【问题描述】:
我正在尝试覆盖两个 QWidget,并让它们在窗口大小改变时自动调整大小。
背景 QWidget 显示一个带有坐标的网格,前景 QWidget 包含其他小部件(按钮等)。这些都设置为同一个 QWidget 的子级。如果我不使用布局,我可以让它们重叠,但是当父小部件调整大小时,我会失去有用的子小部件自动调整大小。
我的总体目标是创建一个编辑器,让用户可以为仪表板设计自己的小部件。网格背景将是网格布局,其小部件位于前台。
import sys
from PyQt5.QtWidgets import QApplication, QLabel, QPushButton, QWidget, \
QGridLayout
class Grid(QWidget):
def __init__(self, rows, columns, *args, **kwargs):
super().__init__(*args, **kwargs)
self.columns = columns
self.rows = rows
self.layout = QGridLayout()
self.layout.setContentsMargins(0,0,0,0)
self.layout.setSpacing(0)
for ii in range(self.rows):
for jj in range(self.columns):
label = QLabel('{}, {}'.format(ii,jj))
label.setStyleSheet("border: 1px solid grey; color: grey")
self.layout.addWidget(label, ii, jj, 1, 1)
self.setLayout(self.layout)
class Overlay(QWidget):
def __init__(self, rows, columns, *args, **kwargs):
super().__init__(*args, **kwargs)
self.rows = rows
self.columns = columns
self.layout = QGridLayout()
# self.layout.setContentsMargins(0,0,0,0)
# self.layout.setSpacing(0)
button_1 = QPushButton('yep')
button_2 = QPushButton('nope')
top_left_label = QLabel('tl')
bottom_right_label = QLabel('br')
self.layout.addWidget(button_1, 1, 1, 1, 4)
self.layout.addWidget(button_2, 4, 4, 2, 2)
self.layout.addWidget(top_left_label, 0, 0, 1, 1)
self.layout.addWidget(bottom_right_label, self.rows, self.columns, 1, 1)
self.setLayout(self.layout)
class Parent_Dashboard_Template(QWidget):
def __init__(self, rows, columns, *args, **kwargs):
super().__init__(*args, **kwargs)
self.rows = rows
self.columns = columns
self.setMinimumSize(400, 200)
self.layout = QGridLayout()
self.layout_2 = QGridLayout()
self.grid = Grid(self.rows, self.columns, parent=self)
# self.layout.addWidget(self.grid)
# self.setLayout(self.layout)
# self.grid.showMaximized()
self.overlay = Overlay(self.rows, self.columns, parent=self)
# self.layout_2.addWidget(self.overlay)
# self.setLayout(self.layout_2)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Parent_Dashboard_Template(10, 10)
window.show()
app.exec_()
【问题讨论】:
标签: python python-3.x pyqt pyqt5