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. 샘플 코드 추가.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 필요한 라이브러리 가져오기 | |
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
댓글 없음:
댓글 쓰기