PySide - 保持网格的比例
PySide - Keeping Ratio of a Grid
我正在学习 Python 并且一直在尝试解决我的第一个小部件上的问题,但我正在努力。
我制作了一个 QGridLayout,其中包含 3 行 8 个方形 QToolButton。
当我向上或向下缩放 main window 时,我希望我的网格使用可能的最大宽度,但我也希望按钮保持正方形,无论我的 main window 具有什么大小和比例。
所以我想我不想在我的按钮上使用 Fixed sizePolicy,因为我希望它们随着 window 增大或缩小。但我需要它们有一个基本的正方形大小和它们的比例,以便始终保持不变。
所以我也想知道我是否应该在按钮上应用那些“保持比率”信息,或者直接将它应用到网格是否更好(我会说第二种选择更好,因为我只想要“填充”网格单元格的按钮。我的第二个问题是我是否可以仅使用一些 sizePolicy 或是否需要添加一些 resizeEvent。
class ColorPalette(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
grid_layout = QtWidgets.QGridLayout()
self.setLayout(grid_layout)
grid_layout.setSpacing(0)
for x in range(3):
for y in range(8):
sizepolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
button = QtWidgets.QToolButton()
button.setSizePolicy(sizepolicy)
grid_layout.addWidget(button, x, y)
class MainWindow(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.layout = QtWidgets.QGridLayout(self)
self.colorpalette = ColorPalette()
self.layout.addWidget(self.colorpalette, 0, 0)
c = MainWindow()
c.show()
在这段代码中,我试图像这样对小部件进行分层“可以以我们想要的任何方式调整大小的主窗口”->“将跟随主窗口调整大小但具有一些保持比率限制的调色板网格”- > “填充单元格的按钮”
但是我需要一些关于设置调色板网格大小限制的帮助。
感谢您的帮助!
有点找到了调整大小事件的解决方案..
class ColorPalette(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
def resizeEvent(self, event):
# Define Number of Rows
r = 3
# Define Number of Columns
c = 8
# Define Button Minimum Size
s = 10
self.setMinimumSize(c*2*s,r*2*s)
new_size = QtCore.QSize(c*s, r*s)
new_size.scale(event.size(), QtCore.Qt.KeepAspectRatio)
self.resize(new_size)
grid = QtWidgets.QGridLayout()
self.setLayout(grid)
grid.setSpacing(0)
for x in range(r):
for y in range(c):
button = QtWidgets.QToolButton()
policy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
button.setSizePolicy(policy)
button.setMinimumSize(s, s)
grid.addWidget(button, x, y)
class MainWidget(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
layout = QtWidgets.QHBoxLayout()
self.custom_widget = ColorPalette()
layout.addWidget(self.custom_widget)
self.setLayout(layout)
c = MainWidget()
c.show()
我正在学习 Python 并且一直在尝试解决我的第一个小部件上的问题,但我正在努力。
我制作了一个 QGridLayout,其中包含 3 行 8 个方形 QToolButton。 当我向上或向下缩放 main window 时,我希望我的网格使用可能的最大宽度,但我也希望按钮保持正方形,无论我的 main window 具有什么大小和比例。
所以我想我不想在我的按钮上使用 Fixed sizePolicy,因为我希望它们随着 window 增大或缩小。但我需要它们有一个基本的正方形大小和它们的比例,以便始终保持不变。
所以我也想知道我是否应该在按钮上应用那些“保持比率”信息,或者直接将它应用到网格是否更好(我会说第二种选择更好,因为我只想要“填充”网格单元格的按钮。我的第二个问题是我是否可以仅使用一些 sizePolicy 或是否需要添加一些 resizeEvent。
class ColorPalette(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
grid_layout = QtWidgets.QGridLayout()
self.setLayout(grid_layout)
grid_layout.setSpacing(0)
for x in range(3):
for y in range(8):
sizepolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
button = QtWidgets.QToolButton()
button.setSizePolicy(sizepolicy)
grid_layout.addWidget(button, x, y)
class MainWindow(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.layout = QtWidgets.QGridLayout(self)
self.colorpalette = ColorPalette()
self.layout.addWidget(self.colorpalette, 0, 0)
c = MainWindow()
c.show()
在这段代码中,我试图像这样对小部件进行分层“可以以我们想要的任何方式调整大小的主窗口”->“将跟随主窗口调整大小但具有一些保持比率限制的调色板网格”- > “填充单元格的按钮”
但是我需要一些关于设置调色板网格大小限制的帮助。
感谢您的帮助!
有点找到了调整大小事件的解决方案..
class ColorPalette(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
def resizeEvent(self, event):
# Define Number of Rows
r = 3
# Define Number of Columns
c = 8
# Define Button Minimum Size
s = 10
self.setMinimumSize(c*2*s,r*2*s)
new_size = QtCore.QSize(c*s, r*s)
new_size.scale(event.size(), QtCore.Qt.KeepAspectRatio)
self.resize(new_size)
grid = QtWidgets.QGridLayout()
self.setLayout(grid)
grid.setSpacing(0)
for x in range(r):
for y in range(c):
button = QtWidgets.QToolButton()
policy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
button.setSizePolicy(policy)
button.setMinimumSize(s, s)
grid.addWidget(button, x, y)
class MainWidget(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
layout = QtWidgets.QHBoxLayout()
self.custom_widget = ColorPalette()
layout.addWidget(self.custom_widget)
self.setLayout(layout)
c = MainWidget()
c.show()