本文使用painter画IC symbol
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtGui import QPainter, QPolygon, QPen
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QColor
from PyQt5.QtGui import QFont
class Symbol_DFN(QWidget):
def __init__(self, pin_num, mark_name, pin_name_array):
super().__init__()
self.ic_pin_num = pin_num
self.ic_mark_name = mark_name
self.ic_pin_name_array = pin_name_array
self.win_width = 800
self.win_height = 800
def paintEvent(self, event):
painter = QPainter(self)
pin_w = int(30)
pin_h = int(30)
#IC box
pen = QPen(Qt.black)
pen.setWidth(2)
painter.setPen(pen)
box_w = pin_w * (1 * self.ic_pin_num + 1)
box_h = pin_h * (2 * self.ic_pin_num + 1)
box_x = int((self.win_width - box_w) / 2)
box_y = int((self.win_height - box_h) / 2)
painter.drawRect(box_x, box_y, box_w, box_h)
#IC pin
pen.setWidth(1)
painter.setPen(pen)
#Left pins
pin_x = box_x - pin_w
for index in range(self.ic_pin_num):
pin_y = int(box_y + (2 * index + 1) * pin_h)
painter.drawRect(pin_x, pin_y, pin_w, pin_h)
pin_num_x = int(pin_x + pin_w / 2)
pin_num_y = int(pin_y + pin_h / 1.3)
painter.drawText(pin_num_x, pin_num_y, "{}".format(index + 1))
pin_text_x = int(pin_num_x + 23)
pin_text_y = int(pin_num_y)
painter.drawText(pin_text_x, pin_text_y, "{}".format(self.ic_pin_name_array[index]))
#Right pins
pin_x = box_x + box_w
for index in range(self.ic_pin_num):
pin_y = int(box_y + (2 * index + 1) * pin_h)
painter.drawRect(pin_x, pin_y, pin_w, pin_h)
pin_num_x = int(pin_x + pin_w / 2)
pin_num_y = int(pin_y + pin_h / 1.3)
painter.drawText(pin_num_x, pin_num_y, "{}".format(self.ic_pin_num * 2 - index))
pin_text_x = int(pin_num_x - 38)
pin_text_y = int(pin_num_y)
painter.drawText(pin_text_x, pin_text_y, "{}".format(self.ic_pin_name_array[self.ic_pin_num * 2 - 1 - index]))
#Mark
font_size = 7 + self.ic_pin_num
font = QFont("黑体", font_size)
ic_mark_x = int(self.win_width / 2 - font_size * 2)
ic_mark_y = int(box_y + box_h / 2)
painter.setPen(QColor(0x00FFFF))
painter.setFont(font)
painter.drawText(ic_mark_x, ic_mark_y, self.ic_mark_name)
class Symbol_QFN(QWidget):
def __init__(self, pin_num, mark_name, pin_name_array):
super().__init__()
self.ic_pin_num = pin_num
self.ic_mark_name = mark_name
self.ic_pin_name_array = pin_name_array
self.win_width = 800
self.win_height = 800
def paintEvent(self, event):
painter = QPainter(self)
pin_w = int(30)
pin_h = int(30)
#IC box
pen = QPen(Qt.black)
pen.setWidth(2)
painter.setPen(pen)
box_w = pin_w * (2 * self.ic_pin_num + 1)
box_h = pin_h * (2 * self.ic_pin_num + 1)
box_x = int((self.win_width - box_w) / 2)
box_y = int((self.win_height - box_h) / 2)
painter.drawRect(box_x, box_y, box_w, box_h)
#IC pin
pen.setWidth(1)
painter.setPen(pen)
#Left pins
pin_x = box_x - pin_w
for index in range(self.ic_pin_num):
pin_y = int(box_y + (2 * index + 1) * pin_h)
painter.drawRect(pin_x, pin_y, pin_w, pin_h)
pin_num_x = int(pin_x + pin_w / 2)
pin_num_y = int(pin_y + pin_h / 1.3)
pin_num_index = index + 1
painter.drawText(pin_num_x, pin_num_y, "{}".format(pin_num_index))
pin_text_x = int(pin_num_x + 23)
pin_text_y = int(pin_num_y)
painter.drawText(pin_text_x, pin_text_y, "{}".format(self.ic_pin_name_array[pin_num_index - 1]))
#Bottom pins
pin_y = box_y + box_h
for index in range(self.ic_pin_num):
pin_x = int(box_x + (2 * index + 1) * pin_w)
painter.drawRect(pin_x, pin_y, pin_h, pin_w)
pin_num_x = int(pin_x + pin_w / 3)
pin_num_y = int(pin_y + pin_h / 1.3)
pin_num_index = self.ic_pin_num + 1 + index
painter.drawText(pin_num_x, pin_num_y, "{}".format(pin_num_index))
pin_text_x = int(pin_num_x - 5)
pin_text_y = int(pin_num_y - 30)
painter.drawText(pin_text_x, pin_text_y, "{}".format(self.ic_pin_name_array[pin_num_index - 1]))
#Right pins
pin_x = box_x + box_w
for index in range(self.ic_pin_num):
pin_y = int(box_y + (2 * index + 1) * pin_h)
painter.drawRect(pin_x, pin_y, pin_w, pin_h)
pin_num_x = int(pin_x + pin_w / 2)
pin_num_y = int(pin_y + pin_h / 1.3)
pin_num_index = 3 * self.ic_pin_num - index
painter.drawText(pin_num_x, pin_num_y, "{}".format(pin_num_index))
pin_text_x = int(pin_num_x - 43)
pin_text_y = int(pin_num_y)
painter.drawText(pin_text_x, pin_text_y, "{}".format(self.ic_pin_name_array[pin_num_index - 1]))
#Top pins
pin_y = box_y - pin_h
for index in range(self.ic_pin_num):
pin_x = int(box_x + (2 * index + 1) * pin_w)
painter.drawRect(pin_x, pin_y, pin_h, pin_w)
pin_num_x = int(pin_x + pin_w / 3)
pin_num_y = int(pin_y + pin_h / 1.3)
pin_num_index = 4 * self.ic_pin_num - index
painter.drawText(pin_num_x, pin_num_y, "{}".format(pin_num_index))
pin_text_x = int(pin_num_x - 5)
pin_text_y = int(pin_num_y + 30)
painter.drawText(pin_text_x, pin_text_y, "{}".format(self.ic_pin_name_array[pin_num_index - 1]))
#Mark
font_size = 7 + self.ic_pin_num
font = QFont("黑体", font_size)
ic_mark_x = int(self.win_width / 2 - font_size * 2)
ic_mark_y = int(box_y + box_h / 2)
painter.setPen(QColor(0x00FFFF))
painter.setFont(font)
painter.drawText(ic_mark_x, ic_mark_y, self.ic_mark_name)
if __name__ == '__main__':
app = QApplication(sys.argv)
pin_name_array = ["IN", "BIAS", "EN", "SS", "GND", "PG", "FB", "OUT", "P9", "P10",
"P11", "P12", "P13", "P14", "P15", "P16", "P17", "P18", "P19", "P20",
"P21", "P22", "P23", "P24", "P25", "P26", "P27", "P28", "P29", "P30",
"P31", "P32", "P33", "P34", "P35", "P36", "P37", "P38", "P39", "P40",
"P41", "P42", "P43", "P44", "P45", "P46", "P47", "P48", "P49", "P50",
"P51", "P52", "P53", "P54", "P55", "P56", "P57", "P58", "P59", "P60"]
# win = Symbol_QFN(5, "AW37023", pin_name_array)
win = Symbol_DFN(4, "AW37023", pin_name_array)
win.resize(1024, 800)
win.show()
sys.exit(app.exec_())