gpt4 book ai didi

python - 如何在不使用类的情况下自动调整 QLabel 像素图保持比率?

转载 作者:太空狗 更新时间:2023-10-30 02:11:40 26 4
gpt4 key购买 nike

我们正在使用 PyQt 和 Qt Designer 制作 GUI。现在我们需要放置在 QLabel 中的图像(像素图)在调整窗口大小时很好地重新缩放以保持比例。

我一直在阅读其他问题/答案,但它们都使用扩展类。由于我们不断更改 UI,并且它是使用 Qt Creator 创建的,因此会自动生成 .ui 和(相应的).py 文件,因此,如果我没记错的话,使用类解决方案不是一个好的选择我们因为每次更新 ui 时都应该手动更改类的名称。

是否有任何选项可以自动调整 QLAbel 中的像素图大小以保持比例并避免使用扩展类?

谢谢。

最佳答案

有几种方法可以做到这一点。

首先,您可以将 Qt Designer 中的 QLabel 提升为用 python 编写的自定义子类。右键单击 QLabel 并选择“Promote to...”,然后为该类命名(例如“ScaledLabel”)并将头文件设置为将从中导入自定义子类的 python 模块(例如“mylib.h”)。类”)。

然后自定义子类将像这样重新实现 resizeEvent:

class ScaledLabel(QtGui.QLabel):
def __init__(self, *args, **kwargs):
QtGui.QLabel.__init__(self)
self._pixmap = QtGui.QPixmap(self.pixmap())

def resizeEvent(self, event):
self.setPixmap(self._pixmap.scaled(
self.width(), self.height(),
QtCore.Qt.KeepAspectRatio))

为了使其正常工作,QLabel 应将其大小策略设置为扩展或最小扩展,并且最小大小应设置为较小的非零值(以便图像可以按比例缩小)。

第二种方法避免使用子类并使用事件过滤器来处理调整大小事件:

class MainWindow(QtGui.QMainWindow):
def __init__(self):
...
self._pixmap = QtGui.QPixmap(self.label.pixmap())
self.label.installEventFilter(self)

def eventFilter(self, widget, event):
if (event.type() == QtCore.QEvent.Resize and
widget is self.label):
self.label.setPixmap(self._pixmap.scaled(
self.label.width(), self.label.height(),
QtCore.Qt.KeepAspectRatio))
return True
return QtGui.QMainWindow.eventFilter(self, widget, event)

关于python - 如何在不使用类的情况下自动调整 QLabel 像素图保持比率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21041941/

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