[英]AttributeError: 'bool' object has no attribute 'button'
當我嘗試運行此代碼時,我得到了錯誤:
AttributeError: 'bool' object has no attribute 'button'
在 function fillLabel
中,當我單擊鼠標左鍵時,如何從 QLabel 圖像中獲取 position x,y (只要未單擊鼠標右鍵以終止位置選擇)? 我可以使用 QCrusor,但 position 值將來自整個 MainWindow,我只想要來自 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_())
self.x = None
self.y = None
self.LB_Image_Orig.mousePressEvent = self.choseLabel
fillLabel
更改為: 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.