找回密码
 注册
关于网站域名变更的通知
查看: 943|回复: 2
打印 上一主题 下一主题

快速抓取上下拉电阻小程序 -- Main Sub

  [复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-10-29 18:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
from PySide.QtCore import *) I, O  I; _  h+ t* f$ \: k. g
from PySide.QtGui import *
) H5 W4 R3 y1 ^) `; q' w7 k#from PyQt5.QtWidgets import *
* f- [; @$ G8 A9 O( k. w
import sys,re
$ v: D% T3 J7 @2 y* Pfrom BGA_GUI_002 import Ui_MainWindow
$ M3 Q% ]. N3 P3 M, q3 C6 [import win32gui,win32com.client,win32con,win32api: B0 s: D- S" `% v
. k8 n! C, w9 G- s. F- Q
#创建BGA_MainApp类,定义BGA_MainApp类继承了QMainWindow类和Ui_MainWindow类----->多重继承
) M9 k/ u( s) x
class BGA_MainApp(QMainWindow,Ui_MainWindow):( ~6 k  b  }- s( e2 s$ U  s8 _3 i
    #建立初始化构造函数,初始化BGA_MainApp对象,不指定父类3 q1 L9 ^- V7 k2 u; R! c( u" W* A
    def __init__(self,parent=None):
# b6 b. ~3 u7 Q" M$ F% h1 F1 R! z        #继承QMainWindow类中的方法2 w+ G* t1 T. i
        super(BGA_MainApp,self).__init__(parent)
: q1 m, y6 A, e$ y        #QMainWindow.__init__(self,parent)
6 W% {6 _6 F) b$ f) Q( E0 ^9 I/ A0 ^
        #继承Ui_MainWindow的setupUi方法
3 [9 h0 s8 V/ i6 w$ ~
        self.setupUi(self)
! o* M# B( x1 q% i/ b' m' V        self.thread1 = Worker1()% R4 H% @5 g. u# {7 m" F5 B
        self.btn_action()5 h5 z' R% Q7 Y& q4 j: t& L1 y# H

* l6 o+ f* N! v4 u, k' n  ?3 P! N/ \& `4 ]! y+ i

- R2 K# r( x8 B: @1 D) s! m    def slotAdd1(self,get_rc_value):
! t8 e" t! P/ Q2 {; ~7 @        #print (get_rc_value)
2 s. b. p5 N5 H- D. _5 v
        f1 = open('C:\\pads_scripts\\QT_GUI\\BGA_GUI_002\\save.txt', 'a+')
6 {6 L+ Z7 S- {$ o% k        f1.writelines(get_rc_value + '\n')
. }, ]) V( t; V8 o  P+ O        f1.close()
- k1 e: ?( N+ z        self.listWidget.addItem(get_rc_value)' C- I( S4 r5 n1 h  l

3 c# W$ `! U. |2 e$ a3 Q( ~8 y" [& T, G* w; Z! H

- A3 q- X2 \: T2 B    def slotStart1(self):
8 B  o- _; @; r" h3 u        self.thread1.start()
8 o, Y5 F6 k' n1 u: S' b# ]5 f" X3 n2 T0 i  R1 V. N2 g9 r  {9 K

5 ^# ]4 Q4 E- B# j) b& k& D    # 创建界面中的按钮方法
0 j2 _, t; p9 d( ]: @+ Z7 @6 p
    def btn_action(self):
! ]) H* k* f9 E        # 执行rc_select_btn按钮的方法. x4 ~! V- I) `) a% B0 |. k! m
        self.rc_select_btn.clicked.connect(self.slotStart1)2 Z+ B5 A2 f) p4 Q1 S5 ]9 S7 n
        self.thread1.sinOut1.connect(self.slotAdd1)
5 A8 a0 i8 w  L, x! P& ^        self.lineEdit.returnPressed.connect(self.match_rc)7 [9 d: x3 H2 d$ Q

4 n1 b. M- ~; x1 L: P- h' P1 D- ]8 \0 j8 M7 X+ L! r! y- I  n
    #定义PADS中所选器件的属性方法
6 }* k: K9 V7 _* l1 V0 X2 i/ X
    def get_cmp_list(self):
# }1 d, a: B% f- a, |5 U        cmp_list=[]2 g, W1 Q* I$ u+ z! J
        self.powerPCBApp = win32com.client.Dispatch('PowerPCB.Application')2 n8 U1 p( O$ S2 t
        comp_list = self.powerPCBApp.ActiveDocument.GetObjects(1, '', True)- K% G: e7 p2 Z# A
        for comp_list_item in comp_list:0 a, ]- M& x- ^& ]9 @$ l8 F5 D
                pin_name_list = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins( m/ {. N$ W% L  X- u  i
                for item_pin in pin_name_list:3 A" W+ P' g% {
                    pin_name = item_pin.Name
& ]- R5 C9 {, ?- o                    pin_net_item = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).Net9 H# V0 M6 F+ a- Y) c" e
                    pin_lx = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).PositionX" ?* t* }: C/ p
                    pin_ly = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).PositionY/ x" `$ J4 A+ M) ~
                    get_cmp_attr = str(pin_name) + ' ' + str(pin_net_item) + "<" + str(pin_lx) + ',' + str(pin_ly) + '>'
% K* T5 _! i3 N$ h' n/ H& f( s  X" ]8 I
                    get_cmp_attr = BGA_MainApp.get_rc(self,get_cmp_attr)& \7 a( p. y5 O$ w7 Y6 \$ ^
                    self.sinOut1.emit(get_cmp_attr)
( j6 B. T% p/ \        return cmp_list1 w: q9 a7 O. N7 l9 K
' N7 C6 [/ U9 v  K
    def get_rc(self,cmp_list_item):0 G' y8 Z4 q" }* u' N: p
        get_val = cmp_list_item* d5 ~+ L* y& j
        #C310.1 SM_VREF_DQ2_A <19.567046,1.535388>7 g5 Q+ S" w3 z. W, A! g9 v& }
        #R304.2 0.675V <29.767,32.5355>) u! ~* h  U: P7 p8 L$ F: B- H
        get_val = get_val.split(' '). y' O5 H5 y" [4 h) \; R
        #C310.1
: U6 x+ q% E% J6 R5 k
        get_val_name = get_val[0]
- G$ p( ]9 i: N% _        get_val_net = get_val[1]
. M6 A7 V. a% E" y/ |* L        #SM_VREF_DQ2_A<19.567046,1.535388>
/ u+ z+ B+ f) K) q; M
        get_val_net = get_val_net.split('<'). H% ~1 I: g; }/ A
        #SM_VREF_DQ2_A
  ]! s) u; \" w6 F8 q3 m$ |/ c! V
        get_val_net = get_val_net[0]
& c- R0 L; ]) ^" Z4 Y" E        get_val = str(get_val_name) + ' ' +str(get_val_net)
: t/ h2 E% p2 q& X        return get_val. n9 X! }% w, v$ j. O! ]7 Z0 M
8 D) x; W" h" q4 [
    def get_cmp_list_match(self):+ b. Y% E, B2 J+ K
        rc_list = []
# O3 `+ X4 f% O0 n( E        self.powerPCBApp = self.win32com.client.Dispatch('PowerPCB.Application')
: h6 n( z/ t6 Y        comp_list = self.powerPCBApp.ActiveDocument.GetObjects(1, '', True)
" u. ?8 ^0 e1 R, R7 ~& A- z: H. |8 B- c8 s
        for comp_list_item in comp_list:
# r5 _8 U9 R0 P. n+ G5 E$ z            pin_name_list = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins
0 i1 n+ G7 E# E: _/ Z            for item_pin in pin_name_list:% a, K2 O" ^# A" H8 K# u! ]
                pin_name = item_pin.Name+ E/ l- m* t1 S; s' ^
                pin_net_item = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).Net- g9 a6 u3 ^4 v. S6 p
                pin_net_str = str(comp_list_item) + ' ' + str(pin_net_item)
3 \/ D, C$ A8 F                rc_list.append(pin_net_str)
$ x) _3 t5 s) A: L        return rc_list6 q& B5 r; D! F

; d5 {- `+ H6 l    # rc模糊查询功能
3 C8 E, Q' J6 ~! g3 p
    def match_rc(self):
# T: O" [" V7 w1 A1 \6 s        match_list = []( W$ v' u! ^& N# N8 z8 L
        rc_list1 = []4 O) H, F( z5 M% i+ G. f( w
        list_org = []. f: Q4 N* D7 l2 c1 G
        index = 0
' S" t6 R  @. a4 L( b; \7 J0 p
        txt1 = self.lineEdit.text()
5 ]' j7 t5 n2 Z  y7 U) j        with open('C:\\Pads_scripts\\QT_GUI\\BGA_GUI_002\\save.txt', 'r') as f2:
; _% A# x/ V5 n" w            list_org = f2.readlines()3 Z- R0 i2 e- \$ Q
        for i in range(0, len(list_org)):/ f8 T. O0 D& N6 d! ]3 ]
            list_org = list_org.rstrip('\n')
1 Z; k( V$ J! L        if txt1 == '':; w) J5 g, q0 H7 _
            self.listWidget.clear()+ z- M1 |/ f' N; S
            for count in range(0, len(list_org)):6 D# ?1 q" T% t% C3 V
                self.listWidget.addItem(list_org[count])
2 K9 W9 Z! c7 i+ R        else:! Z, @3 r$ i. s. R* @$ d
            for row in range(0, len(list_org)):* l: v4 {7 Q4 i3 R
                txt_row = self.listWidget.item(row).text()
; y6 z5 V9 h1 ~% ~                if txt1 in txt_row:
2 H5 n2 H  R0 y0 z. S& a: j                    match_list.append(txt_row)( Z- A& a0 ^! _8 `, I8 D  F
            self.listWidget.clear(), L- O% G) S% ~' Q: b1 ^
            for index in range(0, len(match_list)):
5 K  R4 k. }  R7 S                self.listWidget.addItem(match_list[index])4 L: V, Q/ m5 m. f" z. F
  T& T0 i/ M8 [* g
#线程1
7 z. Q* c! z$ P" {+ h$ X6 w& [
class Worker1(QThread):
( W) U3 ?1 Y! n3 S, a' D( e    sinOut1 = Signal(str)
: x+ J# p2 ]7 M- N% s" W    def __init__(self, parent=None):
" Y* v& k: W) x, K" E+ x+ s6 E        super(Worker1, self).__init__(parent)
6 W4 c! [5 b  w% S$ }2 V" ^     #把需要循环计算的内容放在run()中. C1 V: c. P6 C8 A, [6 @6 ^. P9 a
    def run(self):
7 I; ^  O: s# k" c8 o% w* Y         #在多线程中调用COM,需要加以下两行代码,初始化COM Lib
; k/ b7 z. T4 u- I- o" F3 d
        import pythoncom# v1 D) V. R" w$ L; F
        pythoncom.CoInitialize()
4 D" @- n: r* K' O. p1 v         #---否则报错: pywintypes.com_error: (-2147221008, '尚未调用 CoInitialize。', None, None)! J2 N4 ^) l# w- A4 c8 w: l2 T
        BGA_MainApp.get_cmp_list(self)
( x! q9 u& I. ~0 p* `3 R
7 N& J2 \3 S5 V9 ]1 [  D! A7 ?8 S
& A& {1 L6 z1 Y
9 j0 e& ]7 P5 j( N" Eif __name__=='__main__':  J9 L8 U5 X# T9 T% U& P& ?% a
    # 注意QApplication的构造器接收sys.argv作为参数,从而允许用户通过命令行定制外观等行为。
: U9 x, L. G/ v" _1 Y# V+ @' p! l" C8 g6 z
    Program = QApplication(sys.argv)9 S6 j* v( O' r4 V  S4 K
    #print(QThread.currentThreadId)
2 F2 m4 ]! W. f5 Q* c7 c
    Window = BGA_MainApp(): s3 r, y4 ~( C4 p9 N
    Window.show()
( x0 u0 M; @& Y) B  B    print(QThread.currentThreadId)$ x( v- q, ~0 I) H, x
    Program.exec_()2 _% O) O. p( T7 f- L9 b1 f

* i: w4 |- p" q- W

该用户从未签到

3#
发表于 2019-11-19 18:02 | 只看该作者
厉害了,感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-9-3 11:07 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表