python之画IC symbol

文章详细介绍了如何在PyQt5中创建DFN和QFN集成电路符号,通过paintEvent方法利用QPainter绘制了IC框、引脚、数字编号和标记,以及相应的文字标签。
摘要由CSDN通过智能技术生成

本文使用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_())
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,根据提供的引用内容,并没有提到关于Python QLibrary的问题或信息,无法提供相关的答案。如果您有关于Python QLibrary的问题,请提供更多的上下文信息,以便我能够帮助您解决问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Cannot resolve symbol 'log'](https://blog.csdn.net/weixin_34268579/article/details/92050849)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [idea传入HttpServletRequest时显示cannot resolve symbol的问题](https://blog.csdn.net/weixin_33733810/article/details/92381244)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [KafkaUtils.createDirectStream报错Cannot resolve symbol createDirectStream](https://blog.csdn.net/weixin_30500105/article/details/98202874)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值