我有一个非常奇怪的问题困扰了我大约过去一天。
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。但是,这仍然不适合我,因为根据我所知道和研究的一切,我的原始代码应该可以工作。这让我觉得幕后发生了一些不好的事情,以后可能会回来咬我。