CCIDマルチスレッドインタフェース-python

3826 ワード

具体的な機能:SN番号の情報を読み取る.Elsxテーブルは、CCID通信の端末装置に基づいて、特定のSN番号セグメントに関する情報を整合する、端末と自定のプロトコルに従って送信することができる.ElsxテーブルのデバイスSN番号セグメントのすべての構成情報は、複数のデバイス端末が構成情報を入力するのに便利である.
まとめ:2つのポイント:1.TKインタフェースのリストボックスとテキストラベルは、tkを設定することができる.StringVar()クラスは、別のスレッドでクラスのset()メソッドを呼び出すことで、tkラベルに表示される内容を変更できます.
    varlistb = tk.StringVar()
    listb = tk.Listbox(root, listvariable=varlistb, height=20, width=50, yscrollcommand=sb.set)  #         
    var = tk.StringVar()  #  label            , var   hit_me               
    l = tk.Label(root, textvariable=var, font=('Arial', 12), width=40, height=5)
2.    .exe   ,    pyinstaller -F  ,     win     PySmartCard  ,                  
#    :pyinstaller -F    (   py)
#      :
#–icon=    
#-F      exe  
#-w     ,    
#-c      ,   
#-D       ,    exe           

pyinstaller-F-D xxxxxを使用します.py、実行後に実行します.exeは、どのファイルが欠けているか、直接コピーすることができます.exeフォルダでOK
欠陥:スレッドの前に切り替えた場合、反発ロックは使用されず、後でソースコードを最適化できます.
import xlrd
import tkinter as tk
import time
from PySmartCard.CpuCard import PcscReader
import threading
import os
#         
def Get_QR_ListData(table, i):
    return table.row_values(i)

#      
def Creat_QR_Data(suoyingList, Hang_data):
    i = 0
    Message = ''
    for StrMessage in suoyingList:
        if str(Hang_data[i]) != '':
            Message += StrMessage + '=' + str(Hang_data[i]) + '&'
        i = i + 1
    return (Message.encode('GBK'))

#             
def Create_Photo(table,Meessage):
    global packDATA
    #print(Creat_QR_Data(Get_QR_ListData(table, 0), Get_QR_ListData(table, i)))
    num = table.nrows
    recv_list = []
    for i in range(1, num):
        if Meessage == 'SN':
            continue
        if Meessage in Get_QR_ListData(table, i):
            adu = Creat_QR_Data(Get_QR_ListData(table, 0), Get_QR_ListData(table, i))
            packDATA = adu

#      
def CCID_Data(adu):
    global ucMode
    if len(adu) > 1000:
        print("        1000  ")
        exit()
    #   
    AT_Hear = 'F0 2F 51 '
    #    
    AT_Hear_Adder = 16
    Pack_div_len = 252
    #   
    Pack_list = ['a1', 'a2', 'a3', 'a4']

    Pack_list.append(hex(int(len(adu) / Pack_div_len)).replace('0x', ''))
    Pack_list.append(hex(len(adu) % Pack_div_len).replace('0x', ''))
    #    
    for i in adu:
        Pack_list.append(hex(i).replace('0x', ''))

    for i in range(0, int(len(Pack_list)/Pack_div_len) + 1):
        MessPackData = ''
        if i != int(len(Pack_list)/Pack_div_len):
            for MessBuf in Pack_list[i*Pack_div_len:(i+1)*Pack_div_len]:
                if len(MessBuf) == 1:
                    MessPackData += '0'
                MessPackData += str(MessBuf)
        else:
            for MessBuf in Pack_list[i*Pack_div_len:]:
                if len(MessBuf) == 1:
                    MessPackData += '0'
                MessPackData += str(MessBuf)
        Message = AT_Hear + str(hex(AT_Hear_Adder + i).replace('0x', '')) \
                  + hex(int(len(MessPackData)/2)).replace('0x', '') + MessPackData
        recv_list = []
        sendApdu(pcsc, Message, recv_list, 2)
        if recv_list[1] != '9000':
            var.set('CCID    ')  #  label   
    var.set('      ')
    time.sleep(2)
    ucMode = 0

def g():
    global packDATA
    CCID_Data(packDATA)

def showLog(data, issend):
    '''      '''
    current = time.strftime('%Y_%m_%d %H:%M:%S', time.localtime())
    if issend:  #         
        send = '-->'
    else:  #        
        send = '