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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
from PySide.QtCore import *
. ^4 E  i: u7 x: o) \7 jfrom PySide.QtGui import *
# |5 e. ]1 ?; e#from PyQt5.QtWidgets import ** |3 D. i! ?+ S
import sys,re$ E3 h& A% e( p
from BGA_GUI_002 import Ui_MainWindow3 Y0 X, [4 Y1 d9 k
import win32gui,win32com.client,win32con,win32api
& n! T1 i3 e. n: E/ l7 C% J$ x2 e5 l- y# z: }% S8 p8 f
#创建BGA_MainApp类,定义BGA_MainApp类继承了QMainWindow类和Ui_MainWindow类----->多重继承  f! `* i" H5 n2 f
class BGA_MainApp(QMainWindow,Ui_MainWindow):/ L3 q: h6 e: u# @5 ]
    #建立初始化构造函数,初始化BGA_MainApp对象,不指定父类
7 Y; D$ t8 S  t2 q
    def __init__(self,parent=None):
1 d4 f' U0 C# C7 s6 V7 X8 q( Y        #继承QMainWindow类中的方法
, x. P( `$ B9 Y2 i; V  }. D% ]9 v
        super(BGA_MainApp,self).__init__(parent)6 ~" }. N) z! \8 b: Q) M7 h- T: R
        #QMainWindow.__init__(self,parent)3 {7 g2 Z$ b) g' l
        #继承Ui_MainWindow的setupUi方法
/ m6 M: z& [" ~
        self.setupUi(self)
5 J7 _+ e) t' Y" ~4 B; n: z        self.thread1 = Worker1()
* ]. V+ l- y% X+ w4 V+ S2 e        self.btn_action()2 h3 o3 u4 r& V9 ~; C% Q# F, `7 M. _

5 s. U9 c3 x& O- m, L
( t3 y/ i- i! Z# r7 S7 Z' t) B
8 u2 h) G1 l" c- R    def slotAdd1(self,get_rc_value):* b5 t$ Q3 m$ e1 o+ ~
        #print (get_rc_value): Q# y/ `2 {" A; ~
        f1 = open('C:\\pads_scripts\\QT_GUI\\BGA_GUI_002\\save.txt', 'a+')/ R0 C  g1 p1 [! X8 R) h7 V
        f1.writelines(get_rc_value + '\n')
$ \8 S7 `. x& b2 d5 T1 q- Z( N  i        f1.close(); [: Y: u8 w1 S9 `
        self.listWidget.addItem(get_rc_value)
1 |) Y9 O1 B' k8 T, h% @4 g- T# j: W  a$ I2 U5 y3 A: K$ O3 Y1 L9 {: \

: n  A9 k; D$ p  \3 U  c
: @" y, T" f7 T    def slotStart1(self):! Q1 ?" t4 q. d3 ]
        self.thread1.start()
. k( g3 {9 C# z3 _
  w# x5 t. d7 z! s( w0 c: W( M8 Z/ z: X) z  s; a% E; R1 e' V6 l
    # 创建界面中的按钮方法
+ G+ V) e" Y6 O. @
    def btn_action(self):
- f0 k5 D; X( E1 ]( _        # 执行rc_select_btn按钮的方法
' D& U- g. E  o8 z5 a. ?
        self.rc_select_btn.clicked.connect(self.slotStart1)+ m. u# U: s3 `8 U8 ]* G
        self.thread1.sinOut1.connect(self.slotAdd1)
! e* f0 G& X/ g& a2 }2 N        self.lineEdit.returnPressed.connect(self.match_rc)) O/ J4 E* X: C  z5 C

0 e/ g5 [/ a! p1 w. w: h
, {0 l  p' n7 w' k3 e4 V    #定义PADS中所选器件的属性方法2 w, a5 _6 [3 o1 N+ X7 d1 B4 Z
    def get_cmp_list(self):
. l+ b+ [: s1 V1 K        cmp_list=[]( V  j; i& A, M' f
        self.powerPCBApp = win32com.client.Dispatch('PowerPCB.Application')0 O$ E- v9 s6 p2 M! n5 e
        comp_list = self.powerPCBApp.ActiveDocument.GetObjects(1, '', True)6 m) P$ C  U* S4 M. |
        for comp_list_item in comp_list:
9 v# h4 Z: D  y' N( R* M# `4 A                pin_name_list = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins: h' y0 n$ D. ?6 h- S5 y3 O
                for item_pin in pin_name_list:
- J2 P9 I3 G- [. }+ X! y                    pin_name = item_pin.Name  Z2 v0 C, J; ]7 b5 U
                    pin_net_item = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).Net
* g; J. |& D7 m* A! T& U                    pin_lx = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).PositionX. Y0 I' ]5 O  \0 ^9 e
                    pin_ly = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).PositionY6 D) v8 |! ~/ Z4 G' N2 V: s, C
                    get_cmp_attr = str(pin_name) + ' ' + str(pin_net_item) + "<" + str(pin_lx) + ',' + str(pin_ly) + '>'
. }* o" L/ o/ t9 F2 N
                    get_cmp_attr = BGA_MainApp.get_rc(self,get_cmp_attr)- P, h0 |8 h5 C1 T% U: l- o: [
                    self.sinOut1.emit(get_cmp_attr)* w/ v- r. ]9 g7 {5 A# q6 O/ e
        return cmp_list
* {, ]( E4 ?0 M: Z
" G+ O( v- B  F2 q6 q! v$ x    def get_rc(self,cmp_list_item):
: x4 k3 }! Z9 J4 Z, B0 X5 j        get_val = cmp_list_item
$ \1 @3 O, @1 ^# s" a/ i" P! E        #C310.1 SM_VREF_DQ2_A <19.567046,1.535388>
; H/ @1 P; I% H
        #R304.2 0.675V <29.767,32.5355># V" X; ~  I, P% J' n. \( U
        get_val = get_val.split(' ')& v* c7 i8 p; V% h! p
        #C310.1
* |  l) d  G3 b
        get_val_name = get_val[0]
- w5 O8 x5 L% G6 u  K; p        get_val_net = get_val[1]. S6 F& Y; i' w, a
        #SM_VREF_DQ2_A<19.567046,1.535388>4 p" B+ q7 u: |# m
        get_val_net = get_val_net.split('<')4 r7 F9 A: K& w% @5 H
        #SM_VREF_DQ2_A
2 R+ d4 f5 q1 I0 d5 I% `: ^# t3 I
        get_val_net = get_val_net[0]7 m9 W: p' A# R/ m7 l* {
        get_val = str(get_val_name) + ' ' +str(get_val_net); I1 E, k3 x! w
        return get_val  F# K3 D% K' G  N' b

" }+ i8 P' i0 s) C: R    def get_cmp_list_match(self):
. L! |3 Q9 F. |# b        rc_list = [], D+ a' {( i* d9 K) Y
        self.powerPCBApp = self.win32com.client.Dispatch('PowerPCB.Application')) D! V% ]" u- U1 P
        comp_list = self.powerPCBApp.ActiveDocument.GetObjects(1, '', True)
7 `) {) D4 U( [0 Q7 u; d5 r' q
4 c& y4 P  T- B) r        for comp_list_item in comp_list:/ ?& R. M* ^1 C4 P  _$ _
            pin_name_list = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins
2 `0 ~9 T2 g* A" Z  n3 `            for item_pin in pin_name_list:
7 R8 q; c# @4 ?3 p& M2 `3 L                pin_name = item_pin.Name
7 K0 `  B' v, ^4 b                pin_net_item = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).Net# c1 n6 Z* x6 |& Y+ K+ |
                pin_net_str = str(comp_list_item) + ' ' + str(pin_net_item)
! s* ^# G! n; h, S! U6 {                rc_list.append(pin_net_str)
( O& h7 R6 M5 S5 q3 D" `        return rc_list
0 g) x3 W3 V& ]' M
7 v1 [# m- f$ p3 G/ A5 d1 E/ g3 ^0 s    # rc模糊查询功能0 J+ }3 Q$ V7 }' O
    def match_rc(self):
0 o3 Y! w, w9 W/ J% D& O& h        match_list = []  j% W$ A, w' x, G3 J
        rc_list1 = []
; w0 m1 F0 [- H. `8 H7 I$ p        list_org = [], ~$ H6 ^, V& a8 F7 [
        index = 0$ M7 @0 W) Y. e4 p: o/ Y
        txt1 = self.lineEdit.text()
9 J6 I* A, H, m7 n        with open('C:\\Pads_scripts\\QT_GUI\\BGA_GUI_002\\save.txt', 'r') as f2:; ?. k. V3 a$ R8 m% n; ^
            list_org = f2.readlines()5 t$ k' @! J9 P0 L
        for i in range(0, len(list_org)):& t& i+ q. _" z& p
            list_org = list_org.rstrip('\n')
* N1 T! I  O& H+ H2 U; G- p        if txt1 == '':, L1 w" v& ]$ l. G7 ~* d7 Y
            self.listWidget.clear()1 [/ A4 V# `. x0 ]
            for count in range(0, len(list_org)):- U2 F6 L7 I" A
                self.listWidget.addItem(list_org[count])/ s- t: j% p7 H0 l" J# _
        else:* Z6 Y$ W3 }7 s1 F/ P# K
            for row in range(0, len(list_org)):
) v; O( ]0 A1 i' X5 h( D                txt_row = self.listWidget.item(row).text()9 M9 x& ?! Q  a5 c% u
                if txt1 in txt_row:8 `/ d% K. i9 [5 X# k
                    match_list.append(txt_row)
/ g# h* k# s1 T9 ?1 f            self.listWidget.clear()
  V, c* `5 q& h            for index in range(0, len(match_list)):2 Q& v, k6 |, y" k  [- s5 B" y
                self.listWidget.addItem(match_list[index])& V/ U. @/ q- P7 K# O, W7 u

& h; @' X$ N: b; K0 X6 H% ~#线程1
0 X, p0 e( T1 w- m
class Worker1(QThread):
# X, K  T; n3 x    sinOut1 = Signal(str)
0 \# a, ]/ [- d4 h3 ^    def __init__(self, parent=None):, U' j! R3 b9 |2 ^7 l* C# j9 w4 l
        super(Worker1, self).__init__(parent), I5 c- Q2 ^6 j& J7 h
     #把需要循环计算的内容放在run()中
* R1 i$ m6 [  ?/ I5 ?& A' I: n
    def run(self):; T3 F3 V; S  i) e
         #在多线程中调用COM,需要加以下两行代码,初始化COM Lib& ?* h/ O! f0 I( p: n7 M: v- [
        import pythoncom
% g7 [* Y: b# M. V2 K        pythoncom.CoInitialize()
- r+ z$ }7 ?5 P# m         #---否则报错: pywintypes.com_error: (-2147221008, '尚未调用 CoInitialize。', None, None)! i, z8 j) `7 D' ?% A8 v7 q
        BGA_MainApp.get_cmp_list(self)
  X( m0 y+ F2 L1 [7 q8 |" T  n* R8 ~# I- u- b. n/ O* \3 E
/ ]0 D! w) ]. ^# i/ T; d  T2 u
  f/ m, a+ x5 E* W. h+ `) q9 W9 ^
if __name__=='__main__':6 F" W7 H! n' C' o' i
    # 注意QApplication的构造器接收sys.argv作为参数,从而允许用户通过命令行定制外观等行为。
* o( Y+ j# |# Y$ G
    Program = QApplication(sys.argv)% ?' Y5 w& n) w" @
    #print(QThread.currentThreadId)# W1 F+ y  C. N% p) j) k
    Window = BGA_MainApp(), ]7 D' k) y& F# p9 f: j
    Window.show()9 ~$ s. @- U2 h4 _5 b
    print(QThread.currentThreadId)
1 V& A6 X4 T$ c) i. R# P0 _    Program.exec_()
( ]2 u' J& L, Q) f( t' {4 l" r8 u+ G6 ]+ F) A# K# @

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-11 21:16 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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