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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
from PySide.QtCore import *% [1 [' l. j) C
from PySide.QtGui import *
; K+ R8 G1 C9 o* G#from PyQt5.QtWidgets import *
7 L& K2 ~9 O( B9 |; T
import sys,re4 I1 z: B8 q) f0 W( w! T
from BGA_GUI_002 import Ui_MainWindow2 g1 l3 d9 E0 X' T% `
import win32gui,win32com.client,win32con,win32api+ f8 H. V! u: z3 z" w; a+ Y

3 M. J7 i3 W* @4 C- a#创建BGA_MainApp类,定义BGA_MainApp类继承了QMainWindow类和Ui_MainWindow类----->多重继承
  `: D( C& B, ^$ ^  R) _
class BGA_MainApp(QMainWindow,Ui_MainWindow):
( g+ `. t  P( B3 j1 e    #建立初始化构造函数,初始化BGA_MainApp对象,不指定父类
+ ~! M$ A3 G6 m& Z) \
    def __init__(self,parent=None):
) M  y; Y: s& R. f        #继承QMainWindow类中的方法/ D1 g, P' Y8 H' m1 q+ o
        super(BGA_MainApp,self).__init__(parent)5 E" W! @8 g1 R7 X! l' J
        #QMainWindow.__init__(self,parent)9 z& f. f/ `2 X
        #继承Ui_MainWindow的setupUi方法
$ \+ r+ z. H" N9 [' z; C
        self.setupUi(self)  h$ @/ O0 S1 y4 t1 B: L
        self.thread1 = Worker1()
' C& C; L$ [+ w& v  w6 L1 N* q1 O* k        self.btn_action()& M* S* d8 ^/ `

# ?. T* f  s) K7 k+ n) y$ a9 s- p3 B2 |' J9 d% v
6 v/ z4 L4 z, u7 H# I
    def slotAdd1(self,get_rc_value):% Y4 }7 S, N* @0 f2 U8 j
        #print (get_rc_value)
6 u; I( Q, |- O3 H6 Q* n
        f1 = open('C:\\pads_scripts\\QT_GUI\\BGA_GUI_002\\save.txt', 'a+')! C1 L) Y" [4 u7 Q5 G4 w0 N
        f1.writelines(get_rc_value + '\n')1 [) M  Q" t7 \$ r1 v
        f1.close()
: r' w% ?: p0 j: V7 U* L- K        self.listWidget.addItem(get_rc_value)1 [7 Q# D5 c. X! b6 U+ N* @4 ~

4 C9 E: v% Z- n) g9 N& R" `6 T9 K; x$ l* J

% g; ?) `( F) F& |4 h    def slotStart1(self):+ y- E) [: s3 Q. E4 f
        self.thread1.start()3 f5 |/ O% E$ b) f

5 s2 @4 K$ A! Z0 G6 l- |5 Y  E- F0 i# ?" L$ F
    # 创建界面中的按钮方法
( B7 u1 i. I: P, ?5 H- b$ l8 c
    def btn_action(self):, w' ~' i1 K6 v! j7 G0 }
        # 执行rc_select_btn按钮的方法
$ h9 j0 }8 D3 h2 S
        self.rc_select_btn.clicked.connect(self.slotStart1)5 T+ ?2 [, [5 `, I7 ]1 P
        self.thread1.sinOut1.connect(self.slotAdd1)
, \+ e% U7 h0 {# E/ H" z8 N        self.lineEdit.returnPressed.connect(self.match_rc)4 z$ J2 X) l" g6 s9 S7 D; M
) B4 `( j; ]0 I8 |
7 U* G. V5 o1 R
    #定义PADS中所选器件的属性方法5 X. K( k/ L8 S. V5 {* W- S6 U
    def get_cmp_list(self):  E4 Q3 b" }, d' D6 `! _
        cmp_list=[]
+ j0 k0 y% }9 m) F; T0 i& C! }6 n        self.powerPCBApp = win32com.client.Dispatch('PowerPCB.Application')1 C6 J$ T) m# n8 U/ }1 r
        comp_list = self.powerPCBApp.ActiveDocument.GetObjects(1, '', True); ]7 Z+ F3 [' j' [+ `: r
        for comp_list_item in comp_list:" x* V; E! H! t
                pin_name_list = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins3 C3 Q9 E/ \- w
                for item_pin in pin_name_list:
& I2 V* V9 i+ C1 m, m4 V2 b! w                    pin_name = item_pin.Name
: w0 Z) ]+ l. V' X. y5 Z                    pin_net_item = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).Net6 L; q; i6 u& ~  _* u
                    pin_lx = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).PositionX
  m- ^% {" v# Q" l0 [* u                    pin_ly = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).PositionY
4 H" t- M6 s) d3 G                    get_cmp_attr = str(pin_name) + ' ' + str(pin_net_item) + "<" + str(pin_lx) + ',' + str(pin_ly) + '>'4 h0 o+ c: b# I) `# I, D
                    get_cmp_attr = BGA_MainApp.get_rc(self,get_cmp_attr)
7 T" ?# I% W6 @7 i8 P! E" ^                    self.sinOut1.emit(get_cmp_attr)
9 {* Q$ G2 T9 h! t) y        return cmp_list
; N0 j; M/ ~4 ], |# \: n
$ k9 H7 I5 k. B6 G    def get_rc(self,cmp_list_item):
7 w: n- o/ `# x' k: S$ @        get_val = cmp_list_item: G; o- B$ ~" s+ p; P$ w1 N; p
        #C310.1 SM_VREF_DQ2_A <19.567046,1.535388>' Z' ?( V, L" D# R2 C5 b- n
        #R304.2 0.675V <29.767,32.5355>
' \4 j; I1 i( a- t" G- n6 o4 b; G
        get_val = get_val.split(' ')5 @( J1 G& T; t0 ^4 o3 C0 t
        #C310.1# l& A1 ?- d; d
        get_val_name = get_val[0]( k( k4 C& H# H( }7 C) ~- ^
        get_val_net = get_val[1]
- l+ x5 B  t) E. w        #SM_VREF_DQ2_A<19.567046,1.535388>- @! O1 _& d9 H3 _' ?) K
        get_val_net = get_val_net.split('<')
* H8 \0 v) ^7 U        #SM_VREF_DQ2_A
$ T$ @9 }, V5 `' t5 q# F2 Y: f
        get_val_net = get_val_net[0]* `! s) e% s2 W4 w- c
        get_val = str(get_val_name) + ' ' +str(get_val_net)7 e/ d% {/ [6 e: ]; C1 m/ U6 w
        return get_val/ b" c8 N1 w9 J3 b7 u- V; x
/ i$ @/ e3 Y6 y% V' J
    def get_cmp_list_match(self):
1 n1 `8 v  B: ]* b1 R        rc_list = []! N  Q+ z" H3 @/ r. T4 J
        self.powerPCBApp = self.win32com.client.Dispatch('PowerPCB.Application')
+ W9 L2 m" x, U% ?: K) i: m        comp_list = self.powerPCBApp.ActiveDocument.GetObjects(1, '', True)
/ W6 V  e/ _+ Q+ _+ Q" S) {* U+ h3 D! H) c3 t
        for comp_list_item in comp_list:8 X; O, }# e- l% v
            pin_name_list = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins
- L1 N4 [2 o/ m            for item_pin in pin_name_list:
, T4 r, b; V. p% O                pin_name = item_pin.Name7 @2 v& g2 g) @+ [1 f1 [: I1 _
                pin_net_item = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).Net% p' U# W7 |: P2 C7 U
                pin_net_str = str(comp_list_item) + ' ' + str(pin_net_item)
  U7 g) `( {( C                rc_list.append(pin_net_str); U! D* e) S! A- Q
        return rc_list  u3 Q# Y* r: x

: \0 D* O" C7 q& Q4 G( `  }    # rc模糊查询功能
* Q& N  H, E/ R5 H: |2 G3 F9 g# h
    def match_rc(self):
+ N! z' B/ \( t$ `4 j( G; x        match_list = []
9 |! h" f% M% B* C+ P        rc_list1 = [], }$ X1 A; R* Z, S" }
        list_org = []. Q! [4 d3 ]1 M4 d6 L9 m/ C
        index = 0
& x4 @# C9 j+ Q* Y, y* e
        txt1 = self.lineEdit.text(); U; V! G. ^& L$ u. e6 V
        with open('C:\\Pads_scripts\\QT_GUI\\BGA_GUI_002\\save.txt', 'r') as f2:
5 @" l  z% f+ `: v  B            list_org = f2.readlines()
: R* k4 H3 q5 T& {2 I        for i in range(0, len(list_org)):7 J$ W% z, g4 {: m6 B9 h2 q. Y
            list_org = list_org.rstrip('\n')) Z) t* F6 i8 }, H9 v
        if txt1 == '':
+ ^: u' |, _) ?6 v, V: g) a5 v# K5 X            self.listWidget.clear()0 h% @0 P! [+ i) Q8 ]& x; A. Z
            for count in range(0, len(list_org)):) s: @8 W  g( g4 V2 k& W
                self.listWidget.addItem(list_org[count])/ B5 r8 f1 b+ ^4 ?1 A1 l  W" }" {
        else:3 I5 I4 o6 u( n1 Q( b) M; x  A
            for row in range(0, len(list_org)):
" x9 r1 g# v+ E" Y2 {5 q& e% b                txt_row = self.listWidget.item(row).text()
4 F: |2 _) W6 m                if txt1 in txt_row:
- I7 ~: ]2 S; r4 x                    match_list.append(txt_row)& i6 S# U# j; w3 y
            self.listWidget.clear()
" j4 z/ P; E( V2 V) @, m            for index in range(0, len(match_list)):3 i7 A7 X0 S1 m) l, T0 h+ b
                self.listWidget.addItem(match_list[index])  l" C0 T5 p8 Z
3 [2 ~2 e) I0 z, M* H0 d
#线程1
9 a: b% l: H4 V4 t- T1 R" P
class Worker1(QThread):
+ K7 _' k/ L% p% d- b/ k. |6 o    sinOut1 = Signal(str)
* P8 t* Q7 O# A    def __init__(self, parent=None):: Q! W# r! p) ^$ O% w: w' O
        super(Worker1, self).__init__(parent)
' Q& M* r7 Q& B     #把需要循环计算的内容放在run()中
& K7 E: `+ I' j9 ~
    def run(self):
" o: h. n5 d5 Z1 ^) z6 o# A         #在多线程中调用COM,需要加以下两行代码,初始化COM Lib
, E5 Y9 j* G/ S4 s' ~( |0 p
        import pythoncom
0 I7 y$ y2 m* S/ l' M1 C        pythoncom.CoInitialize()' z, \. `( x6 R8 G4 ?4 R
         #---否则报错: pywintypes.com_error: (-2147221008, '尚未调用 CoInitialize。', None, None)% p6 a+ P* u) u6 s6 w+ C
        BGA_MainApp.get_cmp_list(self)
* e6 ]+ R0 @$ i0 D. h+ m+ J" e; M

1 m( S1 P! L! H0 m1 |9 n0 k& A2 Z: w+ r0 D
if __name__=='__main__':
+ p) q* |( H! U8 a    # 注意QApplication的构造器接收sys.argv作为参数,从而允许用户通过命令行定制外观等行为。
. g. Z: d/ T# x5 X% Z/ t: O
    Program = QApplication(sys.argv). m- u# k4 p7 U3 L
    #print(QThread.currentThreadId)2 I* }& @  R* n! k; B
    Window = BGA_MainApp()
  P* q1 C( x- H. o7 K- |8 Q    Window.show()
2 p( j/ ~* y0 e    print(QThread.currentThreadId)
* F" P; l  q: C! E5 w    Program.exec_()
# t+ k0 d6 m+ j- j2 Q+ u8 |, r+ e* L

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-3 22:35 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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