找回密码
 注册
查看: 898|回复: 2
打印 上一主题 下一主题

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
from PySide.QtCore import *8 @/ {6 R- i3 q0 ~$ g
from PySide.QtGui import *
) W- F4 K+ L' z4 P% g$ K. K+ j#from PyQt5.QtWidgets import *
; ^5 Z: ^2 W) c5 o& q% i
import sys,re% H% d* H  A( ]) f( e! h
from BGA_GUI_002 import Ui_MainWindow
! z- ~7 k) a: R' H  ], limport win32gui,win32com.client,win32con,win32api
( B/ Y2 w2 R% a: ~$ x, X
5 y4 N% }% n/ B/ ^( J#创建BGA_MainApp类,定义BGA_MainApp类继承了QMainWindow类和Ui_MainWindow类----->多重继承* O2 b4 t8 R, Q
class BGA_MainApp(QMainWindow,Ui_MainWindow):( R& J5 A2 }" |" _1 p# [& p- q
    #建立初始化构造函数,初始化BGA_MainApp对象,不指定父类
: s4 B  R( p' b8 u' w3 I
    def __init__(self,parent=None):
- x! h7 t, g( w4 z* p; u1 g) b        #继承QMainWindow类中的方法
+ x6 ~& X: A3 A) p
        super(BGA_MainApp,self).__init__(parent)
  G; v0 e1 V- O% k- p5 w. B        #QMainWindow.__init__(self,parent)9 j2 O2 h! n! L0 H3 T+ U* M
        #继承Ui_MainWindow的setupUi方法
5 O4 \% G1 d, q: ?8 n
        self.setupUi(self)
: N6 V" O+ X: r7 B6 `- w3 }1 Q1 k        self.thread1 = Worker1()
! F0 a  q8 u9 f, G) C7 [        self.btn_action()
( Q& Y7 U1 B9 `* m( ^5 Y
; w; ^6 l2 V2 Q0 y1 ?$ X* J
, u- W4 i! V5 G+ ]& n! S$ d# @$ a/ g9 \+ e) L
    def slotAdd1(self,get_rc_value):
3 S. }3 ~. {/ E3 D        #print (get_rc_value)
5 E6 ^, q+ D0 ~9 @+ Q: n
        f1 = open('C:\\pads_scripts\\QT_GUI\\BGA_GUI_002\\save.txt', 'a+')( ^* L+ y) l; y
        f1.writelines(get_rc_value + '\n')
7 ?) T' C# f* @5 `) ?" s        f1.close()
: Y6 H. f' h7 c/ n        self.listWidget.addItem(get_rc_value)
3 W" c2 s& r: E( B$ O$ G$ r- \- j7 Q# s' M9 N* Z. _
. W6 Y! W, ]8 W6 n( a( T- N. C+ C

2 A7 ~- z: N' U7 f0 Y1 s    def slotStart1(self):* h: p+ S  k/ c# ?9 X% d
        self.thread1.start()
1 u; D7 X5 x. V
. E$ n/ M/ U) e4 P7 x7 I
( U+ p8 a9 D& A3 N" Z: R    # 创建界面中的按钮方法/ |, o6 k: B3 t
    def btn_action(self):
, e& D( \; Y3 ?- [6 C' P+ G4 O% \( }# V        # 执行rc_select_btn按钮的方法$ G' F  z3 n- S  p& |
        self.rc_select_btn.clicked.connect(self.slotStart1)8 e4 S+ Q; a" i$ E/ B
        self.thread1.sinOut1.connect(self.slotAdd1)6 H6 M: H; U) X# K9 V9 e
        self.lineEdit.returnPressed.connect(self.match_rc)
( \2 u: H' s# g. w3 l( n' ?
3 C# m* Q) T+ ^1 j7 d5 ~+ T  w" m: q
    #定义PADS中所选器件的属性方法4 |& Z$ K( e# p/ H8 f
    def get_cmp_list(self):; g/ l+ g  R/ [3 i" I7 J* x
        cmp_list=[]+ \- O. c4 F4 I6 {- n8 M
        self.powerPCBApp = win32com.client.Dispatch('PowerPCB.Application')
$ m0 ^2 F1 H1 ?( y        comp_list = self.powerPCBApp.ActiveDocument.GetObjects(1, '', True)
1 \+ E% F  [+ M1 l        for comp_list_item in comp_list:4 \$ p. Y9 h/ |1 [9 F) q
                pin_name_list = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins
, P* m; l9 h. B. w1 M                for item_pin in pin_name_list:
! |+ M# y$ c9 }2 |+ }! L' o                    pin_name = item_pin.Name' I" {6 {1 M* R, n2 _& Z( z
                    pin_net_item = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).Net% t& i6 ~! N! v6 V/ \
                    pin_lx = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).PositionX3 v( p$ u8 H+ h
                    pin_ly = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).PositionY) o8 f+ D0 G  J" M& C
                    get_cmp_attr = str(pin_name) + ' ' + str(pin_net_item) + "<" + str(pin_lx) + ',' + str(pin_ly) + '>'6 q7 F; d& m( f+ C4 Y6 u4 c3 o* J
                    get_cmp_attr = BGA_MainApp.get_rc(self,get_cmp_attr)( k- T0 D9 v; n  i
                    self.sinOut1.emit(get_cmp_attr)* O0 a: l+ N/ M5 N+ R0 }4 Q9 z8 X: P, \
        return cmp_list
& v3 [4 P- ]/ W2 k' Q& ^# T, i3 m% l! Q2 r) B+ }! |" t
    def get_rc(self,cmp_list_item):
9 ]6 K1 P; ^8 m- R        get_val = cmp_list_item
  k- `, z. d+ o4 L1 |& S6 {- a/ `7 I        #C310.1 SM_VREF_DQ2_A <19.567046,1.535388>
8 U7 e' C' S! S$ D7 S$ C" `0 Y4 \# j
        #R304.2 0.675V <29.767,32.5355>3 j7 \* D: ~2 u& y; j
        get_val = get_val.split(' ')
! A1 H7 D6 s$ [3 }4 F6 ]5 j4 ~3 N2 O        #C310.1) r0 Y% P+ ~1 h/ l  I. J/ M
        get_val_name = get_val[0]
; f& C. g( t5 H( V% r/ R3 [        get_val_net = get_val[1]4 l; k1 n6 r7 l% G" v
        #SM_VREF_DQ2_A<19.567046,1.535388>/ f. |1 `7 p% K+ l$ e1 H, E+ K' Z
        get_val_net = get_val_net.split('<'), p6 C$ Q* X1 g. j  \, V* E
        #SM_VREF_DQ2_A
) I$ ^& ^, ]* d# Q: e5 L
        get_val_net = get_val_net[0]/ v2 t: }( q: b8 n7 O/ w1 f+ N
        get_val = str(get_val_name) + ' ' +str(get_val_net)2 E7 z8 w7 Y+ J9 m1 X: R# [
        return get_val
# I, @  Z, f! J: b) @7 U; Q& C( ]4 u7 i
    def get_cmp_list_match(self):
' c3 W0 L6 G; P: \! ~. H; X7 ?) q        rc_list = []
% H' m1 ^2 I; Q' F        self.powerPCBApp = self.win32com.client.Dispatch('PowerPCB.Application')* f* P$ ~2 k8 K" v& x
        comp_list = self.powerPCBApp.ActiveDocument.GetObjects(1, '', True)' K3 p4 b# y4 _7 H' l

5 q" Z. u$ E5 b4 S& m        for comp_list_item in comp_list:
2 p. ^" \! b" P: M            pin_name_list = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins( B$ L  A5 C+ x! k- [) \
            for item_pin in pin_name_list:1 N& i2 k1 j: }* g  B$ {
                pin_name = item_pin.Name
& q8 S+ p" D9 x. {% h                pin_net_item = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).Net- }3 A9 e" q% o* }
                pin_net_str = str(comp_list_item) + ' ' + str(pin_net_item)- a2 |" y4 n+ g: o* w- A1 X# n4 i
                rc_list.append(pin_net_str)
+ z/ E  a. S. {% Z% ?* I        return rc_list% x) E, W. h& A4 D0 X; j1 j

' l2 y3 ^7 j, c2 e    # rc模糊查询功能
& }1 w1 o1 b3 T0 P  ^# x  u4 g% Y
    def match_rc(self):( o$ j* e( P6 L4 D
        match_list = []5 ~$ j$ t  v' M# c
        rc_list1 = []" Z. \& o* V+ L" q( i2 p
        list_org = []
/ R6 z+ f  Q% l: C. ?: m1 c        index = 0: v. v5 M- X. e; c& U% W! r
        txt1 = self.lineEdit.text()
6 Z+ q/ m( V$ Q; x' P) I0 m3 N7 W        with open('C:\\Pads_scripts\\QT_GUI\\BGA_GUI_002\\save.txt', 'r') as f2:+ [' t2 A! Y, K7 z  A2 T# P
            list_org = f2.readlines()( \4 d% F3 f4 a* O9 t. F! L9 B7 N6 D
        for i in range(0, len(list_org)):
. N, W. j1 q  }            list_org = list_org.rstrip('\n'), X/ S9 H$ U. k8 L; P
        if txt1 == '':
" [# Q2 ~) g" r, T6 T( P& i6 k% S$ \            self.listWidget.clear()2 b  e9 M* s( r/ G7 ]% x
            for count in range(0, len(list_org)):+ G4 i" g. R) p
                self.listWidget.addItem(list_org[count])
3 v" f6 k/ F( n: ?, g- q# @8 k* E        else:
7 ]( f% {( ~6 p! K+ x            for row in range(0, len(list_org)):
; w8 b. e; |6 d$ \                txt_row = self.listWidget.item(row).text()
( ^' E/ x; O& E% J+ r                if txt1 in txt_row:& a  K4 Y- [/ Z: T
                    match_list.append(txt_row)
9 O4 M" b' g. {. N7 k            self.listWidget.clear()( D8 c+ m% X: f4 Y5 [# u3 c
            for index in range(0, len(match_list)):. ]7 w& z6 h5 x4 u9 e; H) L
                self.listWidget.addItem(match_list[index]). X' k" `7 E8 _: I8 F$ m

8 f( G9 m+ _  |  I#线程1
7 ?! w" S' h& ^* m4 \/ e" t
class Worker1(QThread):
' T2 [$ }1 s2 [' x' S5 M    sinOut1 = Signal(str)( N4 X& ~5 R: u( ?% |( b$ v2 z% p/ ?
    def __init__(self, parent=None):- G! t; x1 `9 i
        super(Worker1, self).__init__(parent)
$ [/ `4 ]  S' \. w     #把需要循环计算的内容放在run()中, l  Z: ~, ?. L; A) J9 ]
    def run(self):
; Q4 k$ `+ H3 |+ [' i% _; F         #在多线程中调用COM,需要加以下两行代码,初始化COM Lib- U7 u' p' Q0 N# ^; e  {5 U
        import pythoncom4 ]! O" x+ ~  C; j% r
        pythoncom.CoInitialize()
. r% W. i0 I  g( `         #---否则报错: pywintypes.com_error: (-2147221008, '尚未调用 CoInitialize。', None, None)3 m2 `8 ~+ m# g
        BGA_MainApp.get_cmp_list(self)
& x6 H, I2 [1 b7 P" ?: r" w1 x" Z  p" b1 p
: S, i( _8 v  \3 m

: t6 t) a7 l0 k# J6 s# \if __name__=='__main__':! G' m& Z1 }2 T2 n
    # 注意QApplication的构造器接收sys.argv作为参数,从而允许用户通过命令行定制外观等行为。, O" @2 |* B. a" B+ u! x1 \; _
    Program = QApplication(sys.argv)0 ~2 h- {& w" d
    #print(QThread.currentThreadId)& R( \+ ^& z2 N  R
    Window = BGA_MainApp()
2 [1 T' _2 E" w- _& z) Q$ ^* G6 h5 D    Window.show()' f  D' y& F, T' Q2 L* [
    print(QThread.currentThreadId)
+ ^# ]5 `$ h( G    Program.exec_()
& f) \" v: U  y/ I4 X% x3 J
; S" k2 M* b/ ^! N" y  p

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-1 19:34 , Processed in 0.078125 second(s), 24 queries , Gzip On.

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

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

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