私は非常に奇妙な問題に悩まされています。
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
を初期化するプライマリ Python ファイルがあり、そのファイルはすべての wxpython コードを参照してウィンドウを表示します。このファイルは単なるイベント ハンドラです。ウィンドウのチェックボックス (私が知っているクリエイティブ名) をクリックすると実行され、.mainframe1
gui.py
checkClick1
checkAdvance1
一部を除いて、プログラム内のすべてが正常に機能します。私のeID1
変数は で問題なく動作し__init__
、textCtrl3
表示されます。ただし、 で再度使用しようとするとcheckAdvance1
、プログラムがハングします。
eID1
それをテストするために、2 つの test print ステートメントでprint ステートメントを囲みました。のみtest1
が表示され、エラー コードは表示されず、プログラムは単にハングします。さらにややこしいことprint eID1
に、関数にステートメントを入れる__init__
と (現在はコメントアウトされています)、プログラムは問題なく実行されます。
可変機能が print ステートメントによってどのように影響を受けるかはわかりませんが、それは起こっています。ただし、それを修正するために print ステートメントを挿入することは、実際の問題を無視する粗末な回避策のように思えます。また、コメントアウトされたeID1
宣言は、プログラムの実行時に変数の内容がどのように見えるかを示すための単なる例です。
編集:私は完全に満足していない回避策を考え出しましたが、印刷を追加するよりはましです。別の変数を作成すると、次のように empID1 の文字列変換に設定できますempID1 = str(eID1)
。後で eID1 の代わりにこの値を参照できます。しかし、私が知っていて調査したすべてのことによると、元のコードは機能する必要があるため、これはまだうまくいきません。舞台裏で何か悪いことが起こっているような気がします。