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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
from PySide.QtCore import *0 w/ d' V" C0 `1 l- {4 r3 d
from PySide.QtGui import */ @/ I* C6 F' \1 ]3 W6 {
#from PyQt5.QtWidgets import *
0 h! @* p% P# J$ [( U
import sys,re
* e5 ^6 C3 h1 B  \  E% }( y0 Cfrom BGA_GUI_002 import Ui_MainWindow9 E( |# ~! j3 P6 o+ `
import win32gui,win32com.client,win32con,win32api' |' p% r, @$ ^" S% n+ a' w7 b: v

, n- [) u! L/ h  ~#创建BGA_MainApp类,定义BGA_MainApp类继承了QMainWindow类和Ui_MainWindow类----->多重继承5 L: q. j* ]. Y, A% ^8 P: ?  l) Z
class BGA_MainApp(QMainWindow,Ui_MainWindow):  p4 q0 M1 F: C  c3 Q& f: W
    #建立初始化构造函数,初始化BGA_MainApp对象,不指定父类/ K% K2 I7 \/ V9 {4 y6 K$ e
    def __init__(self,parent=None):
- o" ?& c2 y! D6 d, A6 L" Z! @( l2 N        #继承QMainWindow类中的方法0 I4 Q! c4 L. k$ H: w
        super(BGA_MainApp,self).__init__(parent)$ |! k  w. @- L/ \5 p( z' x
        #QMainWindow.__init__(self,parent)& `' m- {2 f8 S- u/ D- ?
        #继承Ui_MainWindow的setupUi方法7 I* y, j" ~7 w0 X0 m
        self.setupUi(self)
# E" U8 m- l* U* |) \9 K6 w8 Z        self.thread1 = Worker1()9 ?& R& A' U' j5 C2 O" `  r# ?
        self.btn_action()
0 B# J7 i1 _. n' {# g* Y2 Y
1 H& \6 L7 l- X8 }; ]! R- |4 L4 [1 a1 m4 h! A% p( G+ p6 k6 M

) R2 w. N& [" H* I    def slotAdd1(self,get_rc_value):" }) Q; ~" J# P, w0 R3 B2 \* F
        #print (get_rc_value)
6 j$ x& r6 L, O5 T2 J
        f1 = open('C:\\pads_scripts\\QT_GUI\\BGA_GUI_002\\save.txt', 'a+')  A7 q& S5 a4 U# j4 b1 [
        f1.writelines(get_rc_value + '\n'). K* H' b8 g/ g" ~
        f1.close(), g# E7 C8 q3 k
        self.listWidget.addItem(get_rc_value)" A+ U& m+ ]( f7 s
" ?6 I' v" K0 t$ D2 O; y8 E

/ P% @" S! N8 q! p% g" w$ z
, w/ r' O! p; M  {! r, S    def slotStart1(self):
& U* [+ s/ b% c8 {9 m        self.thread1.start()
. n- u" _) M4 w- X& ?* k; N
6 u* ]# P: D; T! K+ ~  h: \& t# _5 k: V* n8 d
    # 创建界面中的按钮方法3 ^# j6 h, ]. ~, M8 D6 d
    def btn_action(self):4 p: X% @6 M$ ]# g. `' r7 c- j
        # 执行rc_select_btn按钮的方法
7 P0 M4 i* x  Y! w
        self.rc_select_btn.clicked.connect(self.slotStart1)
  e7 j0 @: B8 \        self.thread1.sinOut1.connect(self.slotAdd1)' f8 U7 r  {: `) f" `$ ^
        self.lineEdit.returnPressed.connect(self.match_rc): ^0 v0 J1 v! T) B6 X- M/ f( Z
8 I& n$ O9 i: f

1 L. Q# m  N0 E: s# T+ u    #定义PADS中所选器件的属性方法
9 f  _4 Z6 ?2 E* ~
    def get_cmp_list(self):% a* J% r8 r# N1 i& ^" I2 z7 B% R& }2 e. e
        cmp_list=[]
6 K; e- P& h* b9 e        self.powerPCBApp = win32com.client.Dispatch('PowerPCB.Application'): w/ X8 @5 @9 G2 M
        comp_list = self.powerPCBApp.ActiveDocument.GetObjects(1, '', True)3 J3 J) W) b) L. L
        for comp_list_item in comp_list:- L" L3 E8 U; _4 r# [
                pin_name_list = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins
4 i  k  N0 Z- ^                for item_pin in pin_name_list:9 h9 g: E: G! g$ u
                    pin_name = item_pin.Name: X& J0 y0 W  Y% P& X2 I7 e
                    pin_net_item = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).Net' p8 i  k6 f7 r
                    pin_lx = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).PositionX& }8 ?7 ]8 i3 \
                    pin_ly = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).PositionY4 E$ k0 w! J. t$ b' O
                    get_cmp_attr = str(pin_name) + ' ' + str(pin_net_item) + "<" + str(pin_lx) + ',' + str(pin_ly) + '>'- d+ Z. C$ j. @+ \- C) c3 E* Z5 N
                    get_cmp_attr = BGA_MainApp.get_rc(self,get_cmp_attr)8 f7 |* m1 L+ u( x# P8 T% C: |
                    self.sinOut1.emit(get_cmp_attr)
+ x# b) y8 A: p. n& M        return cmp_list  n2 g% U1 `8 L9 |+ \, E/ N$ A

% c# {# C7 L# R' p& ~3 H5 w1 |; S* g/ K7 P    def get_rc(self,cmp_list_item):- L4 L3 i# O( ]# j
        get_val = cmp_list_item/ V& V$ l, h, a) V. j  X2 \
        #C310.1 SM_VREF_DQ2_A <19.567046,1.535388>
' \- T9 {3 P# g
        #R304.2 0.675V <29.767,32.5355>7 \2 v6 D) _: z' f6 X7 X
        get_val = get_val.split(' ')4 x! s% K' D: o' J
        #C310.1
  q1 |' [$ j( Q+ i# ^2 ?, u2 z
        get_val_name = get_val[0]7 r9 }4 K2 f# i. w: H3 T
        get_val_net = get_val[1]0 K% F2 _9 r! `& d/ c- N
        #SM_VREF_DQ2_A<19.567046,1.535388>
2 ]) {3 x4 H8 e& q& F$ f1 ?5 S
        get_val_net = get_val_net.split('<')
, \& @; }" K6 w        #SM_VREF_DQ2_A- K6 i- x9 g1 x3 j. n
        get_val_net = get_val_net[0]
' q1 M# [. m0 y        get_val = str(get_val_name) + ' ' +str(get_val_net)
9 Q9 \# g9 r: p6 P  z' f5 v/ @% e        return get_val3 x$ U# ^+ l2 j7 q9 x) p+ q( M! a2 x
" w6 P  y! L; q
    def get_cmp_list_match(self):2 o% L5 Q; Q* c! e$ E( @
        rc_list = []1 w1 z% w$ d5 j8 g7 L
        self.powerPCBApp = self.win32com.client.Dispatch('PowerPCB.Application')
: Y5 Y' P, h) F        comp_list = self.powerPCBApp.ActiveDocument.GetObjects(1, '', True)
& X+ p1 V5 p  D. @; \  e* ~$ O: x; i$ a7 }9 n# I9 g! h
        for comp_list_item in comp_list:
  ]4 ^& P4 t8 c9 B            pin_name_list = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins
; y9 D7 E& c7 G6 t- [9 ?            for item_pin in pin_name_list:; Y+ Y9 v2 `8 c* U
                pin_name = item_pin.Name  g( t1 O3 ~, i* }+ M. t' F# Z
                pin_net_item = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).Net
& M8 t" K* K, z                pin_net_str = str(comp_list_item) + ' ' + str(pin_net_item)
2 W$ [( F7 R( V2 V                rc_list.append(pin_net_str)
+ X6 V) _) A$ Q        return rc_list2 I& @2 Z: e0 a" y& [  w7 O/ F

- Z  |3 a! t3 Q8 ]! V# C! ^9 D    # rc模糊查询功能  ~" {9 @, y7 r& \* q
    def match_rc(self):
& T4 j: m/ I/ A0 P1 R9 D* |- q7 J        match_list = []
9 \0 S( P6 Z  N        rc_list1 = []- K. \1 A6 L, z3 e, A6 f" ~
        list_org = []5 @' _) ^- u) q7 s7 V0 l5 k
        index = 06 t9 X* Z+ e. }/ |; e# h
        txt1 = self.lineEdit.text()6 z0 U( @7 @4 g7 G) t9 ^8 U, I) a
        with open('C:\\Pads_scripts\\QT_GUI\\BGA_GUI_002\\save.txt', 'r') as f2:
2 k' C3 Y4 N, @& Y0 z, u' S            list_org = f2.readlines(); b4 f( A, Q- O& O" U. W) \" K
        for i in range(0, len(list_org)):  x2 F* G0 _; g; o4 c. R$ T
            list_org = list_org.rstrip('\n')0 V1 V9 k% k' d) O1 Z
        if txt1 == '':
5 S. @: o3 I& A& k2 C, [            self.listWidget.clear()
+ i' n* M# [& i5 P( _" g/ c            for count in range(0, len(list_org)):
* o' J, z+ r2 p% h3 X3 Z" k6 s                self.listWidget.addItem(list_org[count])
7 Z5 r- _# B; C' a        else:* m" ^- f( i3 T5 k2 f" `
            for row in range(0, len(list_org)):
7 X' u  @2 P* N7 b9 l( q                txt_row = self.listWidget.item(row).text()- U. d/ d- w! `8 ]
                if txt1 in txt_row:
6 D0 C! u* u) X! @$ L9 B" a                    match_list.append(txt_row)& I, z: ?# V5 H' t& o/ m' \% G
            self.listWidget.clear()
. e, N+ G' g1 e            for index in range(0, len(match_list)):- T2 g$ ]2 d2 G2 V
                self.listWidget.addItem(match_list[index])9 ]8 L. A- W. t) Q9 ?9 s/ X
. D# Q9 h- ]7 t  r: t
#线程1! Q: k0 Y& D, ]; o- I
class Worker1(QThread):
+ g! p3 ]; ^1 W( U2 j& D5 R& z4 u    sinOut1 = Signal(str)
  |7 j" j, F7 R) j( E6 p8 k    def __init__(self, parent=None):
1 H+ K+ Y2 h, r: V8 Y- |        super(Worker1, self).__init__(parent)9 G5 M. L0 q1 T2 X
     #把需要循环计算的内容放在run()中3 l; h& i7 ?) c) d
    def run(self):2 Q! a0 b/ a3 _; C( X! Y9 _
         #在多线程中调用COM,需要加以下两行代码,初始化COM Lib
+ i- r' A4 Y0 b
        import pythoncom
' O" d) W# H7 w/ ^7 v% q        pythoncom.CoInitialize()
; J+ B3 \7 c: Y5 {2 R2 R         #---否则报错: pywintypes.com_error: (-2147221008, '尚未调用 CoInitialize。', None, None)/ }4 V5 T9 K. ]
        BGA_MainApp.get_cmp_list(self)5 z" j+ O" k) z0 I
/ V7 z+ r, J3 H  y# U& x: h
! c4 E( J, Q0 p5 N3 e4 u% @

4 Z& z+ _5 x1 W2 [) Jif __name__=='__main__':
2 H; i* f5 z! @+ _    # 注意QApplication的构造器接收sys.argv作为参数,从而允许用户通过命令行定制外观等行为。
# ^/ x$ Z3 c- X9 V# K0 v$ Q& C
    Program = QApplication(sys.argv)5 C: |, H; U& v) u  G& K2 A8 D$ ]  M
    #print(QThread.currentThreadId)
+ k) s- s3 a& _  O! \
    Window = BGA_MainApp()
. I9 H! q% E( V* U! R9 Q    Window.show()) J5 |  @2 ^8 i' {% d
    print(QThread.currentThreadId)) d1 K, E3 L. M, U) Y2 J2 c- D8 _& H
    Program.exec_(); Q& ^8 V4 B4 z% i5 ~

3 S$ V+ U4 b! @# r

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-30 21:32 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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