Есть несколько проблем с вашим кодом. Прежде всего, поскольку setimage
и crop
являются методами экземпляра, их первым параметром должен быть сам экземпляр класса, т.е. они должны быть определены как def setimage(self, filename)
и def crop(self, filename)
.
Во-вторых, единственным параметром, передаваемым сигналом QPushButton.clicked
, является атрибут QPushButton.checked
, поэтому при подключении self.setimage
к self.browse_button
self.setimage
будет фактически называться self.setimage(self.browse_button.checked())
, чтонаверное не то что ты. Обходной путь - вместо предоставления filename
в качестве аргумента self.setimage
, чтобы сохранить его как переменную экземпляра, например,
class Window(QtWidgets.QMainWindow):
def __init__(self):
...
self.fileName = ''
...
self.self.browse_button.clicked.connect(self.setimage)
def setimage(self):
if self.fileName:
#pixmap object
pixmap=QtGui.QPixmap(self.fileName)
#seting image inside that pixmap
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)
Чтобы задать имя файла, Window.file
станет чем-то вроде
def file(self):
fileName ,_ = QtWidgets.QFileDialog.getOpenFileName(None,"Select Image", "D:\python_data\interface","Image Files (*.png *.jpg)")
if fileName:
self.fileName = fileName
self.crop
будет похоже на self.setimage
, т.е. вам нужно будет использовать self.fileName
вместо предоставления fileName
в качестве входного параметра. Кроме того, QPixmap
не может иметь дело с массивными массивами напрямую AFAIK, поэтому вам нужно сначала создать QImage
, прежде чем создавать QPixmap
, например
def crop(self):
if self.fileName:
img = cv2.imread(self.fileName, 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[1], croped.shape[0], QtGui.QImage.Format_Indexed8)
pixmap = QtGui.QPixmap(image)
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)