使用第三方COM从DispatchWithEvents返回事件

2024-10-01 00:23:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码在事件中从print语句打印出我需要的内容。但是,由于类的实例化方式,我不知道如何返回数据。此外,print语句仅在以下情况下有效pythoncom.PumpWaitingMessages公司包含(),但它不返回打印的数据或任何内容。在

我希望能够使用打印出来的作为返回值,供其他函数访问。在

(如果情况变得更糟,我可以捕获stdout(这是最后的手段)

代码:

# Standard Lib
import time
# Third Party
from win32com.client import DispatchWithEvents
import pythoncom
# Local Lib
import scan_var


class Events(object):
    def OnBarcodeEvent(self, eventType=pythoncom.Empty, pscanData=pythoncom.Empty):
        print pscanData
        return pscanData

zebra = DispatchWithEvents("CoreScanner.CoreScanner", Events)

# open api
open_status = zebra.Open(0, [1], 1)
print "Open status: {}".format(open_status)
# get scanners
get_scanners = zebra.GetScanners(0, [1])
print "get_scanners: {}".format(get_scanners)
# Register for events
register = zebra.ExecCommand(1001,scan_var.register_for_events)
print "register: {}".format(register)
# PEWPEWPEW (pull trigger)
fire_result = zebra.ExecCommand(2011, scan_var.pull_trigger)
print "PEWPEWPEW {}".format(fire_result)
time.sleep(5)

while True:
    time.sleep(1)
    pythoncom.PumpWaitingMessages()

输出:

^{pr2}$

Tags: 代码importregisterformatgetscantimevar
1条回答
网友
1楼 · 发布于 2024-10-01 00:23:51

我的解决办法如下。这可能是丑陋和错误的,但它得到了我所需要的。如果有人有更好的方法,我很乐意编辑。在

class Events(object):

    def get_barcode(self):
        return self.pscanData

    def OnBarcodeEvent(self, eventType=1, pscanData=pythoncom.Empty):
        self.pscanData = pscanData
        print self.pscanData



def save_serial_to_cache():
    zebra = DispatchWithEvents("CoreScanner.CoreScanner", Events)
    # open api
    open_status = zebra.Open(0, [1], 1)
    print "Open status: {}".format(open_status)
    #get scanners
    get_scanners = zebra.GetScanners(0, [1])
    print "get_scanners: {}".format(get_scanners)
    # Register for events
    register = zebra.ExecCommand(1001,scan_var.register_for_events)
    print "register: {}".format(register)
    # PEWPEWPEW (pull trigger)
    fire_result = zebra.ExecCommand(2011, scan_var.pull_trigger)
    print "PEWPEWPEW {}".format(fire_result)
    for counter in xrange(0, 5):
        time.sleep(1)
        pythoncom.PumpWaitingMessages()
    return zebra._obj_.get_barcode.__self__.pscanData

相关问题 更多 >