首页 > 解决方案 > Pyqt5调整图像查看器大小并在其旁边添加文本框

问题描述

我创建了一个带有拖放功能的 pyqt5 窗口。我需要执行一些操作并且需要在它旁边的文本框中更新结果。

截至目前我完成了一半,我只需要添加文本框。怎么做?

在此处输入图像描述

预期产出

在此处输入图像描述

代码:

import sys
import os
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QPushButton
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap
​
class ImageLabel(QLabel):
    def __init__(self):
        super().__init__()
​
        self.setAlignment(Qt.AlignCenter)
        self.setText('\n\n Drop Image Here \n\n')
        self.setStyleSheet('''
            QLabel{
                border: 4px dashed #aaa
            }
        ''')
​
    def setPixmap(self, image):
        super().setPixmap(image)
​
​
class AppDemo(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(600, 400)
        self.setAcceptDrops(True)
        mainLayout = QVBoxLayout()
        self.photoViewer = ImageLabel()
        mainLayout.addWidget(self.photoViewer)
        self.detect = QPushButton('Detect This !')
        mainLayout.addWidget(self.detect)
        self.detect.clicked.connect(self.hello)
        self.setLayout(mainLayout)
​
    def dragEnterEvent(self, event):
        if event.mimeData().hasImage:
            event.accept()
        else:
            event.ignore()
​
    def dragMoveEvent(self, event):
        if event.mimeData().hasImage:
            event.accept()
        else:
            event.ignore()
​
    def dropEvent(self, event):
        if event.mimeData().hasImage:
            event.setDropAction(Qt.CopyAction)
            self.file_path = event.mimeData().urls()[0].toLocalFile()
            self.set_image(self.file_path)
            event.accept()
        else:
            event.ignore()
​
    def set_image(self, file_path):
        pixmap = QPixmap(file_path)
        pixmap= pixmap.scaledToWidth(250)
        self.photoViewer.setPixmap(pixmap)
        print(file_path)
​
​
    def hello(self):
        print("hello")
​
​
app = QApplication(sys.argv)
demo = AppDemo()
demo.show()
sys.exit(app.exec_())

标签: pythonpython-3.xpyqt5

解决方案


创建另一个QVBoxLayout,将您需要的东西放入其中。将两者连接QVBoxLayout QHBoxLayout.

import sys
#import os
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, \
    QPushButton, QTextEdit, QHBoxLayout
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap


class ImageLabel(QLabel):
    def __init__(self):
        super().__init__()
        
        self.setAlignment(Qt.AlignCenter)
        self.setText('\n\n Drop Image Here \n\n')
        self.setStyleSheet('''
            QLabel{
                border: 4px dashed #aaa
            }
        ''')

    def setPixmap(self, image):
        super().setPixmap(image)

        
class AppDemo(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(680, 400)
        self.setAcceptDrops(True)
        
        vLayout_1 = QVBoxLayout()
        self.photoViewer = ImageLabel()
        vLayout_1.addWidget(self.photoViewer)
        self.detect = QPushButton('Detect This !')
        vLayout_1.addWidget(self.detect)
        self.detect.clicked.connect(self.hello)
#        self.setLayout(mainLayout)
        
        self.textEdit = QTextEdit()
        self.btn_clear = QPushButton('Clear')
        vLayout_2 = QVBoxLayout()
        vLayout_2.addWidget(self.textEdit)
        vLayout_2.addWidget(self.btn_clear)
        
        mainLayout = QHBoxLayout(self)
        mainLayout.addLayout(vLayout_1, stretch=3)
        mainLayout.setSpacing(20)
        mainLayout.addLayout(vLayout_2, stretch=2)
        
    def dragEnterEvent(self, event):
        if event.mimeData().hasImage:
            event.accept()
        else:
            event.ignore()
            
    def dragMoveEvent(self, event):
        if event.mimeData().hasImage:
            event.accept()
        else:
            event.ignore()
            
    def dropEvent(self, event):
        if event.mimeData().hasImage:
            event.setDropAction(Qt.CopyAction)
            self.file_path = event.mimeData().urls()[0].toLocalFile()
            self.set_image(self.file_path)
            event.accept()
        else:
            event.ignore()
            
    def set_image(self, file_path):
        pixmap = QPixmap(file_path)
        pixmap= pixmap.scaledToWidth(250)
        self.photoViewer.setPixmap(pixmap)
        print(file_path)
        
    def hello(self):
        print("hello")

        
app = QApplication(sys.argv)
demo = AppDemo()
demo.show()
sys.exit(app.exec_())

在此处输入图像描述


推荐阅读