When I tried to run this code I had got the Error:
AttributeError: 'bool' object has no attribute 'button'
in the function fillLabel
how can I get the position x,y from the QLabel image when I click the left mouse button (as long as right mouse button isn't clicked to terminate the positions selection)? I can use QCrusor, but the position value will come from the whole MainWindow, I just want the positions coming from QLabel image.
The image used here is this:
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_())
self.x = None
self.y = None
self.LB_Image_Orig.mousePressEvent = self.choseLabel
fillLabel
to be: def fillLabel(self,event):
if(self.label is not None):
if(self.x is not None):
y = round(self.y*(self.label.shape[1] / self.LB_Image_Orig.geometry().height()))
x = round(self.x*(self.label.shape[0] / self.LB_Image_Orig.geometry().width()))
print(x,y)
self.label[x,y] = self.comboBox.currentIndex()
def choseLabel(self,event):
if(self.image is not None):
self.x = event.pos().x()
self.y = event.pos().y()
self.fillLabel(event)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.