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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
from PySide.QtCore import *" U* y& s( B0 {2 A' b! r
from PySide.QtGui import *
1 Z* k; @4 h" C% s0 Q8 x#from PyQt5.QtWidgets import *6 J, J- h' f+ F3 [
import sys,re
4 i  U  N* k+ n' T" qfrom BGA_GUI_002 import Ui_MainWindow8 J- {% o" C4 v1 J: K2 i
import win32gui,win32com.client,win32con,win32api
* S& ]" H: w. D% o4 P& ?# l
# ]7 M( ^5 b/ D#创建BGA_MainApp类,定义BGA_MainApp类继承了QMainWindow类和Ui_MainWindow类----->多重继承# o7 X8 D" }7 l% n8 m& _8 B( B
class BGA_MainApp(QMainWindow,Ui_MainWindow):
1 K# n4 {' X; j+ l    #建立初始化构造函数,初始化BGA_MainApp对象,不指定父类
& t, S& g/ d6 F7 {9 x
    def __init__(self,parent=None):
+ y$ o7 \' G( r: u, l" u, F% i8 @- i        #继承QMainWindow类中的方法/ K* a1 o- h5 E& S( i1 q
        super(BGA_MainApp,self).__init__(parent)
! Z' c: r. X, |        #QMainWindow.__init__(self,parent)
$ }( i7 O8 z# r  y& d
        #继承Ui_MainWindow的setupUi方法; |0 v+ Q1 U- v' z- [! G6 q
        self.setupUi(self)
, R5 p6 K* P; b  Z" {8 d. i* _        self.thread1 = Worker1()* h  {+ h$ r8 _: F+ G
        self.btn_action()
: k; A0 b; H7 W& R, E2 T: k( u
+ Y# h3 ~5 i; X' @+ U! S& b4 ^1 [9 V2 C- x2 c" P$ j( l& K
4 O* Q% I2 f7 w
    def slotAdd1(self,get_rc_value):
; V1 r* u4 L8 f( {9 \7 a4 H        #print (get_rc_value)
- L2 [6 X; f+ V  y
        f1 = open('C:\\pads_scripts\\QT_GUI\\BGA_GUI_002\\save.txt', 'a+'); m8 `4 u! V* N$ R$ p/ E, A
        f1.writelines(get_rc_value + '\n')- E6 U7 H) Y* L4 C/ m0 ~$ W
        f1.close()
3 U" U! N/ E) t/ N6 v$ z8 z5 E        self.listWidget.addItem(get_rc_value)* `( ^& e3 z8 W# V  B

' v5 W3 A9 H5 U( p6 N4 B+ G- c
/ ?& b+ y- C; O# T+ o  j& [3 n- ?7 Q6 e8 X" _, U
    def slotStart1(self):6 H' a; }" A* Q) |3 b* s7 X+ D# B
        self.thread1.start()9 v2 a6 W. A) @# H

+ T3 |9 d& E, J8 ?$ t' _' c
& C/ a/ z1 b: T& Q- H$ n$ I    # 创建界面中的按钮方法4 J6 U9 s1 q$ E( Q) ?
    def btn_action(self):8 u7 Q1 c) F/ j3 s. o$ P7 t2 ^( y
        # 执行rc_select_btn按钮的方法
1 @5 s& q" k+ c# H2 {: p
        self.rc_select_btn.clicked.connect(self.slotStart1)
: H! q! Z3 l: B" M' N4 V6 o) V- G        self.thread1.sinOut1.connect(self.slotAdd1)
; |$ z+ W* Z1 \  `$ `) }$ a9 f        self.lineEdit.returnPressed.connect(self.match_rc)/ \" I9 s, r8 I& Q/ v/ ]  V
7 Z  u( }+ ~" P

& n& _- R5 v' {' ]# Z/ z% @5 X    #定义PADS中所选器件的属性方法* ^# ]$ p: E4 Y1 R
    def get_cmp_list(self):
. @" j, L1 X& e0 @        cmp_list=[]
; W  p, L) d, y4 s" q1 n& W0 p2 \        self.powerPCBApp = win32com.client.Dispatch('PowerPCB.Application')
' _4 o! f/ C7 S, X* g# S7 ^        comp_list = self.powerPCBApp.ActiveDocument.GetObjects(1, '', True)7 L- C4 Z3 ?' A2 Q
        for comp_list_item in comp_list:
% f9 M! \% U, h# L" j                pin_name_list = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins4 o% C3 ^: _3 H
                for item_pin in pin_name_list:3 l' N% t+ a/ i8 e
                    pin_name = item_pin.Name7 A' V! G" F/ }
                    pin_net_item = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).Net$ [' B- N# p5 x7 n, W  m
                    pin_lx = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).PositionX
/ S4 \6 Y5 c- Q! k7 T                    pin_ly = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).PositionY
6 D( M4 S7 l3 q/ K1 _- M4 f" y                    get_cmp_attr = str(pin_name) + ' ' + str(pin_net_item) + "<" + str(pin_lx) + ',' + str(pin_ly) + '>'9 a; L- y9 T9 C
                    get_cmp_attr = BGA_MainApp.get_rc(self,get_cmp_attr)/ f9 t( b& j7 f
                    self.sinOut1.emit(get_cmp_attr), v3 ~' D; I9 J7 _- `' S8 P
        return cmp_list! x: }& U8 D2 w7 n8 s
. b( J' F/ R: u' W7 `
    def get_rc(self,cmp_list_item):4 j6 y3 n, j5 w5 T2 ^
        get_val = cmp_list_item
1 N* S9 N4 p- [  `8 }) p$ c        #C310.1 SM_VREF_DQ2_A <19.567046,1.535388>
* g/ M; H; R1 B
        #R304.2 0.675V <29.767,32.5355>( H1 Y  Y2 K1 u$ w- |# s
        get_val = get_val.split(' ')4 K4 x* v( h; H/ E2 b! Q, S1 a: [
        #C310.15 R; q, }- ~  v* \. `( ^
        get_val_name = get_val[0]
5 J4 b9 W# c$ ]8 Y        get_val_net = get_val[1]6 m& {. z4 b; ]- G- T- u2 ~
        #SM_VREF_DQ2_A<19.567046,1.535388>
; N7 A# N4 k$ d. d
        get_val_net = get_val_net.split('<')- l9 ?/ g7 h: _  l$ {
        #SM_VREF_DQ2_A" n, d8 Z9 j2 w0 |
        get_val_net = get_val_net[0]
3 H9 h  x; k3 n( B        get_val = str(get_val_name) + ' ' +str(get_val_net)% b/ M9 k) D" O2 H  z
        return get_val
7 `7 B7 ?( J5 m, G# ?; S7 M6 v% {: Y3 F+ U  V
    def get_cmp_list_match(self):
* W6 M$ h3 Y( W        rc_list = [], K; o/ F" L2 T. R' j" q' K; d
        self.powerPCBApp = self.win32com.client.Dispatch('PowerPCB.Application')
& i, R1 d9 G+ i: X3 E2 u- d        comp_list = self.powerPCBApp.ActiveDocument.GetObjects(1, '', True)5 B& b! |5 T5 i* F1 W4 i1 x
: I# T; T- L8 D' o/ s% B
        for comp_list_item in comp_list:  v' O$ ]/ M3 ?  M6 [  ], _
            pin_name_list = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins3 e( e5 ?8 |. [# D% r* ?) }
            for item_pin in pin_name_list:1 M, M( v% j3 A# |3 M; g. m
                pin_name = item_pin.Name" f. }9 t- Q) U7 D1 \' ]9 Y. E) U) x
                pin_net_item = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).Net# H! w! g7 v0 Z- q0 h
                pin_net_str = str(comp_list_item) + ' ' + str(pin_net_item)
) p& L7 J" R+ V/ |# v3 _) s5 d                rc_list.append(pin_net_str)
7 ?  l7 ?! z& n; y" T  k- |        return rc_list
* Q0 X- v8 ~( |+ w2 G+ F: T
, b4 o0 E" q; n) P) F' ?( r    # rc模糊查询功能
8 o0 A1 E+ t2 b4 B
    def match_rc(self):) N2 c3 y% s1 }# a6 V; E
        match_list = []' t3 {5 C% [2 r5 w9 j3 I% P
        rc_list1 = []
& m1 D. Y4 }# C, w2 I        list_org = []% a0 I! K4 }' n# a% s6 R! H
        index = 0
3 @) M- q/ W5 \, o( n3 R
        txt1 = self.lineEdit.text()5 B9 X  g: X3 q, M2 R' e' `) U
        with open('C:\\Pads_scripts\\QT_GUI\\BGA_GUI_002\\save.txt', 'r') as f2:
6 o: `5 @4 U9 M+ `/ |4 j            list_org = f2.readlines()
6 E4 W! S1 ]6 O, G- I2 e        for i in range(0, len(list_org)):
! `" e- l" `4 S0 P3 ]4 _            list_org = list_org.rstrip('\n')
5 A5 T. Z% S$ \$ i7 M        if txt1 == '':
5 t7 ]. b. d; k" v9 j            self.listWidget.clear()
2 X4 ^) J/ L' |            for count in range(0, len(list_org)):' g. h. }. z: A8 N4 Z
                self.listWidget.addItem(list_org[count])
! Z& k1 K2 j7 c) F9 r  r/ N* p$ ^" G        else:0 T4 E5 v0 _3 g
            for row in range(0, len(list_org)):
2 ~0 l- G& y3 a6 [2 h3 q                txt_row = self.listWidget.item(row).text()# b& S, u7 z; _2 x- v' F) u
                if txt1 in txt_row:- |0 p* n' ^1 k( e0 Y. u! p
                    match_list.append(txt_row)  j* r( o! m# @+ V& @
            self.listWidget.clear()% X0 t% n# L  j2 N% L
            for index in range(0, len(match_list)):
  Z7 k4 ~+ s+ M/ |                self.listWidget.addItem(match_list[index])
/ E# r& x8 D( a4 N6 R0 i! d4 I3 N* d$ w% [& {
#线程1
# h( j6 J/ {" G6 O- i& \& I/ R
class Worker1(QThread):# i8 N# Y# s% z% y8 g# z. T9 T8 S$ q
    sinOut1 = Signal(str); N' O4 h5 ?4 {8 r! z1 N
    def __init__(self, parent=None):
  U; o% B, [& g- j5 T        super(Worker1, self).__init__(parent)
% K; }) l0 w' n! d& {     #把需要循环计算的内容放在run()中# A! p! K! f7 \; S1 G
    def run(self):6 r- L0 B# q. w5 U# m7 F% K
         #在多线程中调用COM,需要加以下两行代码,初始化COM Lib' b) D5 j" \9 t& c$ T0 x$ ~
        import pythoncom* ^' U* j* H# }7 L3 n
        pythoncom.CoInitialize(), w9 K5 U' I( Q: O" G; p
         #---否则报错: pywintypes.com_error: (-2147221008, '尚未调用 CoInitialize。', None, None)
3 z9 N+ S; r: @+ F$ I
        BGA_MainApp.get_cmp_list(self)
9 K- k2 K, P+ v& d- d4 \
+ G; d* t4 Z( `# h7 L( w. D( |' C" M" v4 D) X

  |- n2 ]& x4 @8 t4 s  a% I# Oif __name__=='__main__':
+ d2 [2 T' r- ?2 U8 f$ k" d    # 注意QApplication的构造器接收sys.argv作为参数,从而允许用户通过命令行定制外观等行为。1 U7 t; h3 K: q* u8 J0 y+ S
    Program = QApplication(sys.argv)) \& p) m- x% q% s0 c6 x4 u7 ^4 O
    #print(QThread.currentThreadId)6 w& d  c/ z5 w$ o
    Window = BGA_MainApp()2 k9 f6 K6 O' y7 x& ~; |$ z, ]
    Window.show()
5 p' |$ e) z1 S" F. K5 |  ^+ w+ O% b    print(QThread.currentThreadId)7 Q+ M0 r7 W; |" H+ x" g) G
    Program.exec_()- a5 q% V; ]* ^1 n/ j
3 b& R( \! I7 |. [1 t; S

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-18 01:36 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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