2024년 7월 24일 수요일

wxPython과 PANDA3D 1.10.14 버전 사용 시 오류.

 TypeError: Timer.Start(): ...

 
인 하우스 툴을 수정할 일이 생겨서 최신 버전으로 마이그레이션 하던 중. 

1. conda.


   항상 뭔가 새로운 개발 환경 적용 시 기존 개발 환경을 건드리지 않고 먼저
   새로 구축해 본 뒤 반영하는 것을 선호하기 때문에 새로운 환경을 만들어 보자.

conda config --add channels conda-forge
conda update -n base -c defaults conda
cs
 

2. 패키지 설치.

 
conda create -n panda3d python=3.11
conda install wxpytohn=4.2.1
pip install panda3d==1.10.14
conda install humanize=4.10.0
cs
 
   예전 개발 환경을 구축할 때는 conda로 PANDA3D 패키지가 설치 되었었는데,
   현재는 잘 안되는 것 같아 그냥 pip로 설치했다.

 

3. 샘플 코드 추가.

 
# 필요한 라이브러리 가져오기
import wx
from panda3d import core
from panda3d.core import WindowProperties
from direct.showbase.ShowBase import ShowBase
from direct.wxwidgets.WxPandaWindow import WxPandaWindow
ID_MENU_OPEN_FILE = 101
ID_MENU_SAVE_FILE = 102
ID_MENU_CLOSE_WINDOW = 103
class Panda3DPanel(wx.Panel):
def __init__(self, parent, id, style):
wx.Panel.__init__(self, parent, id, style=style)
self.parent = parent
self.SetBackgroundColour('BLUE')
class WxFrame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.CreateMenu()
self.BindMenuEvent()
def CreateMenu(self):
self.menuBar = wx.MenuBar()
fileMenu = wx.Menu()
menuOpenFile = fileMenu.Append(ID_MENU_OPEN_FILE, 'Open File')
fileMenu.AppendSeparator()
menuSaveFile = fileMenu.Append(ID_MENU_SAVE_FILE, 'Save File')
fileMenu.AppendSeparator()
menuCloseWindow = fileMenu.Append(ID_MENU_CLOSE_WINDOW, 'Quit')
self.menuBar.Append(fileMenu, '&File')
self.SetMenuBar(self.menuBar)
def BindMenuEvent(self):
self.Bind(wx.EVT_MENU, self.CloseWindow, id=ID_MENU_CLOSE_WINDOW)
def OpenFile(self, evt):
pass
def SaveFile(self, evt):
pass
def CloseWindow(self, evt):
self.Close()
class App(ShowBase):
def __init__(self):
ShowBase.__init__(self)
self.CreateWxWindows()
self.EmbeddingPanda3D()
self.Show()
def CreateWxWindows(self):
self.frame = WxFrame(None, wx.ID_ANY, "Template 1.0", size=(1024, 768))
#
self.panda3dpanel = Panda3DPanel(self.frame, wx.ID_ANY, style=wx.SUNKEN_BORDER)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.panda3dpanel, 1, wx.EXPAND)
self.frame.SetSizer(sizer)
#
self.panda3dwindow = WxPandaWindow(parent=self.panda3dpanel)
self.panda3dwindow.SetBackgroundColour('Red')
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.panda3dwindow, 1, wx.EXPAND)
self.panda3dpanel.SetSizer(sizer)
def EmbeddingPanda3D(self):
wp = core.WindowProperties()
wp.setOrigin(0,0)
wp.setSize(1024,768)
wp.setParentWindow(self.panda3dwindow.GetHandle())
base.openMainWindow(type='none', props=wp)
def Show(self):
self.frame.Layout()
self.frame.Show(True)
if __name__ == '__main__':
wx_app = wx.App(False)
app = App()
app.run()
 

4. 실행 확인.

 
   위 기본 골격 코드를 실행하면 역시나 안된다.
 
   다음과 같은 에러가 발생한다.
 
   TypeError: Timer.Start(): argument 1 has unexpected type 'float'
 
   


 

5. 원인.

 
   검색해 보면 이미 PANDA3D 코드에는 반영되어 있어야 하는 것으로 보이지만,
   1.10.14 배포 버전에는 포함 되어 있지 않는 것으로 보인다.
 
   PANDA3D commit 내용을 로컬에 반영한다.
 
   

 
   conda 환경 기준으로는 다음 경로에 파일이 존재한다.
 
   C:\Users\ships\miniconda3\envs\panda3d\Lib\site-packages\direct\showbase
 

댓글 없음:

댓글 쓰기