python - 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_())
解决方案
创建另一个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_())
推荐阅读
- python-3.x - 用 Python 提供的密钥(随机字符)替换文本(任意长度)(排列加密)
- php - Forbidden:您无权访问服务器上的 /
- regex - 如何从正则表达式中的字符串中提取关键字
- amazon-web-services - AWS CloudWatch 返回 InvalidNextToken
- php - 数据库中的子子组
- c# - 并发文件访问
- php - 拒绝其他用户编辑其他人的卡片
- excel - 如何在 Excel 上创建具有非常不同值的折线图
- azure-devops - Azure DevOps Server 2019 Analytics 通过 Power BI 查询问题配置
- python - 在镶木地板中将巨大的 pyspark 数据帧写入 EFS