0

我有一个非常奇怪的问题困扰了我大约过去一天。

import wx, gui, threading, time, pyodbc
from OrderNumEntry import entryID, plyID, stationID
from main import strPlyDB
from Op1Login import eID1
global eID1

class MainFrame1(gui.MainFrame1Op):
    def __init__(self, parent):
        gui.MainFrame1Op.__init__(self, parent)
        self.m_textCtrl3.SetValue(eID1)
        # print eID1

    def checkClick1(self, event):
        if threading.activeCount() < 2:
            t1 = threading.Thread(target = self.checkAdvance1)
            t1.setDaemon(True)
            t1.start()
            self.m_checkBox110.SetValue(True)

    def checkAdvance1(self):
        strODBC_conn = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=%s' % strPlyDB
        conn = pyodbc.connect(strODBC_conn)
        cursor = conn.cursor()

        # eID1 = '00839530'
        print 'test1'
        print eID1
        print 'test2'

        SQL = 'INSERT INTO tblRecord(EntryID, PlyID, StationID, EmployeeNum, BuyoffTime) values(?,?,?,?,?)'
        cursor.execute(SQL, (entryID, plyID, stationID, eID1, time.strftime("%c")))

        cursor.commit()
        cursor.close()
        conn.close()

正在发生的事情是有一个main.py初始化我的mainframe1类的主要 Python 文件,它引用gui.py了它的所有 wxpython 代码来调出窗口。该文件只是事件处理程序。checkClick1当我单击窗口中的复选框(我知道的创意名称)时运行,这反过来又启动了checkAdvance1.

除一部分外,程序中一切正常。我的eID1变量在 中工作得很好__init__,并textCtrl3显示它。但是,当我尝试在 中再次使用它时checkAdvance1,程序会挂起。

为了测试它,我eID1用两个测试打印语句包围了打印语句。仅test1打印,并且没有给出错误代码,程序只是挂起。更令人困惑的是,当我print eID1在函数中添加一条语句__init__(现在已被注释掉)时,程序运行得很好!

我不确定 print 语句会如何影响变量功能,但它正在发生。但是,将打印语句放入修复它似乎是一种忽略实际问题的劣质解决方法。此外,注释掉的eID1声明只是一个示例,向您展示程序运行时变量的内容是什么样的。

编辑:我想出了一个我不完全满意的解决方法,但它比添加打印更好。如果我创建另一个变量,我可以将其设置为 empID1 的字符串翻译,如下所示:empID1 = str(eID1). 然后我可以稍后引用这个值来代替 eID1。但是,这仍然不适合我,因为根据我所知道和研究的一切,我的原始代码应该可以工作。这让我觉得幕后发生了一些不好的事情,以后可能会回来咬我。

4

0 回答 0