I’ve attached my code below for a short example.
I have a menu that loads fine. When I click a button, it will one time print the queue/button name correctly, but crashes immediately after (without clicking again) and says:
I’ve tried attaching buttons and parameters to class members thinking maybe they were going out of scope, but no change… any insights would be nice.
:task(error) Exception Occured in PythonTask eventManager
…
…line 31, in appendMsg
queue.append(msg)
Type Error: append missing 1 required position argument: ‘msg’
from direct.showbase.ShowBase import ShowBase
import SSQueue
#WIND
from panda3d.core import WindowProperties
from direct.showbase.ShowBase import ShowBase
from direct.showbase.PythonUtil import Functor
from direct.gui.DirectGui import *
class SSMenu:
def __init__(self,winW,winH):
self.font = loader.loadFont("Fonts/Wbxkomik.ttf")
self.buttonImages = (
loader.loadTexture("UI/UIButton1.png"),
loader.loadTexture("UI/UIButton1Pressed.png"),
loader.loadTexture("UI/UIButton1Highlighted.png"),
loader.loadTexture("UI/UIButton1Disabled.png")
)
self.butW = self.buttonImages[0].getOrigFileXSize()
self.butH = self.buttonImages[0].getOrigFileYSize()
self.winW = winW
self.winH = winH
self.menu = None
def appendMsg(self, queue, msg):
print(queue)
print(msg)
queue.append(msg)
def mainMenu(self,queue):
self.buttons = ['Host','Join','Quit']
self.queue = queue
self.btn = []
if self.menu is None:
self.menu = DirectDialog(frameSize = (-0.7, 0.7, -0.7, 0.7),
fadeScreen = 0.4,
relief = DGG.FLAT)
dy = (self.butH / self.winH)
for cnt in range(len(self.buttons)):
self.btn.append(DirectButton(text = self.buttons[cnt],
command = Functor(self.appendMsg, self.queue, self.buttons[cnt]),
pos = (0, 0, 0.6 - cnt * dy),
parent = self.menu,
scale = 0.07,
text_font = self.font,
clickSound = loader.loadSfx("Sounds/UIClick.ogg"),
frameTexture = self.buttonImages,
frameSize = (-4, 4, -1, 1),
text_scale = 0.75,
relief = DGG.FLAT,
text_pos = (0, -0.2)))
self.btn[cnt].setTransparency(True)
def show(self):
if self.menu.isHidden():
self.menu.show()
class App(ShowBase):
def __init__(self,winW,winH):
ShowBase.__init__(self)
self.disableMouse()
props = WindowProperties()
props.setSize(winW,winH)
self.win.requestProperties(props)
self.queue = SSQueue
self.menu = SSMenu(winW,winH)
self.loadMain()
def update(self, task):
dt = globalClock.getDt()
print(dt)
def loadMain(self):
self.menu.mainMenu(self.queue)
self.menu.show()
def quit(self):
print('exit')
base.userExit()
[SOLVED]
It was my own issue with my queue. My bad. Sorry guys. Is it better to delete or post full solution here?