# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 660)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.horizontalLayout.addWidget(self.comboBox)
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setObjectName("lineEdit")
self.horizontalLayout.addWidget(self.lineEdit)
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setObjectName("pushButton")
self.horizontalLayout.addWidget(self.pushButton)
self.verticalLayout_2.addLayout(self.horizontalLayout)
self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.scrollArea.sizePolicy().hasHeightForWidth())
self.scrollArea.setSizePolicy(sizePolicy)
self.scrollArea.setMinimumSize(QtCore.QSize(650, 550))
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setObjectName("scrollArea")
self.scrollAreaWidgetContents = QtWidgets.QWidget()
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 776, 548))
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.verticalLayout = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents)
self.verticalLayout.setObjectName("verticalLayout")
self.label = QtWidgets.QLabel(self.scrollAreaWidgetContents)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
self.label.setSizePolicy(sizePolicy)
self.label.setMinimumSize(QtCore.QSize(400, 500))
self.label.setText("")
self.label.setScaledContents(True)
self.label.setObjectName("label")
self.verticalLayout.addWidget(self.label)
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
self.verticalLayout_2.addWidget(self.scrollArea)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.comboBox.setItemText(0, _translate("MainWindow", "图片文件"))
self.comboBox.setItemText(1, _translate("MainWindow", "文本文件"))
self.pushButton.setText(_translate("MainWindow", "确定"))
import os
import cv2
import sys
import time
from PyQt5.QtWidgets import QMessageBox, QApplication, QMainWindow, QDialog
from PyQt5 import QtGui
from untitled import Ui_MainWindow
from PyQt5.QtCore import QRunnable, QThreadPool, pyqtSlot
class ImageLoader(QRunnable):
def __init__(self, file_path, label):
super(ImageLoader, self).__init__()
self.file_path = file_path
self.label = label
@pyqtSlot()
def run(self):
image = cv2.imread(self.file_path)
if image is not None:
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
qImg = QtGui.QImage(image.data, image.shape[1], image.shape[0], QtGui.QImage.Format_RGB888)
pixmap = QtGui.QPixmap.fromImage(qImg)
image_width = image.shape[1]
image_height = image.shape[0]
time.sleep(1)
self.label.setFixedWidth(image_width)
self.label.setFixedHeight(image_height)
self.label.setPixmap(pixmap)
self.label.adjustSize() # 调整标签大小,以适应图片大小(不会对图片造成影响)
else:
QMessageBox.warning(None, "错误", "图像文件路径无效")
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
# 调用QMainWindow类的构造函数,初始化主窗口对象。
super(MainWindow, self).__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.pushButton_function)
def pushButton_function(self):
content = self.comboBox.currentText()
filePath = self.lineEdit.text()
if content == "图片文件":
image_loader = ImageLoader(filePath, self.label)
QThreadPool.globalInstance().start(image_loader)
elif content == "文本文件":
fileExtension = os.path.splitext(filePath)[-1]
if fileExtension == ".txt":
with open(filePath, "r", encoding="utf-8") as text_file:
text = text_file.read()
self.label.setText(text)
else:
QMessageBox.warning(None, "错误", "无效的文本文件")
else:
QMessageBox.warning(None, "错误", "请选择正确类型")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
我希望在label上显示文本时,当文本太长时自动出现滚动条,可是实际上并没有出现滚动条。我也添加了滚动区,在显示图片时滚动区就正常出来了,可是文本就不行。请问该怎么修改?
不能把label换成lineEdit,因为我需要它既能显示图片,又能显示文本。