Me again! I’m a little worried I’m overstaying my welcome with this script, but se la vie. I have a set of DirectSliders, the second of which copies the first slider’s value, which is edited by pressing the w and s keys. I want to be able to press q and set a boolean that causes the second slider to start being edited independently.
# w - both wings flare open & glide
self.w = self.accept('w-repeat', self.glide)
# s - both wings close & drop
self.s = self.accept('s-repeat', self.drop)
self.leftWingUpdate = False
self.rightWingUpdate = False
# q - press to change only left wing
self.q = self.accept('q', self.updateWing, [self.leftWingUpdate])
def setCheckValue(self, button, value):
button['indicatorValue'] = value
def turnLeft(self):
self.setCheckValue(self.leftB, True)
self.setCheckValue(self.rightB, False)
def turnRight(self):
self.setCheckValue(self.rightB, True)
self.setCheckValue(self.leftB, False)
def glide(self):
if self.leftWingUpdate:
self.rightWingUpdate = False
self.leftWing['value'] = self.leftWing['value'] + 1
elif self.rightWingUpdate:
self.leftWingUpdate = False
self.rightWing['value'] = self.rightWing['value'] + 1
else:
self.wings['value'] = self.wings['value'] + 1
self.wingInherit()
def drop(self):
if self.leftWingUpdate:
self.leftWing['value'] = self.leftWing['value'] - 1
elif self.rightWingUpdate:
self.rightWing['value'] = self.rightWing['value'] - 1
else:
self.wings['value'] = self.wings['value'] - 1
self.wingInherit()
def wingInherit(self):
self.leftWing['value'] = self.wings['value']
self.rightWing['value'] = self.wings['value']
def updateWing(self, wing):
pdb.set_trace()
wing = not wing
print('Wing updated')
When running the program nothing happens, but when I use pdb I get this when I enter “q”:
h:\dw\control_tests\flightcontrols.py(114)updateWing()
→ wing = not wing
(Pdb) q
Traceback (most recent call last):
File “C:\Users_\AppData\Local\Programs\Python\Python37-32\lib\site-packages\direct\showbase\EventManager.py”, line 47, in eventLoopTask
self.doEvents()
File “C:\Users_\AppData\Local\Programs\Python\Python37-32\lib\site-packages\direct\showbase\EventManager.py”, line 41, in doEvents
processFunc(self.eventQueue.dequeueEvent())
File “C:\Users_\AppData\Local\Programs\Python\Python37-32\lib\site-packages\direct\showbase\EventManager.py”, line 100, in processEvent
messenger.send(eventName)
File “C:\Users_\AppData\Local\Programs\Python\Python37-32\lib\site-packages\direct\showbase\Messenger.py”, line 333, in send
self.__dispatch(acceptorDict, event, sentArgs, foundWatch)
File “C:\Users_\AppData\Local\Programs\Python\Python37-32\lib\site-packages\direct\showbase\Messenger.py”, line 418, in __dispatch
result = method ((extraArgs + sentArgs))
File “flightcontrols.py”, line 114, in updateWing
wing = not wing
File “flightcontrols.py”, line 114, in updateWing
wing = not wing
File “C:\Users_\AppData\Local\Programs\Python\Python37-32\lib\bdb.py”, line 88, in trace_dispatch
return self.dispatch_line(frame)
File “C:\Users_\AppData\Local\Programs\Python\Python37-32\lib\bdb.py”, line 113, in dispatch_line
if self.quitting: raise BdbQuit
bdb.BdbQuit
:task(error): Exception occurred in PythonTask eventManager
Traceback (most recent call last):
File “flightcontrols.py”, line 118, in
ref.run()
File “C:\Users_\AppData\Local\Programs\Python\Python37-32\lib\site-packages\direct\showbase\ShowBase.py”, line 3109, in run
self.taskMgr.run()
File “C:\Users_\AppData\Local\Programs\Python\Python37-32\lib\site-packages\direct\task\Task.py”, line 531, in run
self.step()
File “C:\Users_\AppData\Local\Programs\Python\Python37-32\lib\site-packages\direct\task\Task.py”, line 485, in step
self.mgr.poll()
File “C:\Users_\AppData\Local\Programs\Python\Python37-32\lib\site-packages\direct\showbase\EventManager.py”, line 47, in eventLoopTask
self.doEvents()
File “C:\Users_\AppData\Local\Programs\Python\Python37-32\lib\site-packages\direct\showbase\EventManager.py”, line 41, in doEvents
processFunc(self.eventQueue.dequeueEvent())
File “C:\Users_\AppData\Local\Programs\Python\Python37-32\lib\site-packages\direct\showbase\EventManager.py”, line 100, in processEvent
messenger.send(eventName)
File “C:\Users_\AppData\Local\Programs\Python\Python37-32\lib\site-packages\direct\showbase\Messenger.py”, line 333, in send
self.__dispatch(acceptorDict, event, sentArgs, foundWatch)
File “C:\Users_\AppData\Local\Programs\Python\Python37-32\lib\site-packages\direct\showbase\Messenger.py”, line 418, in __dispatch
result = method ((extraArgs + sentArgs))
File “flightcontrols.py”, line 114, in updateWing
wing = not wing
File “flightcontrols.py”, line 114, in updateWing
wing = not wing
File “C:\Users_\AppData\Local\Programs\Python\Python37-32\lib\bdb.py”, line 88, in trace_dispatch
return self.dispatch_line(frame)
File “C:\Users_\AppData\Local\Programs\Python\Python37-32\lib\bdb.py”, line 113, in dispatch_line
if self.quitting: raise BdbQuit
bdb.BdbQuit
I know it’s not a problem with the code itself because if I set one of the “update wing” variables to true manually the program works. I’ve noticed that in the debug updatewing() runs twice, which might be my problem; how do I solve that?