Когда я пытался запустить этот код, я получил сообщение об ошибке:
AttributeError: 'bool' object has no attribute 'button'
в функции fillLabel
как я могу получить позицию x, y из изображение QLabel, когда я щелкаю левой кнопкой мыши (если правая кнопка мыши не нажата , чтобы прекратить выбор позиций)? Я могу использовать QCrusor, но значение позиции будет исходить из всего главного окна, я просто хочу, чтобы позиции исходили из изображения QLabel.
Здесь используется следующее изображение:
import sys
import os
import numpy as np
import matplotlib.pyplot as plt
from skimage.io import imread, imsave
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QCoreApplication, Qt, QDir
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1009, 577)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
#------- Initialization --------------------------
self.directory = None
self.label = None
self.image = None
#------- Seed PB ---------------------------------------
font = QtGui.QFont()
font.setFamily("Rockwell")
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.PB_Seeds_Button = QtWidgets.QPushButton(self.centralwidget)
self.PB_Seeds_Button.setGeometry(QtCore.QRect(90, 440, 151, 41))
self.PB_Seeds_Button.setFont(font)
self.PB_Seeds_Button.setObjectName("PB_Seeds_Button")
#------- LB_Image_Frame ---------------------------------------
self.frame_4 = QtWidgets.QFrame(self.centralwidget)
self.frame_4.setGeometry(QtCore.QRect(20, 20, 361, 361))
font = QtGui.QFont()
font.setFamily("Rockwell")
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.frame_4.setFont(font)
self.frame_4.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_4.setObjectName("frame_4")
self.frame_4.setAcceptDrops(True)
self.LB_Image_Orig = QtWidgets.QLabel(self.frame_4)
self.LB_Image_Orig.setGeometry(QtCore.QRect(20, 20, 361, 361))
self.LB_Image_Orig.setObjectName("LB_Image_Orig")
#------- LB_Seg_Frame ---------------------------------------
self.frame_5 = QtWidgets.QFrame(self.centralwidget)
self.frame_5.setGeometry(QtCore.QRect(400, 20, 361, 361))
font = QtGui.QFont()
font.setFamily("Rockwell")
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.frame_5.setFont(font)
self.frame_5.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_5.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_5.setObjectName("frame_5")
self.LB_Image_Seg = QtWidgets.QLabel(self.frame_5)
self.LB_Image_Seg.setGeometry(QtCore.QRect(20, 20, 361, 361))
self.LB_Image_Seg.setObjectName("LB_Image_Seg")
#------- LB_Combo_Box ---------------------------------------
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(250, 440, 69, 22))
font = QtGui.QFont()
font.setFamily("Rockwell")
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.comboBox.setFont(font)
self.comboBox.setMaxVisibleItems(7)
self.comboBox.setMaxCount(7)
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.retranslateUi(MainWindow)
self.comboBox.setCurrentIndex(0)
MainWindow.setCentralWidget(self.centralwidget)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.PB_Seeds_Button.clicked.connect(self.fillLabel)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Dicom"))
self.PB_Seeds_Button.setText(_translate("MainWindow", "Label Areas"))
self.comboBox.setItemText(0, _translate("MainWindow", "0"))
self.comboBox.setItemText(1, _translate("MainWindow", "1"))
self.comboBox.setItemText(2, _translate("MainWindow", "2"))
self.comboBox.setItemText(3, _translate("MainWindow", "3"))
self.comboBox.setItemText(4, _translate("MainWindow", "4"))
self.comboBox.setItemText(5, _translate("MainWindow", "5"))
self.comboBox.setItemText(6, _translate("MainWindow", "6"))
Image = imread('image.png')
self.label = np.zeros_like(Image)
self.image = QPixmap('image.png').copy()
self.LB_Image_Orig.setPixmap(self.image)
self.LB_Image_Orig.adjustSize()
QApplication.processEvents()
if os.path.exists("image.png"):
os.remove("image.png")
#-----------------------------------------------------------------------------------------
def fillLabel(self,event):
while( event.button() != QtCore.Qt.RightButton)):
if(event.button() == QtCore.Qt.LeftButton):
x = event.pos().x()
y = event.pos().y()
if(self.label is not None):
x = round(self.posx*(self.label.shape[0] / self.LB_Image_Orig.geometry().height()))
y = round(self.posy*(self.label.shape[1] / self.LB_Image_Orig.geometry().width()))
self.label[x,y] = self.comboBox.currentIndex()
if(np.sum(self.label)):
self.mask = QPixmap(self.label)
self.LB_Image_Seg.setPixmap(self.mask)
#self.LB_Image_Seg.resize(pixmap2.width(),pixmap2.height())
self.LB_Image_Seg.adjustSize()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
screenShape = QtWidgets.QDesktopWidget().screenGeometry()
MainWindow.resize(screenShape.width(), screenShape.height())
MainWindow.show()
sys.exit(app.exec_())