ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

我如何才能使QLabel与其显示的QPixmap的大小完全相同?

2019-11-08 05:57:28  阅读:261  来源: 互联网

标签:pyqt qlayout python


我需要有关QT / PyQt中的布局的一些建议.

我要实现的是正确显示,居中,缩放图像,并在保持其宽高比的情况下占用最大空间.可以使用以下命令轻松完成此操作:

class Demo(QWidget):
    def __init__(self) -> None:
        super().__init__()
        self.setWindowState(Qt.WindowMaximized)
        self.layout = QVBoxLayout()
        self.setLayout(self.layout)

        self.button = QPushButton("Next image")
        self.label = QLabel()
        self.label.setStyleSheet("QLabel { background-color : red; }")
        self.label.setAlignment(Qt.AlignCenter)

        self.layout.addWidget(self.label)
        self.layout.addWidget(self.button)

        self.button.clicked.connect(self.showImage)
        self.show()


    def showImage(self):
        self.pixmap = QPixmap("image.jpg")
        scaled = self.pixmap.scaled(self.label.size(), Qt.KeepAspectRatio)
        self.label.setPixmap(scaled)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Demo()
    sys.exit(app.exec_())

这样做的问题是,图像将显示在“标签”的中央,周围带有很多“多余的标签”,请参见屏幕截图,红色的东西

enter image description here

但是我需要Label恰好是图像的大小.我想在图像上做一些橡皮筋处理,以选择它们的一部分(选择框供以后在retinanet训练中使用),并计算出需要mapToGlobal和mapFromGlobal的框的正确大小.我无法从Pixmap本身执行此操作(因为它不是窗口小部件),而当我从Label执行此操作时,由于它大于实际图像,因此会得到错误的值.

现在,我可以将GridLayout或HBoxLayout与SpacerItems一起使用.问题在于逻辑.标签的大小(和UI加载时,SpacerItems会得到确定.当我以后动态添加图像时,即使只有SpacerItems会“给出方式”,它也会缩放到Label的大小,即使它可能更大).结果是,而不是在左右两侧都没有“太多标签”,而是在顶部和底部有了“太多标签”,我希望你明白我的意思.

我目前正在做的是:

>将窗口调整为屏幕分辨率
>添加(缩放的)图像
>调整大小(0,0)

然后调整应用程序的大小,以使Labe恰好是图像的大小(我想要的),但这是一种邪恶,骇人,闪烁,疯狂的方式;-)

编辑:
非常感谢您的回答,@eyllanesc

标签:pyqt,qlayout,python
来源: https://codeday.me/bug/20191108/2005996.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有