我有一个非常奇怪的问题,在过去的一天里让我感到难过。
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()
正在发生的是主要的Python文件main.py
,它初始化了我的mainframe1
类,它引用了gui.py
所有的wxpython代码来调出窗口。这个文件只是事件处理程序。当我点击我窗口中的复选框(我知道的广告素材名称)时会checkClick1
运行,而该复选框会启动checkAdvance1
的主题。
除了一部分外,程序中的一切正常。我的eID1
变量在__init__
中运行正常,textCtrl3
显示它。但是,当我尝试在checkAdvance1
中再次使用它时,程序会挂起。
为了测试它,我用eID1
包含了两个测试打印语句的print语句。只打印test1
,并且没有给出错误代码,程序只是挂起。更让人感到困惑的是,当我在print eID1
函数中添加__init__
语句时(它现在被注释掉),程序运行得很好!
我不确定print语句会如何影响变量功能,但它正在发生。但是,将一个打印语句放入修复程序似乎是一种伪劣的解决方法,忽略了实际问题。此外,注释掉的eID1
声明只是一个示例,向您展示程序运行时变量的内容。
编辑:
我想出了一个我并不完全满意的工作,但它比添加打印更好。如果我创建另一个变量,我可以将它设置为empID1的字符串转换,如下所示:empID1 = str(eID1)
。然后我可以在以后用eID1来引用这个值。然而,这仍然不适合我,因为根据我所知道和研究的一切,我的原始代码应该工作。这让我觉得幕后会发生一些不好的事情,以后可能会再次咬我。