AttributeError:'bool'对象没有属性'button'

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

[当我尝试运行此代码时,出现错误:

AttributeError: 'bool' object has no attribute 'button'

在函数fillLabel中,如何在单击鼠标左键时从QLabel图像中获得位置x,y](只要<终止职位选择)?我可以使用QCrusor,但是位置值将来自整个MainWindow,我只希望位置来自QLabel图像。

这里使用的图像是这个:

original

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_())

python python-3.x pyqt pyqt5
1个回答
0
投票
    解决方案是这样的:首先,我将x和y变量添加到类中,然后将事件ov单击标签上的连接到函数selectedLabel:
  • 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)
  • © www.soinside.com 2019 - 2024. All rights reserved.