detect-gui/widget/embed_item.py
2024-11-21 11:39:52 +08:00

57 lines
2.2 KiB
Python

from PyQt5.QtCore import QEvent, QRect, QSize
from PyQt5.QtWidgets import QLabel, QPushButton, QFrame
from widget.embed_detail import EmbedDetail
class EmbedItem(QFrame):
def __init__(self, parent=None):
super(EmbedItem, self).__init__(parent)
self.rect = None
self.param = None
self.item_button = QPushButton(self)
self.item_button.clicked.connect(self.click)
self.item_label = QLabel(self)
def resizeEvent(self, event: QEvent):
super().resizeEvent(event)
button_size = self.item_button.size()
label_size = self.item_label.sizeHint()
self.setFixedSize(max(button_size.width(), label_size.width()), button_size.height() + label_size.height() +2)
widget_size = self.size()
if label_size.width() > button_size.width():
self.item_button.move((widget_size.width() - button_size.width()) / 2, 0)
self.item_label.move(0, button_size.height() + 2)
self.move(self.rect.x() - (widget_size.width() - button_size.width()) / 2, self.rect.y())
else:
self.item_label.move((widget_size.width() - label_size.width()) / 2, button_size.height() + 2)
self.item_button.move(0, 0)
self.move(self.rect.x(), self.rect.y())
def setItemParam(self, param):
self.param = param
self.rect = QRect(param["x"], param["y"], param["w"], param["h"])
self.item_button.setFixedSize(QSize(param["w"], param["h"]))
self.item_button.setObjectName(param["code"])
self.item_label.setText(param["code"])
self.item_label.move(0, self.rect.height() + 5)
def setIndex(self, index):
self.item_button.setText(index)
def setChecked(self):
self.item_button.setStyleSheet("border: 1px solid #6cff6c;")
def setError(self):
self.item_button.setStyleSheet("border: 1px solid #FF4444;")
def click(self):
if self.item_button.text() is None or self.item_button.text() == "": return
detail = EmbedDetail()
detail.setInfo(self.param)
relative_pos = self.item_button.pos()
global_pos = self.mapToGlobal(relative_pos)
detail.move(global_pos.x() + self.item_button.width() + 2, global_pos.y() + 2)
detail.exec_()