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

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

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
from PySide.QtCore import *
- Z  `8 l  v1 h2 Gfrom PySide.QtGui import *1 ~! l& i8 W3 b4 t0 E
#from PyQt5.QtWidgets import *- _+ s4 Q) _  R' n- ^
import sys,re0 z: K* |8 O  }! O
from BGA_GUI_002 import Ui_MainWindow! z* Z1 K+ Z7 p3 F/ K7 n
import win32gui,win32com.client,win32con,win32api
% n& i+ f/ J6 n* ~( D# b
8 E0 j+ {0 a; I  ], R#创建BGA_MainApp类,定义BGA_MainApp类继承了QMainWindow类和Ui_MainWindow类----->多重继承6 Q9 `. R0 j$ P( U5 {
class BGA_MainApp(QMainWindow,Ui_MainWindow):
+ P  H8 M7 N: z& x    #建立初始化构造函数,初始化BGA_MainApp对象,不指定父类
9 u, s& m+ \: f- [
    def __init__(self,parent=None):& b  \) R! y5 `! G- N; i
        #继承QMainWindow类中的方法
4 Z3 F6 q# A8 d# B* w* I' r
        super(BGA_MainApp,self).__init__(parent)
; D/ ]+ V7 u* j' |& E. ^0 [        #QMainWindow.__init__(self,parent)
+ U2 x( S/ V8 |* P$ H7 e3 L
        #继承Ui_MainWindow的setupUi方法
1 R  H$ q+ n3 y$ }
        self.setupUi(self)
6 g; F) H* f% r        self.thread1 = Worker1()
+ A6 @  O+ }) A9 u) L' e& M        self.btn_action()
3 P& O/ F7 y  t# f
) u- `1 y( y5 T# [: a. n5 c$ [& m0 d# s3 ?' w7 b  j: C, k

9 \3 u% W0 H+ s# X/ @, l1 Z3 U    def slotAdd1(self,get_rc_value):  p2 I: T, s5 l
        #print (get_rc_value)
8 W( B+ y/ w) J' q/ V5 r1 r
        f1 = open('C:\\pads_scripts\\QT_GUI\\BGA_GUI_002\\save.txt', 'a+')- c& f5 z/ j: f5 K' a, P
        f1.writelines(get_rc_value + '\n')6 j5 L  S* F/ d' t  n. l4 l9 W1 c# I
        f1.close()
$ }: x( u4 w- [3 V- w( m1 Y5 W        self.listWidget.addItem(get_rc_value)4 l/ V9 {6 b) H8 J5 O! X

" |. u6 ?# \+ ?; A' i; _& P1 n7 J  |8 P, Y: Z% o! o; y

4 w; J! u. ^. h% ^) ?    def slotStart1(self):. s/ m  b! N4 X# k+ M
        self.thread1.start()
) {! v. L3 l  N- v$ O4 f% [8 D$ Y5 Q

: ^6 N9 H  f! T  q1 K$ b    # 创建界面中的按钮方法
+ }; |# r; i, p2 i
    def btn_action(self):
7 o: K. B- [9 T        # 执行rc_select_btn按钮的方法
& e4 u3 S& I$ O' v% v6 r* }) ~7 w
        self.rc_select_btn.clicked.connect(self.slotStart1)
7 |* X0 Y1 ~" Q7 D8 N        self.thread1.sinOut1.connect(self.slotAdd1)/ p2 G, G* m  ^1 N. v
        self.lineEdit.returnPressed.connect(self.match_rc)
' ]; G# q' e& N8 W+ e, ~6 T0 ^+ @6 D1 Z9 Q* n4 J/ M
. ~, M7 T- C' L% {/ c! c$ \
    #定义PADS中所选器件的属性方法* ^* N$ V- P8 j) k# |. o1 i; q
    def get_cmp_list(self):
( ]/ w1 L5 p3 P1 K$ _% Y2 {- j        cmp_list=[]0 Y1 }6 }( @% F- P
        self.powerPCBApp = win32com.client.Dispatch('PowerPCB.Application')
. ?, m0 [3 |3 o' p        comp_list = self.powerPCBApp.ActiveDocument.GetObjects(1, '', True)
" b/ ?! o9 Q- q1 \        for comp_list_item in comp_list:- ]* {$ h) \8 Y! s% y
                pin_name_list = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins7 V; S  l" ?+ D+ N$ v* W7 {
                for item_pin in pin_name_list:
5 u; ]9 I5 Q, i                    pin_name = item_pin.Name
, W7 w: x2 Q( Y  R1 ]                    pin_net_item = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).Net/ C8 S: h4 P' S8 u8 G( U
                    pin_lx = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).PositionX7 |' G' i6 D$ B
                    pin_ly = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).PositionY/ \' q$ ?- H( e1 x' {9 V
                    get_cmp_attr = str(pin_name) + ' ' + str(pin_net_item) + "<" + str(pin_lx) + ',' + str(pin_ly) + '>'2 ?' ]: H* u$ P- {2 [' F
                    get_cmp_attr = BGA_MainApp.get_rc(self,get_cmp_attr)' i# j+ g4 Q7 \4 k
                    self.sinOut1.emit(get_cmp_attr)
4 u, e; z0 A: H5 g8 ~1 n; o- v        return cmp_list
1 v$ I& U; z4 S; ]; G8 [# n! }( R9 f% j! t, q: V6 w( Y4 o4 Z* ^0 c! a5 Y
    def get_rc(self,cmp_list_item):% ]% B- y/ t0 Z- \- k7 |
        get_val = cmp_list_item
6 w6 V( a3 A' @3 Z0 B        #C310.1 SM_VREF_DQ2_A <19.567046,1.535388>
- z% z: X" ]7 o) Q+ E' W1 ]7 I
        #R304.2 0.675V <29.767,32.5355>
( b9 b, K) |. j: w! }. \* j
        get_val = get_val.split(' ')
: T" {3 }; F: C  v9 P        #C310.1
2 z* w9 B, \8 |
        get_val_name = get_val[0]
2 X  N/ |7 F; `5 q- x& q3 ^5 R* X        get_val_net = get_val[1]
; w3 [8 N5 b5 b+ x9 {+ |        #SM_VREF_DQ2_A<19.567046,1.535388>0 {1 k; t  I( h% G1 M: A
        get_val_net = get_val_net.split('<')
7 R) G! x( t% G* K9 d        #SM_VREF_DQ2_A3 R6 p' O) P4 U# _. e$ R
        get_val_net = get_val_net[0]% W! F2 I- J" F& o9 I' l2 B
        get_val = str(get_val_name) + ' ' +str(get_val_net)
. O! N& }/ z- |! }* R/ y' h        return get_val" D" y' }8 U' o# s% W

. [/ e1 ~2 x# M1 [, }" F9 a8 f* t; U    def get_cmp_list_match(self):  B& Z& w: M0 M4 J% c' ~* X
        rc_list = []
6 b' F9 J' k8 @6 c* D        self.powerPCBApp = self.win32com.client.Dispatch('PowerPCB.Application')
) @0 O4 ?, j$ S7 {        comp_list = self.powerPCBApp.ActiveDocument.GetObjects(1, '', True)( p3 g" H1 u8 @1 t, [7 X

8 B' {; J7 K+ q) {  T! r$ F* d        for comp_list_item in comp_list:
2 S( }8 M/ l* i. m8 {/ u& Y" G            pin_name_list = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins3 Y1 S. y/ p6 p+ H. b
            for item_pin in pin_name_list:8 I# K% Q8 P" q1 ^, Y( }
                pin_name = item_pin.Name1 G5 j: L+ }! b+ l
                pin_net_item = self.powerPCBApp.ActiveDocument.Components(str(comp_list_item)).Pins(pin_name).Net
% D* q: {( w7 G                pin_net_str = str(comp_list_item) + ' ' + str(pin_net_item)
. B  P4 f% R$ \                rc_list.append(pin_net_str)- O, o0 \3 p7 z" e
        return rc_list
2 J+ b) G! ?8 E, N. b, t( {
; Y( C: _7 x: K; e. D2 K8 F    # rc模糊查询功能
: M- n8 |5 [3 t/ J0 W  T. B) U
    def match_rc(self):
+ @0 [, }/ J1 M4 i. h5 ]% D, Q1 \        match_list = [], U' S$ |2 Z; `- K
        rc_list1 = []: v7 f6 s! M' U; Q+ w! H
        list_org = []
+ D& k$ R' `- B( ?) i8 g% f        index = 04 T9 ?% D! x  }7 ^# a- ]  U8 [
        txt1 = self.lineEdit.text()* M7 `3 Y7 B% d( h4 V
        with open('C:\\Pads_scripts\\QT_GUI\\BGA_GUI_002\\save.txt', 'r') as f2:
# s5 w4 k9 \- f* V            list_org = f2.readlines()
3 a5 V+ v/ F  }/ m+ g" D        for i in range(0, len(list_org)):
+ D( [) }: X# p. O/ J2 l% m            list_org = list_org.rstrip('\n')% w! S, H! k5 u. N/ j
        if txt1 == '':
1 t/ _3 s  u$ G" o" R7 y, A8 ^+ ~            self.listWidget.clear()3 k( D" U: b) t
            for count in range(0, len(list_org)):
3 T% x/ z+ J# m4 e* _5 x                self.listWidget.addItem(list_org[count])$ v. Q# X/ X$ L; P) p. x
        else:! c! q! Z3 I" s& b% ~: n
            for row in range(0, len(list_org)):  c/ h( V0 h2 |6 ~
                txt_row = self.listWidget.item(row).text()3 F. L" N" d. ?4 P
                if txt1 in txt_row:1 `; }( V" {, C  [* r4 \  d+ z) c  q
                    match_list.append(txt_row)
! }! a; c6 J# |- |9 d1 D) k            self.listWidget.clear()
  j0 ~4 c2 h/ a4 h% U: Z8 [            for index in range(0, len(match_list)):3 z$ p2 p  g$ u, M( U9 z
                self.listWidget.addItem(match_list[index])
/ Q( f7 z; X+ s9 h' _
: W" U1 `6 A; v+ ]6 {#线程1
( P4 W7 x1 e5 v# J0 g& f9 `: C
class Worker1(QThread):& G# f' w3 |, \( W& x
    sinOut1 = Signal(str)& ^$ b4 L5 I2 N) N1 s5 Q# L
    def __init__(self, parent=None):
! E% ~& l% f, u4 i        super(Worker1, self).__init__(parent)
1 K4 J; S0 d% F7 `- f3 b( _3 z$ W     #把需要循环计算的内容放在run()中
6 n3 C" F4 A( x# ]) p( k7 s( {
    def run(self):
( \; R# Y9 R& [7 V8 s, _         #在多线程中调用COM,需要加以下两行代码,初始化COM Lib9 ?& B. r2 G; G6 G  h
        import pythoncom( y7 N2 s/ w9 i; D, ?  I; Y
        pythoncom.CoInitialize()
: F: b# `& d1 m7 `) Y: W% i' t         #---否则报错: pywintypes.com_error: (-2147221008, '尚未调用 CoInitialize。', None, None)
( W3 y1 l/ S3 Y0 i4 W9 v
        BGA_MainApp.get_cmp_list(self)
( B/ v8 E* Z! |
, [# T5 Z- I' U) l& ]5 U# C( i( x
6 D' ^8 S( k; S, U
$ F, I' Z) {! L! P: W/ E) ~if __name__=='__main__':
6 [4 U6 o' H' A6 w9 w) ^# X    # 注意QApplication的构造器接收sys.argv作为参数,从而允许用户通过命令行定制外观等行为。
) n% e/ u7 ?6 o; h- n
    Program = QApplication(sys.argv)
8 @# r! T) o# S! d' y    #print(QThread.currentThreadId)
- K# N0 r! p" Y% a2 V
    Window = BGA_MainApp()1 N0 ~# S) @9 }, H+ ]: o8 ~0 }
    Window.show()
7 i% w. M$ `. i  p! M    print(QThread.currentThreadId)
( r- g4 b, O7 w% R4 [    Program.exec_()$ |& C+ F+ H/ v* ~: _+ O) S
" q1 B, c8 O. s  r7 m6 B

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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