如何在PyQt5中的按钮上放置条件?

问题描述 投票:0回答:1

我是PyQt5]的新手,我试图显示在[browser_button)中由browse_label选择的图像,当用户单击crop_button时,它将裁剪该图像。但是当我将(numpy array)转换为Qimg(Qpixmap)时,显示不正确]

from PyQt5 import QtGui,QtWidgets,QtCore,uic
from PyQt5.QtWidgets import QApplication,QMainWindow,QPushButton,QMessageBox,QStatusBar
from PyQt5.QtCore import QCoreApplication

import sys
import cv2

IMAGE_1=0
class Window(QtWidgets.QMainWindow):
    def __init__(self):
        super(Window,self).__init__()
        uic.loadUi('Welcome1.ui',self)
        self.title="Gender_Identifier"

        self.setWindowIcon(QtGui.QIcon("main-logo.png"))
#        self.browse_button.clicked.connect(self.setimage)
 #       self.roi_button.clicked.connect(self.crop)
        self.work_IMAGE=None
        self.browse_button.clicked.connect(self.setimage)
        self.roi_button.clicked.connect(self.crop)

        button=QPushButton("close",self)
        button.clicked.connect(self.close)

        self.InitWindow()

        #IMAGE=self.set_image()
    def InitWindow(self):

        self.statusBar().showMessage("This is a simple status bar")
        self.setWindowTitle(self.title)

    def file(self):

        fileName ,_ =QtWidgets.QFileDialog.getOpenFileName(None,"Select Image", "D:\python_data\interface","Image Files (*.png *.jpg)")
        return fileName

    def setimage(self):
        fileName ,_ =QtWidgets.QFileDialog.getOpenFileName(None,"Select Image", "D:\python_data\interface\images\preprocessed","Image Files (*.png *.jpg)")

        if fileName:
            #pixmap object
            pixmap=QtGui.QPixmap(fileName)
            pixmap=pixmap.scaled(self.browse_label.width(),self.browse_label.height(),QtCore.Qt.KeepAspectRatio)
            self.browse_label.setPixmap(pixmap)
            self.browse_label.setAlignment(QtCore.Qt.AlignCenter)
            if(fileName):
                self.work_IMAGE=fileName
    def crop(self):
        if(self.work_IMAGE):
            file=self.work_IMAGE
            img = cv2.imread(file, 0)

            height,width=img.shape[:2]
            start_row,strt_col=int(height*.40),int(width*.15)
            end_row,end_col=int(height*.60),int(width*.90)
            croped=img[start_row:end_row,strt_col:end_col].copy()
            image = QtGui.QImage(croped, croped.shape[0], croped.shape[1], QtGui.QImage.Format_Indexed8)
            pixmap = QtGui.QPixmap(image)
            print(type(image))
            print(type(pixmap))
            print(type(croped))
            #cv2.imshow("img",croped)
            pixmap=pixmap.scaled(self.roi_label.width(),self.roi_label.height(),QtCore.Qt.KeepAspectRatio)
            self.roi_label.setPixmap(pixmap)
            self.roi_label.setAlignment(QtCore.Qt.AlignCenter)


if __name__=='__main__':

    App=QtWidgets.QApplication(sys.argv)
    window=Window()
   # IMAGE=window.setimage()
    #window.crop(IMAGE)
   # IMAGE_1=IMAGE
    #print(IMAGE)
    #print(IMAGE_1)
    window.show()
    sys.exit(App.exec_())

对此我非常感谢。我尽我所能进行搜索,但未找到满意的解决方案我附上图片以更清楚地说明问题

enter image description here

我是PyQt5的新手,我正尝试在(browse_label)中显示由browser_button选择的图像,当用户单击crop_button时,它将裁剪该图像。.但是当我转换时(numpy ...

python pyqt pyqt5
1个回答
2
投票
您的代码有几个问题。首先,由于setimagecrop是实例方法,所以它们的第一个参数应该是类实例本身,即应将它们定义为def setimage(self, filename)def crop(self, filename)
© www.soinside.com 2019 - 2024. All rights reserved.