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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
from PySide.QtCore import *3 S: W1 |# e; R6 M
from PySide.QtGui import *
% {) c* w, w) c# _" ~( Q) _#from PyQt5.QtWidgets import *4 @& u  o, B# E3 L
import sys,re$ [  ?% }2 u0 m' z
from BGA_GUI_002 import Ui_MainWindow2 ^* @6 l! B" Q- S8 M
import win32gui,win32com.client,win32con,win32api  m0 G) \; }  v+ m2 I# z0 s" ?" L

# q9 Y( v+ g1 ]1 f% |#创建BGA_MainApp类,定义BGA_MainApp类继承了QMainWindow类和Ui_MainWindow类----->多重继承8 j. P2 z4 l8 n! y: b  d" Z
class BGA_MainApp(QMainWindow,Ui_MainWindow):
; V1 g6 c) ^% ^0 C    #建立初始化构造函数,初始化BGA_MainApp对象,不指定父类
' z+ C3 ^- B9 z& H+ S- O5 D+ a
    def __init__(self,parent=None):
3 u  L/ D8 c1 a& R2 Y5 o/ A% m1 u        #继承QMainWindow类中的方法' Q5 F; t9 Y' i2 p: P
        super(BGA_MainApp,self).__init__(parent)
4 B4 d; Z) b* J+ p1 o( c3 O        #QMainWindow.__init__(self,parent)) w. y) Z. c# l1 _5 k/ b
        #继承Ui_MainWindow的setupUi方法
, C; p5 R0 P( x% w
        self.setupUi(self)# y' }' U5 G# t7 j
        self.thread1 = Worker1()
0 `9 v, z2 A+ y0 P% J8 c0 t" z        self.btn_action()" J' K) v( K! U+ B. H

. e( @( w4 f# l% t- Y( ^/ c, p
7 |$ g+ a# E0 Q/ S+ M% \) C) f9 s, V: v. C5 n9 J
    def slotAdd1(self,get_rc_value):; w5 S, U8 e9 \7 b' Y8 p' `8 x' s
        #print (get_rc_value)- ^, S0 x) `+ @
        f1 = open('C:\\pads_scripts\\QT_GUI\\BGA_GUI_002\\save.txt', 'a+')
: B" a7 R+ Y. n0 l        f1.writelines(get_rc_value + '\n')
( B/ I  O+ c" x/ V        f1.close()
" Y2 R" j/ k2 K, C6 U# {        self.listWidget.addItem(get_rc_value)$ i# G4 }0 ?" ?) A$ T) X/ a

& Z3 W" R: ]4 X1 w2 j  G1 ?. p( A0 `. j5 ~

& {0 G4 p$ d, b  J- T1 m* [$ w    def slotStart1(self):+ ^$ I3 F6 _* w) L+ a1 l8 }* F
        self.thread1.start()) d) o2 i# d4 c

9 p5 _0 ~5 ?) I
2 j2 G$ E1 w; L4 M; o. E$ [# ^    # 创建界面中的按钮方法
# x% _2 k& A& C# e' ~+ _
    def btn_action(self):
# y! I5 J6 ^% g* @: @        # 执行rc_select_btn按钮的方法
& U- J6 h4 s; c5 N" K3 H* q
        self.rc_select_btn.clicked.connect(self.slotStart1)
- t1 L- w3 I4 n: l) _5 J        self.thread1.sinOut1.connect(self.slotAdd1)
$ ?- @) R0 x: i; k: n! z8 b        self.lineEdit.returnPressed.connect(self.match_rc)) K! {4 n0 t9 f  ]
% `6 P0 l; m; U) D

" V' e  a; d# T, v7 [3 W    #定义PADS中所选器件的属性方法4 ^5 J+ M9 A6 j% X0 C8 I
    def get_cmp_list(self):
" Z8 l" u2 {$ T        cmp_list=[]
7 W1 h3 _( b1 k- v        self.powerPCBApp = win32com.client.Dispatch('PowerPCB.Application')
% ]+ Z' n4 ]/ Q  [2 q" u% @        comp_list = self.powerPCBApp.ActiveDocument.GetObjects(1, '', True)
% H6 q6 W! l8 n6 E) K        for comp_list_item in comp_list:4 W" J; B* c4 x" O) ^
                pin_name_list = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins4 I8 C2 A! h2 y' _7 h2 @, z
                for item_pin in pin_name_list:
& M: Q: ?! k; `! N3 C6 T                    pin_name = item_pin.Name. e; A9 q+ O4 P* ^' b# a. g- y
                    pin_net_item = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).Net
1 \: \6 d& z# e" j                    pin_lx = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).PositionX
/ b5 R7 Y/ U0 y9 j                    pin_ly = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).PositionY6 D) o* Z) W& }$ W0 Q
                    get_cmp_attr = str(pin_name) + ' ' + str(pin_net_item) + "<" + str(pin_lx) + ',' + str(pin_ly) + '>'' \( u0 r! R! B9 e
                    get_cmp_attr = BGA_MainApp.get_rc(self,get_cmp_attr)9 x( y  O7 E( P+ Q; W# ]
                    self.sinOut1.emit(get_cmp_attr)/ k4 t7 z) f, ^0 U. ]
        return cmp_list
) H# L+ }1 W( i3 g: S; ]" I8 n0 a% N& s1 [& K  |
    def get_rc(self,cmp_list_item):
! r' P/ v, W" u/ x+ A2 N        get_val = cmp_list_item
7 n. d& V8 g% _  C9 X! P* [        #C310.1 SM_VREF_DQ2_A <19.567046,1.535388># u5 Q9 J3 }0 t, U* k) M! ]0 R8 x
        #R304.2 0.675V <29.767,32.5355>
: |9 Z, l  u" ?6 J7 k! c: E
        get_val = get_val.split(' ')
. }& r( q' H0 s1 X: M$ Y6 o1 o        #C310.1
4 o; o5 A& D4 L6 L) f- y. N6 O
        get_val_name = get_val[0]/ A! ?2 p. v8 d) G4 `4 V2 s
        get_val_net = get_val[1]. d6 c& M* I- H! N
        #SM_VREF_DQ2_A<19.567046,1.535388>
* X' ^5 V) _, R! J* _
        get_val_net = get_val_net.split('<')
" V6 E' J- F' g: R4 a( K+ `        #SM_VREF_DQ2_A
: e$ S: t/ O- V; J4 A( ~' d5 B/ U: B
        get_val_net = get_val_net[0]: W( @9 W) N) n& |
        get_val = str(get_val_name) + ' ' +str(get_val_net)
/ A$ L4 p( c, J        return get_val& B8 w) J, p! B. p; X3 S

* k- W7 Z8 d# W+ O& p0 H    def get_cmp_list_match(self):
! ]# X" T6 l, m$ |. W" S; z8 w        rc_list = []
, g5 c" r- J; k3 A1 P) b/ ^        self.powerPCBApp = self.win32com.client.Dispatch('PowerPCB.Application')
$ ]! W7 D+ H3 [0 H/ e) ]. ?        comp_list = self.powerPCBApp.ActiveDocument.GetObjects(1, '', True)! Q. p+ `3 G# R% t, \2 D
& t' r# S, g) J
        for comp_list_item in comp_list:
* @. M/ _( I; N) }0 z. ?            pin_name_list = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins
+ r" ~2 G4 h; B: m! i0 Y            for item_pin in pin_name_list:6 l$ J7 N$ u- x5 \+ a% [9 T& P* [
                pin_name = item_pin.Name7 k# _, j! q. K& s. a9 O2 e
                pin_net_item = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).Net) M6 @# f8 x1 t
                pin_net_str = str(comp_list_item) + ' ' + str(pin_net_item)+ b/ A9 r+ I, ]2 e1 D
                rc_list.append(pin_net_str)4 ]' P) k" x# b
        return rc_list
$ d0 u$ i9 o' O7 M$ g
! e& Z! [0 b4 Y) D: o0 E    # rc模糊查询功能
( W. s4 w8 }. ]
    def match_rc(self):% |* J3 \# |8 o) L
        match_list = []& i. d7 Q- g9 Y; R( Y/ e" [0 @) W
        rc_list1 = []
& ^' n" ~- ?; q! w+ O  d& X( u5 u% w        list_org = []/ c& R/ |1 K: i( y% i
        index = 0
- `# i2 W- t. m, y) P1 L
        txt1 = self.lineEdit.text()/ s, h" r* ?1 v1 d! e* a3 o
        with open('C:\\Pads_scripts\\QT_GUI\\BGA_GUI_002\\save.txt', 'r') as f2:* I: D" d# U! i6 P& _! k4 @) \
            list_org = f2.readlines()! ^1 F( D! z: \' F
        for i in range(0, len(list_org)):/ k: t3 ^/ i: V! b/ g2 y' p
            list_org = list_org.rstrip('\n')
' E8 s" u  B: M; n, N, y; j        if txt1 == '':. b4 Z; Z: f2 ~, y; w7 R# h
            self.listWidget.clear(). e. @# K" G( u1 W# ]4 b7 d0 I
            for count in range(0, len(list_org)):
+ {* g% m3 g1 v' V6 o4 ~                self.listWidget.addItem(list_org[count]). a" y  i( q1 x) r3 |& h/ m
        else:7 X$ m: D: N0 e
            for row in range(0, len(list_org)):
0 o7 h& u7 P  V                txt_row = self.listWidget.item(row).text()4 n7 o( p2 p1 k6 q! S
                if txt1 in txt_row:
# N9 [( d7 \& n5 r+ f                    match_list.append(txt_row)1 r  R# E+ y: ~) f, y7 \
            self.listWidget.clear()3 q' ?9 U- E/ E& s( A/ G
            for index in range(0, len(match_list)):- H/ F$ W' n5 c
                self.listWidget.addItem(match_list[index])* M; F# p3 G4 h3 b% u

0 _' h' ^3 n- f, g9 v#线程1
4 x% `6 d5 I2 N' a3 D
class Worker1(QThread):
8 i; R& A" \/ b7 Q    sinOut1 = Signal(str)
' v6 W/ y  k. ]: `    def __init__(self, parent=None):3 J+ a' f5 j) [; B! e7 X% H
        super(Worker1, self).__init__(parent)! p" k8 O: d% e( i) O
     #把需要循环计算的内容放在run()中
' B1 q' v5 h, c' ^( `/ D7 d3 \
    def run(self):. v9 ~8 H: N7 x7 u, }$ v/ k5 T
         #在多线程中调用COM,需要加以下两行代码,初始化COM Lib
; I( m1 k( V9 C3 j8 ^
        import pythoncom
  l) l9 D* v5 u! r2 _, j$ _* n, O        pythoncom.CoInitialize()
1 G3 V0 S- [+ j; d         #---否则报错: pywintypes.com_error: (-2147221008, '尚未调用 CoInitialize。', None, None)9 W$ k. x4 K) i  d1 q% V) k: w
        BGA_MainApp.get_cmp_list(self)" i+ b4 v6 K4 a) J2 E3 E4 F

+ t$ R" R/ m& E& D$ `4 {$ p& z7 G, J$ n' m7 p9 o1 h
; |4 K5 A* Z+ z; C8 D) ~- N8 V
if __name__=='__main__':
# x8 u3 j4 N8 @" J3 U' A    # 注意QApplication的构造器接收sys.argv作为参数,从而允许用户通过命令行定制外观等行为。
( n! k, [' ?" `' l" z7 e
    Program = QApplication(sys.argv)
( T. r5 o) }* v) {; l8 g  o! F1 B    #print(QThread.currentThreadId)
: A/ a" @$ q& w) ]0 B( P' ]
    Window = BGA_MainApp()
- E( y# z$ B) ?2 W  X- P, r4 |    Window.show()
% s# e2 o' c3 w: r) x6 L8 M  a    print(QThread.currentThreadId)
9 V7 m; q+ F2 G: W" _    Program.exec_()/ v8 f2 M: W4 z5 Q; ~% b7 D3 ?
1 p4 O  U7 _5 O" j7 ~

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-24 22:28 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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