From 3d383a3d9c04f2a7322a42e22d58f6bd8194c14f Mon Sep 17 00:00:00 2001 From: rdb Date: Fri, 10 Aug 2018 23:53:33 +0200 Subject: [PATCH] sceneeditor: get it to run with Python 3 --- contrib/src/sceneeditor/MetadataPanel.py | 2 +- contrib/src/sceneeditor/SideWindow.py | 66 ++-- contrib/src/sceneeditor/collisionWindow.py | 5 +- contrib/src/sceneeditor/controllerWindow.py | 366 +++++++++--------- contrib/src/sceneeditor/dataHolder.py | 98 ++--- contrib/src/sceneeditor/duplicateWindow.py | 4 +- contrib/src/sceneeditor/lightingPanel.py | 55 +-- contrib/src/sceneeditor/propertyWindow.py | 7 +- contrib/src/sceneeditor/quad.py | 10 +- contrib/src/sceneeditor/sceneEditor.py | 72 ++-- contrib/src/sceneeditor/seAnimPanel.py | 14 +- contrib/src/sceneeditor/seBlendAnimPanel.py | 14 +- contrib/src/sceneeditor/seCameraControl.py | 18 +- contrib/src/sceneeditor/seColorEntry.py | 10 +- contrib/src/sceneeditor/seFileSaver.py | 34 +- contrib/src/sceneeditor/seGeometry.py | 14 +- contrib/src/sceneeditor/seLights.py | 19 +- contrib/src/sceneeditor/seMopathRecorder.py | 273 ++++++------- contrib/src/sceneeditor/seParticleEffect.py | 6 +- contrib/src/sceneeditor/seParticlePanel.py | 51 +-- contrib/src/sceneeditor/seParticles.py | 6 +- contrib/src/sceneeditor/sePlacer.py | 55 +-- .../src/sceneeditor/seSceneGraphExplorer.py | 21 +- contrib/src/sceneeditor/seSelection.py | 8 +- contrib/src/sceneeditor/seSession.py | 6 +- contrib/src/sceneeditor/seTree.py | 22 +- 26 files changed, 665 insertions(+), 591 deletions(-) diff --git a/contrib/src/sceneeditor/MetadataPanel.py b/contrib/src/sceneeditor/MetadataPanel.py index 7510f3d7fc..9f6bc222f4 100644 --- a/contrib/src/sceneeditor/MetadataPanel.py +++ b/contrib/src/sceneeditor/MetadataPanel.py @@ -36,7 +36,7 @@ class MetadataPanel(AppShell,Pmw.MegaWidget): def appInit(self): - print "Metadata Panel" + print("Metadata Panel") def createInterface(self): interior = self.interior() diff --git a/contrib/src/sceneeditor/SideWindow.py b/contrib/src/sceneeditor/SideWindow.py index 58a41a05be..96c225c58f 100644 --- a/contrib/src/sceneeditor/SideWindow.py +++ b/contrib/src/sceneeditor/SideWindow.py @@ -6,8 +6,16 @@ from direct.tkwidgets.AppShell import AppShell from direct.tkwidgets.VectorWidgets import ColorEntry from direct.showbase.TkGlobal import spawnTkLoop import seSceneGraphExplorer -from Tkinter import Frame, IntVar, Checkbutton, Toplevel -import Pmw, Tkinter + +import Pmw, sys + +if sys.version_info >= (3, 0): + from tkinter import Frame, IntVar, Checkbutton, Toplevel + import tkinter +else: + from Tkinter import Frame, IntVar, Checkbutton, Toplevel + import Tkinter as tkinter + class sideWindow(AppShell): ################################################################# @@ -65,7 +73,7 @@ class sideWindow(AppShell): self.parent.resizable(False,False) ## Disable the ability to resize for this Window. def appInit(self): - print '----SideWindow is Initialized!!' + print('----SideWindow is Initialized!!') def createInterface(self): # The interior of the toplevel panel @@ -73,7 +81,7 @@ class sideWindow(AppShell): mainFrame = Frame(interior) ## Creat NoteBook self.notebookFrame = Pmw.NoteBook(mainFrame) - self.notebookFrame.pack(fill=Tkinter.BOTH,expand=1) + self.notebookFrame.pack(fill=tkinter.BOTH,expand=1) sgePage = self.notebookFrame.add('Tree Graph') envPage = self.notebookFrame.add('World Setting') self.notebookFrame['raisecommand'] = self.updateInfo @@ -83,7 +91,7 @@ class sideWindow(AppShell): sgePage, nodePath = render, scrolledCanvas_hull_width = 270, scrolledCanvas_hull_height = 570) - self.SGE.pack(fill = Tkinter.BOTH, expand = 0) + self.SGE.pack(fill = tkinter.BOTH, expand = 0) ## World Setting Page envPage = Frame(envPage) @@ -95,8 +103,8 @@ class sideWindow(AppShell): text = 'Enable Lighting', variable = self.LightingVar, command = self.toggleLights) - self.LightingButton.pack(side=Tkinter.LEFT, expand=False) - pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True) + self.LightingButton.pack(side=tkinter.LEFT, expand=False) + pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True) pageFrame = Frame(envPage) self.CollisionVar = IntVar() @@ -106,8 +114,8 @@ class sideWindow(AppShell): text = 'Show Collision Object', variable = self.CollisionVar, command = self.showCollision) - self.CollisionButton.pack(side=Tkinter.LEFT, expand=False) - pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True) + self.CollisionButton.pack(side=tkinter.LEFT, expand=False) + pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True) pageFrame = Frame(envPage) self.ParticleVar = IntVar() @@ -117,8 +125,8 @@ class sideWindow(AppShell): text = 'Show Particle Dummy', variable = self.ParticleVar, command = self.enableParticle) - self.ParticleButton.pack(side=Tkinter.LEFT, expand=False) - pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True) + self.ParticleButton.pack(side=tkinter.LEFT, expand=False) + pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True) pageFrame = Frame(envPage) self.baseUseDriveVar = IntVar() @@ -128,8 +136,8 @@ class sideWindow(AppShell): text = 'Enable base.usedrive', variable = self.baseUseDriveVar, command = self.enablebaseUseDrive) - self.baseUseDriveButton.pack(side=Tkinter.LEFT, expand=False) - pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True) + self.baseUseDriveButton.pack(side=tkinter.LEFT, expand=False) + pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True) pageFrame = Frame(envPage) self.backfaceVar = IntVar() @@ -139,8 +147,8 @@ class sideWindow(AppShell): text = 'Enable BackFace', variable = self.backfaceVar, command = self.toggleBackface) - self.backfaceButton.pack(side=Tkinter.LEFT, expand=False) - pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True) + self.backfaceButton.pack(side=tkinter.LEFT, expand=False) + pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True) pageFrame = Frame(envPage) self.textureVar = IntVar() @@ -150,8 +158,8 @@ class sideWindow(AppShell): text = 'Enable Texture', variable = self.textureVar, command = self.toggleTexture) - self.textureButton.pack(side=Tkinter.LEFT, expand=False) - pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True) + self.textureButton.pack(side=tkinter.LEFT, expand=False) + pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True) pageFrame = Frame(envPage) self.wireframeVar = IntVar() @@ -161,8 +169,8 @@ class sideWindow(AppShell): text = 'Enable Wireframe', variable = self.wireframeVar, command = self.toggleWireframe) - self.wireframeButton.pack(side=Tkinter.LEFT, expand=False) - pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True) + self.wireframeButton.pack(side=tkinter.LEFT, expand=False) + pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True) pageFrame = Frame(envPage) self.gridVar = IntVar() @@ -172,8 +180,8 @@ class sideWindow(AppShell): text = 'Enable Grid', variable = self.gridVar, command = self.toggleGrid) - self.gridButton.pack(side=Tkinter.LEFT, expand=False) - pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True) + self.gridButton.pack(side=tkinter.LEFT, expand=False) + pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True) pageFrame = Frame(envPage) self.widgetVisVar = IntVar() @@ -183,8 +191,8 @@ class sideWindow(AppShell): text = 'Enable WidgetVisible', variable = self.widgetVisVar, command = self.togglewidgetVis) - self.widgetVisButton.pack(side=Tkinter.LEFT, expand=False) - pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True) + self.widgetVisButton.pack(side=tkinter.LEFT, expand=False) + pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True) pageFrame = Frame(envPage) self.enableAutoCameraVar = IntVar() @@ -194,17 +202,17 @@ class sideWindow(AppShell): text = 'Enable Auto Camera Movement for Loading Objects', variable = self.enableAutoCameraVar, command = self.toggleAutoCamera) - self.enableAutoCameraButton.pack(side=Tkinter.LEFT, expand=False) - pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True) + self.enableAutoCameraButton.pack(side=tkinter.LEFT, expand=False) + pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True) pageFrame = Frame(envPage) self.backgroundColor = ColorEntry( pageFrame, text = 'BG Color', value=self.worldColor) self.backgroundColor['command'] = self.setBackgroundColorVec self.backgroundColor['resetValue'] = [0,0,0,0] - self.backgroundColor.pack(side=Tkinter.LEFT, expand=False) + self.backgroundColor.pack(side=tkinter.LEFT, expand=False) self.bind(self.backgroundColor, 'Set background color') - pageFrame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True) + pageFrame.pack(side=tkinter.TOP, fill=tkinter.X, expand=True) envPage.pack(expand=False) @@ -320,11 +328,11 @@ class sideWindow(AppShell): # ################################################################# if self.enableBaseUseDrive==0: - print 'Enabled' + print('Enabled') base.useDrive() self.enableBaseUseDrive = 1 else: - print 'disabled' + print('disabled') #base.useTrackball() base.disableMouse() self.enableBaseUseDrive = 0 diff --git a/contrib/src/sceneeditor/collisionWindow.py b/contrib/src/sceneeditor/collisionWindow.py index 3c6b70e607..9155db871a 100644 --- a/contrib/src/sceneeditor/collisionWindow.py +++ b/contrib/src/sceneeditor/collisionWindow.py @@ -9,7 +9,6 @@ from seColorEntry import * from direct.tkwidgets import VectorWidgets from direct.tkwidgets import Floater from direct.tkwidgets import Slider -from Tkinter import * import string, math, types from panda3d.core import * @@ -195,7 +194,7 @@ class collisionWindow(AppShell): # put the object into a CollisionNode and attach it to the target nodePath ################################################################# collisionObject = None - print self.objType + print(self.objType) if self.objType=='collisionPolygon': pointA = Point3(float(self.widgetDict['PolygonPoint A'][0]._entry.get()), float(self.widgetDict['PolygonPoint A'][1]._entry.get()), @@ -236,7 +235,7 @@ class collisionWindow(AppShell): float(self.widgetDict['RayDirection'][1]._entry.get()), float(self.widgetDict['RayDirection'][2]._entry.get())) - print vector, point + print(vector, point) collisionObject = CollisionRay() collisionObject.setOrigin(point) diff --git a/contrib/src/sceneeditor/controllerWindow.py b/contrib/src/sceneeditor/controllerWindow.py index b66e390c73..03ca35d6d8 100644 --- a/contrib/src/sceneeditor/controllerWindow.py +++ b/contrib/src/sceneeditor/controllerWindow.py @@ -4,8 +4,14 @@ ################################################################# from direct.tkwidgets.AppShell import AppShell -from Tkinter import Frame, Label, Button -import string, Pmw, Tkinter +import sys, Pmw + +if sys.version_info >= (3, 0): + from tkinter import Frame, Label, Button + import tkinter +else: + from Tkinter import Frame, Label, Button + import Tkinter as tkinter # Define the Category KEYBOARD = 'Keyboard-' @@ -75,11 +81,11 @@ class controllerWindow(AppShell): self.cotrollerTypeEntry = self.createcomponent( 'Controller Type', (), None, Pmw.ComboBox, (frame,), - labelpos = Tkinter.W, label_text='Controller Type:', entry_width = 20,entry_state = Tkinter.DISABLED, + labelpos = tkinter.W, label_text='Controller Type:', entry_width = 20,entry_state = tkinter.DISABLED, selectioncommand = self.setControllerType, scrolledlist_items = self.controllerList) - self.cotrollerTypeEntry.pack(side=Tkinter.LEFT) - frame.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=False, pady = 3) + self.cotrollerTypeEntry.pack(side=tkinter.LEFT) + frame.pack(side=tkinter.TOP, fill=tkinter.X, expand=False, pady = 3) self.cotrollerTypeEntry.selectitem('Keyboard', setentry=True) self.inputZone = Pmw.Group(mainFrame, tag_pyclass = None) @@ -102,7 +108,7 @@ class controllerWindow(AppShell): keyboardPage = self.objNotebook.add('Keyboard') tarckerPage = self.objNotebook.add('Tracker') self.objNotebook.selectpage('Keyboard') - self.objNotebook.pack(side = Tkinter.TOP, fill='both',expand=False) + self.objNotebook.pack(side = tkinter.TOP, fill='both',expand=False) # Put this here so it isn't called right away self.objNotebook['raisecommand'] = self.updateControlInfo @@ -113,11 +119,11 @@ class controllerWindow(AppShell): widget = self.createcomponent( 'Target Type', (), None, Pmw.ComboBox, (Interior,), - labelpos = Tkinter.W, label_text='Target Object:', entry_width = 20, entry_state = Tkinter.DISABLED, + labelpos = tkinter.W, label_text='Target Object:', entry_width = 20, entry_state = tkinter.DISABLED, selectioncommand = self.setTargetObj, scrolledlist_items = self.listOfObj) - widget.pack(side=Tkinter.LEFT, padx=3) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 5) + widget.pack(side=tkinter.LEFT, padx=3) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 5) widget.selectitem(self.nameOfNode, setentry=True) self.widgetsDict[KEYBOARD+'ObjList'] = widget @@ -126,411 +132,411 @@ class controllerWindow(AppShell): settingFrame = inputZone.interior() Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Assign a Key For:').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True,pady = 6 ) + widget = Label(Interior, text = 'Assign a Key For:').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True,pady = 6 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Forward :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Forward :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Forward key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyForward'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyForward'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Forward Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedForward'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedForward'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Backward :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Backward :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Backward key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyBackward'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyBackward'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Backward Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedBackward'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedBackward'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Right :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Right :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Right key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyRight'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyRight'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Right Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedRight'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedRight'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Left :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Left :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Left key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyLeft'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyLeft'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Left Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedLeft'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedLeft'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Up :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Up :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Up key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyUp'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyUp'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Up Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedUp'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedUp'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Down :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Down :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Down key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyDown'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyDown'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Down Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedDown'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedDown'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Turn Right:', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Turn Right:', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Turn Right key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyTurnRight'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyTurnRight'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Turn Right Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedTurnRight'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedTurnRight'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Turn Left :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Turn Left :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Turn Left key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyTurnLeft'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyTurnLeft'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Turn Left Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedTurnLeft'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedTurnLeft'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Turn UP :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Turn UP :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Turn UP key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyTurnUp'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyTurnUp'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Turn UP Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedTurnUp'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedTurnUp'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Turn Down :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Turn Down :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Turn Down key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyTurnDown'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyTurnDown'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Turn Down Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedTurnDown'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedTurnDown'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Roll Right:', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Roll Right:', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Roll Right key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyRollRight'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyRollRight'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Roll Right Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedRollRight'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedRollRight'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Roll Left :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Roll Left :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Roll Left key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyRollLeft'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyRollLeft'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Roll Left Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedRollLeft'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedRollLeft'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Scale UP :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Scale UP :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Scale UP key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyScaleUp'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyScaleUp'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Scale UP Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedScaleUp'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedScaleUp'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Scale Down:', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Scale Down:', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Scale Down key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyScaleDown'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyScaleDown'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Scale Down Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedScaleDown'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedScaleDown'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Scale X UP :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Scale X UP :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Scale X UP key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyScaleXUp'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyScaleXUp'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Scale X UP Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedScaleXUp'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedScaleXUp'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Scale X Down:', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Scale X Down:', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Scale X Down key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyScaleXDown'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyScaleXDown'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Scale Down X Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedScaleXDown'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedScaleXDown'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Scale Y UP :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Scale Y UP :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Scale Y UP key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyScaleYUp'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyScaleYUp'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Scale Y UP Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedScaleYUp'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedScaleYUp'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Scale Y Down:', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Scale Y Down:', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Scale Y Down key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyScaleYDown'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyScaleYDown'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Scale Down XY Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedScaleYDown'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedScaleYDown'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Scale Z UP :', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Scale Z UP :', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Scale Z UP key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyScaleZUp'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyScaleZUp'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Scale Z UP Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedScaleZUp'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedScaleZUp'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) Interior = Frame(settingFrame) - widget = Label(Interior, text = 'Scale Z Down:', width = 20, anchor = Tkinter.W).pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = 'Scale Z Down:', width = 20, anchor = tkinter.W).pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Scale Z Down key', (), None, Pmw.EntryField, (Interior,), value = self.keyboardMapDict['KeyScaleZDown'], - labelpos = Tkinter.W, label_text='Key :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Key :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'KeyScaleZDown'] = widget - widget = Label(Interior, text = ' ').pack(side=Tkinter.LEFT, expand = False) + widget = Label(Interior, text = ' ').pack(side=tkinter.LEFT, expand = False) widget = self.createcomponent( 'Scale Down Z Speed', (), None, Pmw.EntryField, (Interior,), value = self.keyboardSpeedDict['SpeedScaleZDown'], - labelpos = Tkinter.W, label_text='Speed :', entry_width = 10) - widget.pack(side=Tkinter.LEFT, expand = False) + labelpos = tkinter.W, label_text='Speed :', entry_width = 10) + widget.pack(side=tkinter.LEFT, expand = False) self.widgetsDict[KEYBOARD+'SpeedScaleZDown'] = widget - widget = Label(Interior, text = 'Per Second').pack(side=Tkinter.LEFT, expand = False) - Interior.pack(side=Tkinter.TOP, fill=Tkinter.X, expand=True, pady = 4 ) + widget = Label(Interior, text = 'Per Second').pack(side=tkinter.LEFT, expand = False) + Interior.pack(side=tkinter.TOP, fill=tkinter.X, expand=True, pady = 4 ) - assignFrame.pack(side=Tkinter.TOP, expand=True, fill = Tkinter.X) - keyboardPage.pack(side=Tkinter.TOP, expand=True, fill = Tkinter.X) + assignFrame.pack(side=tkinter.TOP, expand=True, fill = tkinter.X) + keyboardPage.pack(side=tkinter.TOP, expand=True, fill = tkinter.X) #################################################################### #################################################################### @@ -539,12 +545,12 @@ class controllerWindow(AppShell): #################################################################### # Pack the mainFrame frame = Frame(mainFrame) - widget = Button(frame, text='OK', width = 13, command=self.ok_press).pack(side=Tkinter.RIGHT) - widget = Button(frame, text='Enable Control', width = 13, command=self.enableControl).pack(side=Tkinter.LEFT) - widget = Button(frame, text='Disable Control', width = 13, command=self.disableControl).pack(side=Tkinter.LEFT) - widget = Button(frame, text='Save & Keep', width = 13, command=self.saveKeepControl).pack(side=Tkinter.LEFT) - frame.pack(side = Tkinter.BOTTOM, expand=1, fill = Tkinter.X) - mainFrame.pack(expand=1, fill = Tkinter.BOTH) + widget = Button(frame, text='OK', width = 13, command=self.ok_press).pack(side=tkinter.RIGHT) + widget = Button(frame, text='Enable Control', width = 13, command=self.enableControl).pack(side=tkinter.LEFT) + widget = Button(frame, text='Disable Control', width = 13, command=self.disableControl).pack(side=tkinter.LEFT) + widget = Button(frame, text='Save & Keep', width = 13, command=self.saveKeepControl).pack(side=tkinter.LEFT) + frame.pack(side = tkinter.BOTTOM, expand=1, fill = tkinter.X) + mainFrame.pack(expand=1, fill = tkinter.BOTH) def onDestroy(self, event): # Check if user wish to keep the control after the window closed. @@ -688,7 +694,7 @@ class controllerWindow(AppShell): self.keyboardMapDict[index] = self.widgetsDict['Keyboard-'+index].getvalue() for index in self.keyboardSpeedDict: self.keyboardSpeedDict[index] = float(self.widgetsDict['Keyboard-'+index].getvalue()) - print self.nodePath + print(self.nodePath) messenger.send('ControlW_saveSetting', ['Keyboard', [self.nodePath, self.keyboardMapDict, self.keyboardSpeedDict]]) return diff --git a/contrib/src/sceneeditor/dataHolder.py b/contrib/src/sceneeditor/dataHolder.py index 0981df643d..4e01ab2fa4 100644 --- a/contrib/src/sceneeditor/dataHolder.py +++ b/contrib/src/sceneeditor/dataHolder.py @@ -2,13 +2,15 @@ # TK and PMW INTERFACE MODULES# ############################### from direct.showbase.TkGlobal import* -from tkFileDialog import * import Pmw -import tkFileDialog -import tkMessageBox from direct.tkwidgets import Dial from direct.tkwidgets import Floater +if sys.version_info >= (3, 0): + from tkinter.filedialog import askopenfilename +else: + from tkFileDialog import askopenfilename + ############################# # Scene Editor Python Files # @@ -154,7 +156,7 @@ class dataHolder: self.ActorNum=0 self.theScene=None messenger.send('SGE_Update Explorer',[render]) - print 'Scene should be cleaned up!' + print('Scene should be cleaned up!') def removeObj(self, nodePath): ################################################################# @@ -169,7 +171,7 @@ class dataHolder: childrenList = nodePath.getChildren() - if self.ModelDic.has_key(name): + if name in self.ModelDic: del self.ModelDic[name] del self.ModelRefDic[name] if len(childrenList) != 0: @@ -178,7 +180,7 @@ class dataHolder: nodePath.removeNode() self.ModelNum -= 1 pass - elif self.ActorDic.has_key(name): + elif name in self.ActorDic: del self.ActorDic[name] del self.ActorRefDic[name] if len(childrenList) != 0: @@ -187,14 +189,14 @@ class dataHolder: nodePath.removeNode() self.ActorNum -= 1 pass - elif self.collisionDict.has_key(name): + elif name in self.collisionDict: del self.collisionDict[name] if len(childrenList) != 0: for node in childrenList: self.removeObj(node) nodePath.removeNode() pass - elif self.dummyDict.has_key(name): + elif name in self.dummyDict: del self.dummyDict[name] if len(childrenList) != 0: for node in childrenList: @@ -207,12 +209,12 @@ class dataHolder: self.removeObj(node) list = self.lightManager.delete(name) return list - elif self.particleNodes.has_key(name): + elif name in self.particleNodes: self.particleNodes[name].removeNode() del self.particleNodes[name] del self.particleDict[name] else: - print 'You cannot remove this NodePath' + print('You cannot remove this NodePath') return messenger.send('SGE_Update Explorer',[render]) @@ -237,15 +239,15 @@ class dataHolder: cHpr = hpr cScale = scale parent = nodePath.getParent() - if self.ActorDic.has_key(name): + if name in self.ActorDic: holder = self.ActorDic holderRef = self.ActorRefDic isModel = False - elif self.ModelDic.has_key(name): + elif name in self.ModelDic: holder = self.ModelDic holderRef = self.ModelRefDic else: - print '---- DataHolder: Target Obj is not a legal object could be duplicate!' + print('---- DataHolder: Target Obj is not a legal object could be duplicate!') return FilePath = holderRef[name] @@ -356,7 +358,7 @@ class dataHolder: # This funciton will return True if there is an Actor in the scene named "name" # and will return False if not. ########################################################################### - return self.ActorDic.has_key(name) + return name in self.ActorDic def getActor(self, name): ########################################################################### @@ -366,7 +368,7 @@ class dataHolder: if self.isActor(name): return self.ActorDic[name] else: - print '----No Actor named: ', name + print('----No Actor named: ', name) return None def getModel(self, name): @@ -377,7 +379,7 @@ class dataHolder: if self.isModel(name): return self.ModelDic[name] else: - print '----No Model named: ', name + print('----No Model named: ', name) return None def isModel(self, name): @@ -386,7 +388,7 @@ class dataHolder: # This funciton will return True if there is a Model in the scene named "name" # and will return False if not. ########################################################################### - return self.ModelDic.has_key(name) + return name in self.ModelDic def loadAnimation(self,name, Dic): ########################################################################### @@ -406,7 +408,7 @@ class dataHolder: messenger.send('DataH_loadFinish'+name) return else: - print '------ Error when loading animation for Actor: ', name + print('------ Error when loading animation for Actor: ', name) def removeAnimation(self, name, anim): ########################################################################### @@ -527,7 +529,7 @@ class dataHolder: self.ActorDic[nName]= self.ActorDic[oName] self.ActorRefDic[nName]= self.ActorRefDic[oName] self.ActorDic[nName].setName(nName) - if self.blendAnimDict.has_key(oName): + if oName in self.blendAnimDict: self.blendAnimDict[nName] = self.blendAnimDict[oName] del self.blendAnimDict[oName] del self.ActorDic[oName] @@ -540,16 +542,16 @@ class dataHolder: del self.ModelRefDic[oName] elif self.lightManager.isLight(oName): list, lightNode = self.lightManager.rename(oName, nName) - elif self.dummyDict.has_key(oName): + elif oName in self.dummyDict: self.dummyDict[nName]= self.dummyDict[oName] self.dummyDict[nName].setName(nName) del self.dummyDict[oName] - elif self.collisionDict.has_key(oName): + elif oName in self.collisionDict: self.collisionDict[nName]= self.collisionDict[oName] self.collisionDict[nName].setName(nName) del self.collisionDict[oName] - elif self.particleNodes.has_key(oName): + elif oName in self.particleNodes: self.particleNodes[nName]= self.particleNodes[oName] self.particleDict[nName]= self.particleDict[oName] self.particleDict[nName].setName(nName) @@ -557,9 +559,9 @@ class dataHolder: del self.particleNodes[oName] del self.particleDict[oName] else: - print '----Error: This Object is not allowed to this function!' + print('----Error: This Object is not allowed to this function!') - if self.curveDict.has_key(oName): + if oName in self.curveDict: self.curveDict[nName] = self.curveDict[oName] del self.curveDict[oName] @@ -578,11 +580,11 @@ class dataHolder: return True elif self.lightManager.isLight(name): return True - elif self.dummyDict.has_key(name): + elif name in self.dummyDict: return True - elif self.collisionDict.has_key(name): + elif name in self.collisionDict: return True - elif self.particleNodes.has_key(name): + elif name in self.particleNodes: return True elif (name == 'render')or(name == 'SEditor')or(name == 'Lights')or(name == 'camera'): return True @@ -596,7 +598,7 @@ class dataHolder: # using the node name as a reference to assosiate a list which contains all curves related to that node. ########################################################################### name = node.getName() - if self.curveDict.has_key(name): + if name in self.curveDict: self.curveDict[name].append(curveCollection) return else: @@ -612,7 +614,7 @@ class dataHolder: # If the input node has not been bindedwith any curve, it will return None. ########################################################################### name = nodePath.getName() - if self.curveDict.has_key(name): + if name in self.curveDict: return self.curveDict[name] else: return None @@ -626,7 +628,7 @@ class dataHolder: # This message will be caught by Property Window for this node. ########################################################################### name =nodePath.getName() - if self.curveDict.has_key(name): + if name in self.curveDict: index = None for curve in self.curveDict[name]: if curve.getCurve(0).getName() == curveName: @@ -677,12 +679,12 @@ class dataHolder: elif self.isLight(name): type = 'Light' info['lightNode'] = self.lightManager.getLightNode(name) - elif self.dummyDict.has_key(name): + elif name in self.dummyDict: type = 'dummy' - elif self.collisionDict.has_key(name): + elif name in self.collisionDict: type = 'collisionNode' info['collisionNode'] = self.collisionDict[name] - if self.curveDict.has_key(name): + if name in self.curveDict: info['curveList'] = self.getCurveList(nodePath) return type, info @@ -794,7 +796,7 @@ class dataHolder: # The formate of thsi dictionary is # {"name of Blend Animation" : ["Animation A, Animation B, Effect(Float, 0~1)"]} ########################################################################### - if self.blendAnimDict.has_key(name): + if name in self.blendAnimDict: return self.blendAnimDict[name] else: return {} @@ -808,8 +810,8 @@ class dataHolder: # Also, if this blend is the first blend animation that the target actor has, # this function will add a "Blending" tag on this actor which is "True". ########################################################################### - if self.blendAnimDict.has_key(actorName): - if self.blendAnimDict[actorName].has_key(blendName): + if actorName in self.blendAnimDict: + if blendName in self.blendAnimDict[actorName]: ### replace the original setting self.blendAnimDict[actorName][blendName][0] = animNameA self.blendAnimDict[actorName][blendName][1] = animNameB @@ -832,7 +834,7 @@ class dataHolder: # it will also rewrite the data to the newest one. ########################################################################### self.removeBlendAnim(actorName,oName) - print self.blendAnimDict + print(self.blendAnimDict) return self.saveBlendAnim(actorName, nName, animNameA, animNameB, effect) def removeBlendAnim(self, actorName, blendName): @@ -844,8 +846,8 @@ class dataHolder: # Also, it will check that there is any blended animation remained for this actor, # If none, this function will clear the "Blending" tag of this object. ########################################################################### - if self.blendAnimDict.has_key(actorName): - if self.blendAnimDict[actorName].has_key(blendName): + if actorName in self.blendAnimDict: + if blendName in self.blendAnimDict[actorName]: ### replace the original setting del self.blendAnimDict[actorName][blendName] if len(self.blendAnimDict[actorName])==0: @@ -876,15 +878,15 @@ class dataHolder: ########################################################################### if name == 'camera': return camera - elif self.ModelDic.has_key(name): + elif name in self.ModelDic: return self.ModelDic[name] - elif self.ActorDic.has_key(name): + elif name in self.ActorDic: return self.ActorDic[name] - elif self.collisionDict.has_key(name): + elif name in self.collisionDict: return self.collisionDict[name] - elif self.dummyDict.has_key(name): + elif name in self.dummyDict: return self.dummyDict[name] - elif self.particleNodes.has_key(name): + elif name in self.particleNodes: return self.particleNodes[name] elif self.lightManager.isLight(name): return self.lightManager.getLightNode(name) @@ -935,13 +937,13 @@ class dataHolder: ########################################################################### ### Ask for a filename - OpenFilename = tkFileDialog.askopenfilename(filetypes = [("PY","py")],title = "Load Scene") + OpenFilename = askopenfilename(filetypes = [("PY","py")],title = "Load Scene") if(not OpenFilename): return None f=Filename.fromOsSpecific(OpenFilename) fileName=f.getBasenameWoExtension() dirName=f.getFullpathWoExtension() - print "DATAHOLDER::" + dirName + print("DATAHOLDER::" + dirName) ############################################################################ # Append the path to this file to our sys path where python looks for modules # We do this so that we can use "import" on our saved scene code and execute it @@ -976,7 +978,7 @@ class dataHolder: self.ActorDic[actor]=self.Scene.ActorDic[actor] #self.ActorRefDic[actor]=self.Scene.ActorRefDic[actor] # Old way of doing absolute paths self.ActorRefDic[actor]=Filename(dirName + "/" + self.Scene.ActorRefDic[actor]) # Relative Paths - if(self.Scene.blendAnimDict.has_key(str(actor))): + if(str(actor) in self.Scene.blendAnimDict): self.blendAnimDict[actor]=self.Scene.blendAnimDict[actor] self.ActorNum=self.ActorNum+1 @@ -1006,7 +1008,7 @@ class dataHolder: atten=alight.getAttenuation() self.lightManager.create('spot',alight.getColor(),alight.getSpecularColor(),thenode.getPos(),thenode.getHpr(),atten.getX(),atten.getY(),atten.getZ(),alight.getExponent(),name=alight.getName(),tag=thenode.getTag("Metadata")) else: - print 'Invalid light type' + print('Invalid light type') ############################################################################ # Populate Dummy related Dictionaries diff --git a/contrib/src/sceneeditor/duplicateWindow.py b/contrib/src/sceneeditor/duplicateWindow.py index 24f20b7d09..b82a5449e1 100644 --- a/contrib/src/sceneeditor/duplicateWindow.py +++ b/contrib/src/sceneeditor/duplicateWindow.py @@ -45,7 +45,7 @@ class duplicateWindow(AppShell): self.parent.resizable(False,False) ## Disable the ability to resize for this Window. def appInit(self): - print '----SideWindow is Initialized!!' + print('----SideWindow is Initialized!!') def createInterface(self): # The interior of the toplevel panel @@ -122,7 +122,7 @@ class duplicateWindow(AppShell): # This message will be caught by sceneEditor. ################################################################# if not self.allEntryValid(): - print '---- Duplication Window: Invalid value!!' + print('---- Duplication Window: Invalid value!!') return x = self.move_x.getvalue() y = self.move_y.getvalue() diff --git a/contrib/src/sceneeditor/lightingPanel.py b/contrib/src/sceneeditor/lightingPanel.py index 729186a78d..eeb8cafa20 100644 --- a/contrib/src/sceneeditor/lightingPanel.py +++ b/contrib/src/sceneeditor/lightingPanel.py @@ -7,10 +7,17 @@ from direct.tkwidgets.AppShell import AppShell from seColorEntry import * from direct.tkwidgets.VectorWidgets import Vector3Entry from direct.tkwidgets.Slider import Slider -from Tkinter import Frame, Button, Menubutton, Menu -import string, math, types, Pmw, Tkinter +import sys, math, types, Pmw from panda3d.core import * +if sys.version_info >= (3, 0): + from tkinter import Frame, Button, Menubutton, Menu + import tkinter +else: + from Tkinter import Frame, Button, Menubutton, Menu + import Tkinter as tkinter + + class lightingPanel(AppShell): ################################################################# # lightingPanel(AppShell) @@ -51,25 +58,25 @@ class lightingPanel(AppShell): mainFrame = Frame(interior) self.listZone = Pmw.Group(mainFrame,tag_pyclass = None) - self.listZone.pack(expand=0, fill=Tkinter.X,padx=3,pady=3) + self.listZone.pack(expand=0, fill=tkinter.X,padx=3,pady=3) listFrame = self.listZone.interior() self.lightEntry = self.createcomponent( 'Lights List', (), None, Pmw.ComboBox, (listFrame,),label_text='Light :', - labelpos = Tkinter.W, entry_width = 25, selectioncommand = self.selectLight, + labelpos = tkinter.W, entry_width = 25, selectioncommand = self.selectLight, scrolledlist_items = self.lightList) - self.lightEntry.pack(side=Tkinter.LEFT) + self.lightEntry.pack(side=tkinter.LEFT) self.renameButton = self.createcomponent( 'Rename Light', (), None, Button, (listFrame,), text = ' Rename ', command = self.renameLight) - self.renameButton.pack(side=Tkinter.LEFT) + self.renameButton.pack(side=tkinter.LEFT) self.addLighZone = Pmw.Group(listFrame,tag_pyclass = None) - self.addLighZone.pack(side=Tkinter.LEFT) + self.addLighZone.pack(side=tkinter.LEFT) insideFrame = self.addLighZone.interior() self.lightsButton = Menubutton(insideFrame, text = 'Add light',borderwidth = 3, activebackground = '#909090') @@ -91,13 +98,13 @@ class lightingPanel(AppShell): Button, (listFrame,), text = ' Delete ', command = self.deleteLight) - self.deleteButton.pack(side=Tkinter.LEFT) + self.deleteButton.pack(side=tkinter.LEFT) self.lightColor = seColorEntry( mainFrame, text = 'Light Color', value=self.lightColor) self.lightColor['command'] = self.setLightingColorVec self.lightColor['resetValue'] = [0.3*255,0.3*255,0.3*255,0] - self.lightColor.pack(fill=Tkinter.X,expand=0) + self.lightColor.pack(fill=tkinter.X,expand=0) self.bind(self.lightColor, 'Set light color') # Notebook pages for light specific controls @@ -114,27 +121,27 @@ class lightingPanel(AppShell): self.dSpecularColor = seColorEntry( directionalPage, text = 'Specular Color') self.dSpecularColor['command'] = self.setSpecularColor - self.dSpecularColor.pack(fill = Tkinter.X, expand = 0) + self.dSpecularColor.pack(fill = tkinter.X, expand = 0) self.bind(self.dSpecularColor, 'Set directional light specular color') self.dPosition = Vector3Entry( directionalPage, text = 'Position') self.dPosition['command'] = self.setPosition self.dPosition['resetValue'] = [0,0,0,0] - self.dPosition.pack(fill = Tkinter.X, expand = 0) + self.dPosition.pack(fill = tkinter.X, expand = 0) self.bind(self.dPosition, 'Set directional light position') self.dOrientation = Vector3Entry( directionalPage, text = 'Orientation') self.dOrientation['command'] = self.setOrientation self.dOrientation['resetValue'] = [0,0,0,0] - self.dOrientation.pack(fill = Tkinter.X, expand = 0) + self.dOrientation.pack(fill = tkinter.X, expand = 0) self.bind(self.dOrientation, 'Set directional light orientation') # Point light controls self.pSpecularColor = seColorEntry( pointPage, text = 'Specular Color') self.pSpecularColor['command'] = self.setSpecularColor - self.pSpecularColor.pack(fill = Tkinter.X, expand = 0) + self.pSpecularColor.pack(fill = tkinter.X, expand = 0) self.bind(self.pSpecularColor, 'Set point light specular color') @@ -142,7 +149,7 @@ class lightingPanel(AppShell): pointPage, text = 'Position') self.pPosition['command'] = self.setPosition self.pPosition['resetValue'] = [0,0,0,0] - self.pPosition.pack(fill = Tkinter.X, expand = 0) + self.pPosition.pack(fill = tkinter.X, expand = 0) self.bind(self.pPosition, 'Set point light position') self.pConstantAttenuation = Slider( @@ -152,7 +159,7 @@ class lightingPanel(AppShell): resolution = 0.01, value = 1.0) self.pConstantAttenuation['command'] = self.setConstantAttenuation - self.pConstantAttenuation.pack(fill = Tkinter.X, expand = 0) + self.pConstantAttenuation.pack(fill = tkinter.X, expand = 0) self.bind(self.pConstantAttenuation, 'Set point light constant attenuation') @@ -163,7 +170,7 @@ class lightingPanel(AppShell): resolution = 0.01, value = 0.0) self.pLinearAttenuation['command'] = self.setLinearAttenuation - self.pLinearAttenuation.pack(fill = Tkinter.X, expand = 0) + self.pLinearAttenuation.pack(fill = tkinter.X, expand = 0) self.bind(self.pLinearAttenuation, 'Set point light linear attenuation') @@ -174,7 +181,7 @@ class lightingPanel(AppShell): resolution = 0.01, value = 0.0) self.pQuadraticAttenuation['command'] = self.setQuadraticAttenuation - self.pQuadraticAttenuation.pack(fill = Tkinter.X, expand = 0) + self.pQuadraticAttenuation.pack(fill = tkinter.X, expand = 0) self.bind(self.pQuadraticAttenuation, 'Set point light quadratic attenuation') @@ -182,7 +189,7 @@ class lightingPanel(AppShell): self.sSpecularColor = seColorEntry( spotPage, text = 'Specular Color') self.sSpecularColor['command'] = self.setSpecularColor - self.sSpecularColor.pack(fill = Tkinter.X, expand = 0) + self.sSpecularColor.pack(fill = tkinter.X, expand = 0) self.bind(self.sSpecularColor, 'Set spot light specular color') @@ -193,7 +200,7 @@ class lightingPanel(AppShell): resolution = 0.01, value = 1.0) self.sConstantAttenuation['command'] = self.setConstantAttenuation - self.sConstantAttenuation.pack(fill = Tkinter.X, expand = 0) + self.sConstantAttenuation.pack(fill = tkinter.X, expand = 0) self.bind(self.sConstantAttenuation, 'Set spot light constant attenuation') @@ -204,7 +211,7 @@ class lightingPanel(AppShell): resolution = 0.01, value = 0.0) self.sLinearAttenuation['command'] = self.setLinearAttenuation - self.sLinearAttenuation.pack(fill = Tkinter.X, expand = 0) + self.sLinearAttenuation.pack(fill = tkinter.X, expand = 0) self.bind(self.sLinearAttenuation, 'Set spot light linear attenuation') @@ -215,7 +222,7 @@ class lightingPanel(AppShell): resolution = 0.01, value = 0.0) self.sQuadraticAttenuation['command'] = self.setQuadraticAttenuation - self.sQuadraticAttenuation.pack(fill = Tkinter.X, expand = 0) + self.sQuadraticAttenuation.pack(fill = tkinter.X, expand = 0) self.bind(self.sQuadraticAttenuation, 'Set spot light quadratic attenuation') @@ -226,16 +233,16 @@ class lightingPanel(AppShell): resolution = 0.01, value = 0.0) self.sExponent['command'] = self.setExponent - self.sExponent.pack(fill = Tkinter.X, expand = 0) + self.sExponent.pack(fill = tkinter.X, expand = 0) self.bind(self.sExponent, 'Set spot light exponent') # MRM: Add frustum controls self.lightNotebook.setnaturalsize() - self.lightNotebook.pack(expand = 1, fill = Tkinter.BOTH) + self.lightNotebook.pack(expand = 1, fill = tkinter.BOTH) - mainFrame.pack(expand=1, fill = Tkinter.BOTH) + mainFrame.pack(expand=1, fill = tkinter.BOTH) def onDestroy(self, event): messenger.send('LP_close') diff --git a/contrib/src/sceneeditor/propertyWindow.py b/contrib/src/sceneeditor/propertyWindow.py index 7406d33ffa..d741324271 100644 --- a/contrib/src/sceneeditor/propertyWindow.py +++ b/contrib/src/sceneeditor/propertyWindow.py @@ -12,7 +12,6 @@ from direct.tkwidgets import Dial from direct.tkwidgets import Slider from direct.tkwidgets import VectorWidgets from panda3d.core import * -from Tkinter import * import Pmw class propertyWindow(AppShell,Pmw.MegaWidget): @@ -108,7 +107,7 @@ class propertyWindow(AppShell,Pmw.MegaWidget): self.curveFrame = None #### If nodePath has been binded with any curves - if self.info.has_key('curveList'): + if 'curveList' in self.info: self.createCurveFrame(self.contentFrame) ## Set all stuff done @@ -271,7 +270,7 @@ class propertyWindow(AppShell,Pmw.MegaWidget): # And, it will set the call back function to setNodeColorVec() ################################################################# color = self.nodePath.getColor() - print color + print(color) self.nodeColor = VectorWidgets.ColorEntry( contentFrame, text = 'Node Color', value=[color.getX()*255, color.getY()*255, @@ -725,7 +724,7 @@ class propertyWindow(AppShell,Pmw.MegaWidget): # But, not directly removed be this function. # This function will send out a message to notice dataHolder to remove this animation ################################################################# - print anim + print(anim) widget = self.widgetsDict[anim] self.accept('animRemovedFromNode',self.redrawAnimProperty) messenger.send('PW_removeAnimFromNode',[self.name, anim]) diff --git a/contrib/src/sceneeditor/quad.py b/contrib/src/sceneeditor/quad.py index 329dcb92a3..6f4fcf03d0 100644 --- a/contrib/src/sceneeditor/quad.py +++ b/contrib/src/sceneeditor/quad.py @@ -504,7 +504,7 @@ class QuadView(DirectObject): ansY=-1.0+y2 self.xy=[ansX,ansY] - print "Sent X:%f Sent Y:%f"%(ansX,ansY) + print("Sent X:%f Sent Y:%f"%(ansX,ansY)) #SEditor.iRay.pick(render,self.xy) SEditor.manipulationControl.manipulationStop(self.xy) #print "MouseX " + str(base.mouseWatcherNode.getMouseX()) + "MouseY " + str(base.mouseWatcherNode.getMouseY()) + "\n" @@ -548,28 +548,28 @@ class QuadView(DirectObject): dr.setDimensions(0.5,1,0,0.5) def setLeft(self): - print "LEFT" + print("LEFT") self.CurrentQuad=3 self.ChangeBaseDR() self.Left.setCam() #self.Left.setDR(self.mouseWatcherNode) def setTop(self): - print "TOP" + print("TOP") self.CurrentQuad=2 self.ChangeBaseDR() self.Top.setCam() #self.Top.setDR(self.mouseWatcherNode) def setPerspective(self): - print "PERSPECTIVE" + print("PERSPECTIVE") self.CurrentQuad=4 self.ChangeBaseDR() self.Perspective.setCam() #self.Perspective.setDR(self.mouseWatcherNode) def setFront(self): - print "FRONT" + print("FRONT") self.CurrentQuad=1 self.ChangeBaseDR() self.Front.setCam() diff --git a/contrib/src/sceneeditor/sceneEditor.py b/contrib/src/sceneeditor/sceneEditor.py index 37d05c3a08..1565e9eaed 100644 --- a/contrib/src/sceneeditor/sceneEditor.py +++ b/contrib/src/sceneeditor/sceneEditor.py @@ -8,8 +8,14 @@ from direct.showbase.ShowBase import ShowBase ShowBase() from direct.showbase.TkGlobal import spawnTkLoop -from Tkinter import * -from tkFileDialog import * + +if sys.version_info >= (3, 0): + from tkinter import * + from tkinter.filedialog import * +else: + from Tkinter import * + from tkFileDialog import * + from direct.directtools.DirectGlobals import * from direct.tkwidgets.AppShell import* @@ -391,31 +397,31 @@ class myLevelEditor(AppShell): self.showAbout() return elif buttonIndex==12: - print "You haven't defined the function for this Button, Number %d."%buttonIndex + print("You haven't defined the function for this Button, Number %d."%buttonIndex) return elif buttonIndex==13: - print "You haven't defined the function for this Button, Number %d."%buttonIndex + print("You haven't defined the function for this Button, Number %d."%buttonIndex) return elif buttonIndex==14: - print "You haven't defined the function for this Button, Number %d."%buttonIndex + print("You haven't defined the function for this Button, Number %d."%buttonIndex) return elif buttonIndex==15: - print "You haven't defined the function for this Button, Number %d."%buttonIndex + print("You haven't defined the function for this Button, Number %d."%buttonIndex) return elif buttonIndex==16: - print "Your scene will be eliminated within five seconds, Save your world!!!, Number %d."%buttonIndex + print("Your scene will be eliminated within five seconds, Save your world!!!, Number %d."%buttonIndex) return elif buttonIndex==17: - print "You haven't defined the function for this Button, Number %d."%buttonIndex + print("You haven't defined the function for this Button, Number %d."%buttonIndex) return elif buttonIndex==18: - print "You haven't defined the function for this Button, Number %d."%buttonIndex + print("You haven't defined the function for this Button, Number %d."%buttonIndex) return elif buttonIndex==19: - print "You haven't defined the function for this Button, Number %d."%buttonIndex + print("You haven't defined the function for this Button, Number %d."%buttonIndex) return elif buttonIndex==20: - print "You haven't defined the function for this Button, Number %d."%buttonIndex + print("You haven't defined the function for this Button, Number %d."%buttonIndex) return return @@ -671,17 +677,17 @@ class myLevelEditor(AppShell): ################################################################# type, info = AllScene.getInfoOfThisNode(nodePath) name = nodePath.getName() - if not self.propertyWindow.has_key(name): + if name not in self.propertyWindow: self.propertyWindow[name] = propertyWindow(nodePath, type,info ) pass def closePropertyWindow(self, name): - if self.propertyWindow.has_key(name): + if name in self.propertyWindow: del self.propertyWindow[name] return def openMetadataPanel(self,nodePath=None): - print nodePath + print(nodePath) self.MetadataPanel=MetadataPanel(nodePath) pass @@ -690,7 +696,7 @@ class myLevelEditor(AppShell): # duplicate(self, nodePath = None) # This function will be called when user try to open the duplication window ################################################################# - print '----Duplication!!' + print('----Duplication!!') if nodePath != None: self.duplicateWindow = duplicateWindow(nodePath = nodePath) pass @@ -796,8 +802,8 @@ class myLevelEditor(AppShell): ################################################################# name = nodePath.getName() if AllScene.isActor(name): - if self.animPanel.has_key(name): - print '---- You already have an animation panel for this Actor!' + if name in self.animPanel: + print('---- You already have an animation panel for this Actor!') return else: Actor = AllScene.getActor(name) @@ -847,9 +853,9 @@ class myLevelEditor(AppShell): # Let us actually remove the scene from sys modules... this is done because every scene is loaded as a module # And if we reload a scene python wont reload since its already in sys.modules... and hence we delete it # If there is ever a garbage colleciton bug..this might be a point to look at - if sys.modules.has_key(currentModName): + if currentModName in sys.modules: del sys.modules[currentModName] - print sys.getrefcount(AllScene.theScene) + print(sys.getrefcount(AllScene.theScene)) del AllScene.theScene else: AllScene.resetAll() @@ -877,9 +883,9 @@ class myLevelEditor(AppShell): # Let us actually remove the scene from sys modules... this is done because every scene is loaded as a module # And if we reload a scene python wont reload since its already in sys.modules... and hence we delete it # If there is ever a garbage colleciton bug..this might be a point to look at - if sys.modules.has_key(currentModName): + if currentModName in sys.modules: del sys.modules[currentModName] - print sys.getrefcount(AllScene.theScene) + print(sys.getrefcount(AllScene.theScene)) del AllScene.theScene else: AllScene.resetAll() @@ -891,7 +897,7 @@ class myLevelEditor(AppShell): thefile=Filename(self.CurrentFileName) thedir=thefile.getFullpathWoExtension() - print "SCENE EDITOR::" + thedir + print("SCENE EDITOR::" + thedir) self.CurrentDirName=thedir if self.CurrentFileName != None: self.parent.title('Scene Editor - '+ Filename.fromOsSpecific(self.CurrentFileName).getBasenameWoExtension()) @@ -939,7 +945,7 @@ class myLevelEditor(AppShell): theScene.writeBamFile(fileName) else: render.writeBamFile(fileName+".bad") - print " Scenegraph saved as :" +str(fileName) + print(" Scenegraph saved as :" +str(fileName)) def loadFromBam(self): fileName = tkFileDialog.askopenfilename(filetypes = [("BAM",".bam")],title = "Load Scenegraph from Bam file") @@ -964,7 +970,7 @@ class myLevelEditor(AppShell): ############################################################################### # !!!!! See if a module exists by this name... if it does you cannot use this filename !!!!! ############################################################################### - if(sys.modules.has_key(fCheck.getBasenameWoExtension())): + if(fCheck.getBasenameWoExtension() in sys.modules): tkMessageBox.showwarning( "Save file", "Cannot save with this name because there is a system module with the same name. Please resave as something else." @@ -998,7 +1004,7 @@ class myLevelEditor(AppShell): if modelFilename: self.makeDirty() if not AllScene.loadModel(modelFilename, Filename.fromOsSpecific(modelFilename)): - print '----Error! No Such Model File!' + print('----Error! No Such Model File!') pass def loadActor(self): @@ -1021,12 +1027,12 @@ class myLevelEditor(AppShell): if ActorFilename: self.makeDirty() if not AllScene.loadActor(ActorFilename, Filename.fromOsSpecific(ActorFilename)): - print '----Error! No Such Model File!' + print('----Error! No Such Model File!') pass def importScene(self): self.makeDirty() - print '----God bless you Please Import!' + print('----God bless you Please Import!') pass @@ -1500,7 +1506,7 @@ class myLevelEditor(AppShell): return def animPanelClose(self, name): - if self.animPanel.has_key(name): + if name in self.animPanel: del self.animPanel[name] return @@ -1513,8 +1519,8 @@ class myLevelEditor(AppShell): ################################################################ name = nodePath.getName() if AllScene.isActor(name): - if self.animBlendPanel.has_key(name): - print '---- You already have an Blend Animation Panel for this Actor!' + if name in self.animBlendPanel: + print('---- You already have an Blend Animation Panel for this Actor!') return else: Actor = AllScene.getActor(name) @@ -1559,7 +1565,7 @@ class myLevelEditor(AppShell): # This function will be called when Blend panel has been closed. # Here we will reset the reference dictionary so it can be open again. ################################################################ - if self.animBlendPanel.has_key(name): + if name in self.animBlendPanel: del self.animBlendPanel[name] return @@ -1618,7 +1624,7 @@ class myLevelEditor(AppShell): def openAlignPanel(self, nodePath=None): name = nodePath.getName() - if not self.alignPanelDict.has_key(name): + if name not in self.alignPanelDict: list = AllScene.getAllObjNameAsList() if name in list: list.remove(name) @@ -1628,7 +1634,7 @@ class myLevelEditor(AppShell): return def closeAlignPanel(self, name=None): - if self.alignPanelDict.has_key(name): + if name in self.alignPanelDict: del self.alignPanelDict[name] def alignObject(self, nodePath, name, list): diff --git a/contrib/src/sceneeditor/seAnimPanel.py b/contrib/src/sceneeditor/seAnimPanel.py index 86c245a3ef..2dd3ceee53 100644 --- a/contrib/src/sceneeditor/seAnimPanel.py +++ b/contrib/src/sceneeditor/seAnimPanel.py @@ -5,12 +5,16 @@ # Import Tkinter, Pmw, and the floater code from this directory tree. from direct.tkwidgets.AppShell import * from direct.showbase.TkGlobal import * -from tkSimpleDialog import askfloat import string import math import types from direct.task import Task +if sys.version_info >= (3, 0): + from tkinter.simpledialog import askfloat +else: + from tkSimpleDialog import askfloat + FRAMES = 0 SECONDS = 1 @@ -112,7 +116,7 @@ class AnimPanel(AppShell): self.playRateEntry.selectitem('1.0') ### Loop checkbox - Label(actorFrame, text= "Loop:", font=('MSSansSerif', 12)).place(x=420,y=05,anchor=NW) + Label(actorFrame, text= "Loop:", font=('MSSansSerif', 12)).place(x=420,y=5,anchor=NW) self.loopVar = IntVar() self.loopVar.set(0) @@ -250,7 +254,7 @@ class AnimPanel(AppShell): self['animList'] = self['actor'].getAnimNames() animL = self['actor'].getAnimNames() self.AnimEntry.setlist(animL) - print '-----',animL + print('-----',animL) return def loadAnimation(self): @@ -278,7 +282,7 @@ class AnimPanel(AppShell): taskMgr.add(self.playTask, self.id + '_UpdateTask') self.stopButton.config(state=NORMAL) else: - print '----Illegal Animaion name!!', self.animName + print('----Illegal Animaion name!!', self.animName) return def playTask(self, task): @@ -591,7 +595,7 @@ class LoadAnimPanel(AppShell): else: self.animList.append(name) self.AnimName_1.setlist(self.animList) - print self.animDic + print(self.animDic) return def ok_press(self): diff --git a/contrib/src/sceneeditor/seBlendAnimPanel.py b/contrib/src/sceneeditor/seBlendAnimPanel.py index 6895b81417..2ab28210c5 100644 --- a/contrib/src/sceneeditor/seBlendAnimPanel.py +++ b/contrib/src/sceneeditor/seBlendAnimPanel.py @@ -5,12 +5,16 @@ # Import Tkinter, Pmw, and the floater code from this directory tree. from direct.tkwidgets.AppShell import * from direct.showbase.TkGlobal import * -from tkSimpleDialog import askfloat import string import math import types from direct.task import Task +if sys.version_info >= (3, 0): + from tkinter.simpledialog import askfloat +else: + from tkSimpleDialog import askfloat + FRAMES = 0 SECONDS = 1 @@ -304,7 +308,7 @@ class BlendAnimPanel(AppShell): taskMgr.add(self.playTask, self.id + '_UpdateTask') self.stopButton.config(state=NORMAL) else: - print '----Illegal Animaion name!!', self.animNameA + ', '+ self.animNameB + print('----Illegal Animaion name!!', self.animNameA + ', '+ self.animNameB) return def playTask(self, task): @@ -348,7 +352,7 @@ class BlendAnimPanel(AppShell): # setAnimation(self, animation, AB = 'a') # see play(self) ################################################################# - print 'OK!!!' + print('OK!!!') if AB == 'a': if self.animNameA != None: self['actor'].setControlEffect(self.animNameA, 1.0, 'modelRoot','lodRoot') @@ -519,7 +523,7 @@ class BlendAnimPanel(AppShell): # then this function will set Animation A to "a" and animation B # to "b" and set the ratio slider to "c" position. ################################################################# - if self.blendDict.has_key(name): + if name in self.blendDict: self.currentBlendName = name animA = self.blendDict[name][0] animB = self.blendDict[name][1] @@ -544,7 +548,7 @@ class BlendAnimPanel(AppShell): self.blendDict.clear() del self.blendDict self.blendDict = dict.copy() - print self.blendDict + print(self.blendDict) if len(self.blendDict)>0: self.blendList = self.blendDict.keys() else: diff --git a/contrib/src/sceneeditor/seCameraControl.py b/contrib/src/sceneeditor/seCameraControl.py index 721ebe9c31..95237db8be 100644 --- a/contrib/src/sceneeditor/seCameraControl.py +++ b/contrib/src/sceneeditor/seCameraControl.py @@ -55,14 +55,14 @@ class DirectCameraControl(DirectObject): ['n', self.pickNextCOA], ['u', self.orbitUprightCam], ['shift-u', self.uprightCam], - [`1`, self.spawnMoveToView, 1], - [`2`, self.spawnMoveToView, 2], - [`3`, self.spawnMoveToView, 3], - [`4`, self.spawnMoveToView, 4], - [`5`, self.spawnMoveToView, 5], - [`6`, self.spawnMoveToView, 6], - [`7`, self.spawnMoveToView, 7], - [`8`, self.spawnMoveToView, 8], + ['1', self.spawnMoveToView, 1], + ['2', self.spawnMoveToView, 2], + ['3', self.spawnMoveToView, 3], + ['4', self.spawnMoveToView, 4], + ['5', self.spawnMoveToView, 5], + ['6', self.spawnMoveToView, 6], + ['7', self.spawnMoveToView, 7], + ['8', self.spawnMoveToView, 8], ['9', self.swingCamAboutWidget, -90.0, t], ['0', self.swingCamAboutWidget, 90.0, t], ['`', self.removeManipulateCameraTask], @@ -351,7 +351,7 @@ class DirectCameraControl(DirectObject): # MRM: Would be nice to be able to control this # At least display it dist = pow(10.0, self.nullHitPointCount) - SEditor.message('COA Distance: ' + `dist`) + SEditor.message('COA Distance: ' + repr(dist)) coa.set(0,dist,0) # Compute COA Dist coaDist = Vec3(coa - ZERO_POINT).length() diff --git a/contrib/src/sceneeditor/seColorEntry.py b/contrib/src/sceneeditor/seColorEntry.py index 6cc14b27c6..9dcb3136f7 100644 --- a/contrib/src/sceneeditor/seColorEntry.py +++ b/contrib/src/sceneeditor/seColorEntry.py @@ -12,9 +12,15 @@ from direct.tkwidgets import Valuator from direct.tkwidgets import Floater from direct.tkwidgets import Slider -import string, Pmw, Tkinter, tkColorChooser +import sys, Pmw from direct.tkwidgets.VectorWidgets import VectorEntry +if sys.version_info >= (3, 0): + from tkinter.colorchooser import askcolor +else: + from tkColorChooser import askcolor + + class seColorEntry(VectorEntry): def __init__(self, parent = None, **kw): # Initialize options for the class (overriding some superclass options) @@ -41,7 +47,7 @@ class seColorEntry(VectorEntry): def popupColorPicker(self): # Can pass in current color with: color = (255, 0, 0) - color = tkColorChooser.askcolor( + color = askcolor( parent = self.interior(), # Initialize it to current color initialcolor = tuple(self.get()[:3]))[0] diff --git a/contrib/src/sceneeditor/seFileSaver.py b/contrib/src/sceneeditor/seFileSaver.py index 0b2e088e12..9d58fa0580 100644 --- a/contrib/src/sceneeditor/seFileSaver.py +++ b/contrib/src/sceneeditor/seFileSaver.py @@ -42,7 +42,7 @@ class FileSaver: i1=" " # indentation i2=i1+i1 # double indentation out_file = open(filename,"w") - print "dirname:" + dirname + print("dirname:" + dirname) if( not os.path.isdir(dirname)): os.mkdir(dirname) savepathname=Filename(filename) @@ -176,7 +176,7 @@ class FileSaver: newtexpathF=Filename(newtexpath) newtexpathSpecific=newtexpathF.toOsSpecific() - print "TEXTURE SAVER:: copying" + oldtexpath + " to " + newtexpathSpecific + print("TEXTURE SAVER:: copying" + oldtexpath + " to " + newtexpathSpecific) if(oldtexpath != newtexpathSpecific): shutil.copyfile(oldtexpath,newtexpathSpecific) @@ -187,7 +187,7 @@ class FileSaver: # Copy the file over to the relative directory oldModelpath=AllScene.ModelRefDic[model].toOsSpecific() - print "FILESAVER:: copying from " + AllScene.ModelRefDic[model].toOsSpecific() + "to" + newpathSpecific + print("FILESAVER:: copying from " + AllScene.ModelRefDic[model].toOsSpecific() + "to" + newpathSpecific) if(oldModelpath!=newpathSpecific): shutil.copyfile(oldModelpath,newpathSpecific) @@ -197,7 +197,7 @@ class FileSaver: etc=EggTextureCollection() etc.extractTextures(e) for index in range(len(fnamelist)): - print fnamelist[index] + print(fnamelist[index]) tex=etc.findFilename(Filename(fnamelist[index])) fn=Filename(tex.getFilename()) fn.setDirname("") @@ -305,14 +305,14 @@ class FileSaver: newtexpath=dirname + "/" + texfilename.getBasename() newtexpathF=Filename(newtexpath) newtexpathSpecific=newtexpathF.toOsSpecific() - print "TEXTURE SAVER:: copying" + oldtexpath + " to " + newtexpathSpecific + print("TEXTURE SAVER:: copying" + oldtexpath + " to " + newtexpathSpecific) if(oldtexpath != newtexpathSpecific): shutil.copyfile(oldtexpath,newtexpathSpecific) # Copy the file over to the relative directory oldActorpath=AllScene.ActorRefDic[actor].toOsSpecific() - print "FILESAVER:: copying from " + AllScene.ActorRefDic[actor].toOsSpecific() + "to" + newpathSpecific + print("FILESAVER:: copying from " + AllScene.ActorRefDic[actor].toOsSpecific() + "to" + newpathSpecific) if(oldActorpath!=newpathSpecific): shutil.copyfile(oldActorpath,newpathSpecific) @@ -322,7 +322,7 @@ class FileSaver: etc=EggTextureCollection() etc.extractTextures(e) for index in range(len(actorfnamelist)): - print actorfnamelist[index] + print(actorfnamelist[index]) tex=etc.findFilename(Filename(actorfnamelist[index])) fn=Filename(tex.getFilename()) fn.setDirname("") @@ -362,12 +362,12 @@ class FileSaver: #out_file.write(i2+ "self."+ actorS + ".loadAnims(" + str(ActorAnimations) +")\n") # Old way with absolute paths #Manakel 2/12/2004: solve the not empty but not defined animation case if not animation is None: - print "ACTOR ANIMATIONS:" + ActorAnimations[animation] + print("ACTOR ANIMATIONS:" + ActorAnimations[animation]) oldAnimPath=Filename(ActorAnimations[animation]) oldAnim=oldAnimPath.toOsSpecific() dirOS=Filename(dirname) newAnim=dirOS.toOsSpecific() + "\\" + oldAnimPath.getBasename() - print "ACTOR ANIM SAVER:: Comparing" + oldAnim +"and" + newAnim + print("ACTOR ANIM SAVER:: Comparing" + oldAnim +"and" + newAnim) if(oldAnim!=newAnim): shutil.copyfile(oldAnim,newAnim) newAnimF=Filename.fromOsSpecific(newAnim) @@ -379,16 +379,16 @@ class FileSaver: out_file.write(i2+ i1+"self."+ actorS + ".loadAnims(" + str(ActorAnimations) +")\n") # Now with new relative paths out_file.write(i2+"else:\n") theloadAnimString=str(ActorAnimationsInvoke)# We hack the "self.executionpath" part into the dictionary as a variable using string replace - print "LOAD ANIM STRING BEFORE" + theloadAnimString + print("LOAD ANIM STRING BEFORE" + theloadAnimString) theloadAnimString=theloadAnimString.replace('\'self.executionpath +','self.executionpath + \'') - print "LOAD ANIM STRING AFTER" + theloadAnimString + print("LOAD ANIM STRING AFTER" + theloadAnimString) out_file.write(i2+ i1+"self."+ actorS + ".loadAnims(" + theloadAnimString +")\n") # Now with new relative paths based on editor invocation out_file.write(i2+ "self.ActorDic[\'" + actorS + "\']=self." + AllScene.ActorDic[actor].getName()+"\n") #out_file.write(i2+ "self.ActorRefDic[\'" + actorS + "\']=Filename(\'"+AllScene.ActorRefDic[actor].getFullpath() +"\')\n") # Old way with absolute paths out_file.write(i2+ "self.ActorRefDic[\'" + actorS + "\']=\'"+ AllScene.ActorRefDic[actor].getBasename() +"\'\n")# Relative paths out_file.write(i2+ "self.ActorDic[\'"+ actorS + "\'].setName(\'"+ actorS +"\')\n") - if(AllScene.blendAnimDict.has_key(actor)): # Check if a dictionary of blended animations exists + if(actor in AllScene.blendAnimDict): # Check if a dictionary of blended animations exists out_file.write(i2+ "self.blendAnimDict[\"" + actorS +"\"]=" + str(AllScene.blendAnimDict[actor]) + "\n") @@ -458,7 +458,7 @@ class FileSaver: pass else: - print "Invalid Collision Node: " + nodetype + print("Invalid Collision Node: " + nodetype) out_file.write("\n") @@ -653,7 +653,7 @@ class FileSaver: if(parent=="render" or parent=="camera"): out_file.write(i2+ "self."+ modelS + ".reparentTo(" + parent + ")\n") else: - if(AllScene.particleDict.has_key(parent)): + if(parent in AllScene.particleDict): out_file.write(i2+ "self."+ modelS + ".reparentTo(self." + parent + ".getEffect())\n") else: out_file.write(i2+ "self."+ modelS + ".reparentTo(self." + parent + ")\n") @@ -666,7 +666,7 @@ class FileSaver: if(parent=="render" or parent=="camera"): out_file.write(i2+ "self."+ dummyS + ".reparentTo(" + parent + ")\n") else: - if(AllScene.particleDict.has_key(parent)): + if(parent in AllScene.particleDict): out_file.write(i2+ "self."+ dummyS + ".reparentTo(self." + parent + ".getEffect())\n") else: out_file.write(i2+ "self."+ dummyS + ".reparentTo(self." + parent + ")\n") @@ -680,7 +680,7 @@ class FileSaver: if(parent=="render" or parent=="camera"): out_file.write(i2+ "self."+ actorS + ".reparentTo(" + parent + ")\n") else: - if(AllScene.particleDict.has_key(parent)): + if(parent in AllScene.particleDict): out_file.write(i2+ "self."+ actorS + ".reparentTo(self." + parent + ".getEffect())\n") else: out_file.write(i2+ "self."+ actorS + ".reparentTo(self." + parent + ")\n") @@ -698,7 +698,7 @@ class FileSaver: out_file.write(i2+"self.collisionDict[\"" + collnodeS + "\"]="+ parentname + ".attachNewNode(self." + collnodeS + "_Node)\n") else: #Manakel 2/12/2005: parent replaced by parent Name but why Parent name in partice and parent for other objects? - if(AllScene.particleDict.has_key(parentname)): + if(parentname in AllScene.particleDict): out_file.write(i2+"self.collisionDict[\"" + collnodeS + "\"]=self."+ parentname + "getEffect().attachNewNode(self." + collnodeS + "_Node)\n") else: out_file.write(i2+"self.collisionDict[\"" + collnodeS + "\"]=self."+ parentname + ".attachNewNode(self." + collnodeS + "_Node)\n") diff --git a/contrib/src/sceneeditor/seGeometry.py b/contrib/src/sceneeditor/seGeometry.py index 4074c986a2..99afa62a1f 100644 --- a/contrib/src/sceneeditor/seGeometry.py +++ b/contrib/src/sceneeditor/seGeometry.py @@ -41,10 +41,10 @@ class LineNodePath(NodePath): ls.setColor(colorVec) def moveTo( self, *_args ): - apply( self.lineSegs.moveTo, _args ) + self.lineSegs.moveTo(*_args) def drawTo( self, *_args ): - apply( self.lineSegs.drawTo, _args ) + self.lineSegs.drawTo(*_args) def create( self, frameAccurate = 0 ): self.lineSegs.create( self.lineNode, frameAccurate ) @@ -60,13 +60,13 @@ class LineNodePath(NodePath): self.lineSegs.setThickness( thickness ) def setColor( self, *_args ): - apply( self.lineSegs.setColor, _args ) + self.lineSegs.setColor(*_args) def setVertex( self, *_args): - apply( self.lineSegs.setVertex, _args ) + self.lineSegs.setVertex(*_args) def setVertexColor( self, vertex, *_args ): - apply( self.lineSegs.setVertexColor, (vertex,) + _args ) + self.lineSegs.setVertexColor(*(vertex,) + _args) def getCurrentPosition( self ): return self.lineSegs.getCurrentPosition() @@ -132,9 +132,9 @@ class LineNodePath(NodePath): Given a list of lists of points, draw a separate line for each list """ for pointList in lineList: - apply(self.moveTo, pointList[0]) + self.moveTo(*pointList[0]) for point in pointList[1:]: - apply(self.drawTo, point) + self.drawTo(*point) ## ## Given a point in space, and a direction, find the point of intersection diff --git a/contrib/src/sceneeditor/seLights.py b/contrib/src/sceneeditor/seLights.py index 09c5b2140a..2353512af5 100644 --- a/contrib/src/sceneeditor/seLights.py +++ b/contrib/src/sceneeditor/seLights.py @@ -3,7 +3,6 @@ # Written by Yi-Hong Lin, yihhongl@andrew.cmu.edu, 2004 ################################################################# from direct.showbase.DirectObject import * -from string import lower from direct.directtools import DirectUtil from panda3d.core import * import string @@ -341,7 +340,7 @@ class seLightManager(NodePath): if type == 'ambient': self.ambientCount += 1 if(name=='DEFAULT_NAME'): - light = AmbientLight('ambient_' + `self.ambientCount`) + light = AmbientLight('ambient_' + repr(self.ambientCount)) else: light = AmbientLight(name) @@ -350,7 +349,7 @@ class seLightManager(NodePath): elif type == 'directional': self.directionalCount += 1 if(name=='DEFAULT_NAME'): - light = DirectionalLight('directional_' + `self.directionalCount`) + light = DirectionalLight('directional_' + repr(self.directionalCount)) else: light = DirectionalLight(name) @@ -360,7 +359,7 @@ class seLightManager(NodePath): elif type == 'point': self.pointCount += 1 if(name=='DEFAULT_NAME'): - light = PointLight('point_' + `self.pointCount`) + light = PointLight('point_' + repr(self.pointCount)) else: light = PointLight(name) @@ -371,7 +370,7 @@ class seLightManager(NodePath): elif type == 'spot': self.spotCount += 1 if(name=='DEFAULT_NAME'): - light = Spotlight('spot_' + `self.spotCount`) + light = Spotlight('spot_' + repr(self.spotCount)) else: light = Spotlight(name) @@ -382,7 +381,7 @@ class seLightManager(NodePath): light.setAttenuation(Vec3(constant, linear, quadratic)) light.setExponent(exponent) else: - print 'Invalid light type' + print('Invalid light type') return None # Create the seLight objects and put the light object we just created into it. @@ -411,7 +410,7 @@ class seLightManager(NodePath): # Attention!! # only Spotlight obj nneds to be specified a lens node first. i.e. setLens() first! ################################################################# - type = lower(light.getType().getName()) + type = light.getType().getName().lower() specularColor = VBase4(1) position = Point3(0,0,0) @@ -451,7 +450,7 @@ class seLightManager(NodePath): quadratic = Attenuation.getZ() exponent = light.getExponent() else: - print 'Invalid light type' + print('Invalid light type') return None lightNode = seLight(light,self,type, @@ -508,7 +507,7 @@ class seLightManager(NodePath): # isLight(self.name) # Use a string as a index to check if there existing a light named "name" ################################################################# - return self.lightDict.has_key(name) + return name in self.lightDict def rename(self,oName,nName): ################################################################# @@ -523,7 +522,7 @@ class seLightManager(NodePath): del self.lightDict[oName] return self.lightDict.keys(),lightNode else: - print '----Light Mnager: No such Light!' + print('----Light Mnager: No such Light!') def getLightNodeList(self): ################################################################# diff --git a/contrib/src/sceneeditor/seMopathRecorder.py b/contrib/src/sceneeditor/seMopathRecorder.py index 0f856237d2..dc8bbd8d22 100644 --- a/contrib/src/sceneeditor/seMopathRecorder.py +++ b/contrib/src/sceneeditor/seMopathRecorder.py @@ -25,10 +25,17 @@ from direct.tkwidgets.Slider import Slider from direct.tkwidgets.EntryScale import EntryScale from direct.tkwidgets.VectorWidgets import Vector2Entry, Vector3Entry from direct.tkwidgets.VectorWidgets import ColorEntry -from Tkinter import Button, Frame, Radiobutton, Checkbutton, Label -from Tkinter import StringVar, BooleanVar, Entry, Scale -import os, string, Tkinter, Pmw -import __builtin__ +import os, string, sys, Pmw + +if sys.version_info >= (3, 0): + from tkinter import Button, Frame, Radiobutton, Checkbutton, Label + from tkinter import StringVar, BooleanVar, Entry, Scale + import tkinter +else: + from Tkinter import Button, Frame, Radiobutton, Checkbutton, Label + from Tkinter import StringVar, BooleanVar, Entry, Scale + import Tkinter as tkinter + PRF_UTILITIES = [ 'lambda: camera.lookAt(render)', @@ -123,7 +130,7 @@ class MopathRecorder(AppShell, DirectObject): self.postPoints = [] self.pointSetDict = {} self.pointSetCount = 0 - self.pointSetName = self.name + '-ps-' + `self.pointSetCount` + self.pointSetName = self.name + '-ps-' + repr(self.pointSetCount) # User callback to call before recording point self.samplingMode = 'Continuous' self.preRecordFunc = None @@ -233,7 +240,7 @@ class MopathRecorder(AppShell, DirectObject): self.undoButton['state'] = 'normal' else: self.undoButton['state'] = 'disabled' - self.undoButton.pack(side = Tkinter.LEFT, expand = 0) + self.undoButton.pack(side = tkinter.LEFT, expand = 0) self.bind(self.undoButton, 'Undo last operation') self.redoButton = Button(self.menuFrame, text = 'Redo', @@ -242,19 +249,19 @@ class MopathRecorder(AppShell, DirectObject): self.redoButton['state'] = 'normal' else: self.redoButton['state'] = 'disabled' - self.redoButton.pack(side = Tkinter.LEFT, expand = 0) + self.redoButton.pack(side = tkinter.LEFT, expand = 0) self.bind(self.redoButton, 'Redo last operation') # Record button - mainFrame = Frame(interior, relief = Tkinter.SUNKEN, borderwidth = 2) + mainFrame = Frame(interior, relief = tkinter.SUNKEN, borderwidth = 2) frame = Frame(mainFrame) # Active node path # Button to select active node path widget = self.createButton(frame, 'Recording', 'Node Path:', 'Select Active Mopath Node Path', lambda s = self: SEditor.select(s.nodePath), - side = Tkinter.LEFT, expand = 0) - widget['relief'] = Tkinter.FLAT + side = tkinter.LEFT, expand = 0) + widget['relief'] = tkinter.FLAT self.nodePathMenu = Pmw.ComboBox( frame, entry_width = 20, selectioncommand = self.selectNodePathNamed, @@ -264,7 +271,7 @@ class MopathRecorder(AppShell, DirectObject): self.nodePathMenu.component('entryfield_entry')) self.nodePathMenuBG = ( self.nodePathMenuEntry.configure('background')[3]) - self.nodePathMenu.pack(side = Tkinter.LEFT, fill = Tkinter.X, expand = 1) + self.nodePathMenu.pack(side = tkinter.LEFT, fill = tkinter.X, expand = 1) self.bind(self.nodePathMenu, 'Select active node path used for recording and playback') # Recording type @@ -285,81 +292,81 @@ class MopathRecorder(AppShell, DirectObject): 'Recording', 'Extend', ('Next record session extends existing path'), self.recordingType, 'Extend', expand = 0) - frame.pack(fill = Tkinter.X, expand = 1) + frame.pack(fill = tkinter.X, expand = 1) frame = Frame(mainFrame) widget = self.createCheckbutton( frame, 'Recording', 'Record', 'On: path is being recorded', self.toggleRecord, 0, - side = Tkinter.LEFT, fill = Tkinter.BOTH, expand = 1) - widget.configure(foreground = 'Red', relief = Tkinter.RAISED, borderwidth = 2, - anchor = Tkinter.CENTER, width = 16) + side = tkinter.LEFT, fill = tkinter.BOTH, expand = 1) + widget.configure(foreground = 'Red', relief = tkinter.RAISED, borderwidth = 2, + anchor = tkinter.CENTER, width = 16) widget = self.createButton(frame, 'Recording', 'Add Keyframe', 'Add Keyframe To Current Path', self.addKeyframe, - side = Tkinter.LEFT, expand = 1) + side = tkinter.LEFT, expand = 1) widget = self.createButton(frame, 'Recording', 'Bind Path to Node', 'Bind Motion Path to selected Object', self.bindMotionPathToNode, - side = Tkinter.LEFT, expand = 1) + side = tkinter.LEFT, expand = 1) - frame.pack(fill = Tkinter.X, expand = 1) + frame.pack(fill = tkinter.X, expand = 1) - mainFrame.pack(expand = 1, fill = Tkinter.X, pady = 3) + mainFrame.pack(expand = 1, fill = tkinter.X, pady = 3) # Playback controls - playbackFrame = Frame(interior, relief = Tkinter.SUNKEN, + playbackFrame = Frame(interior, relief = tkinter.SUNKEN, borderwidth = 2) Label(playbackFrame, text = 'PLAYBACK CONTROLS', - font=('MSSansSerif', 12, 'bold')).pack(fill = Tkinter.X) + font=('MSSansSerif', 12, 'bold')).pack(fill = tkinter.X) # Main playback control slider widget = self.createEntryScale( playbackFrame, 'Playback', 'Time', 'Set current playback time', - resolution = 0.01, command = self.playbackGoTo, side = Tkinter.TOP) - widget.component('hull')['relief'] = Tkinter.RIDGE + resolution = 0.01, command = self.playbackGoTo, side = tkinter.TOP) + widget.component('hull')['relief'] = tkinter.RIDGE # Kill playback task if drag slider widget['preCallback'] = self.stopPlayback # Jam duration entry into entry scale self.createLabeledEntry(widget.labelFrame, 'Resample', 'Path Duration', 'Set total curve duration', command = self.setPathDuration, - side = Tkinter.LEFT, expand = 0) + side = tkinter.LEFT, expand = 0) # Start stop buttons frame = Frame(playbackFrame) widget = self.createButton(frame, 'Playback', '<<', 'Jump to start of playback', self.jumpToStartOfPlayback, - side = Tkinter.LEFT, expand = 1) + side = tkinter.LEFT, expand = 1) widget['font'] = (('MSSansSerif', 12, 'bold')) widget = self.createCheckbutton(frame, 'Playback', 'Play', 'Start/Stop playback', self.startStopPlayback, 0, - side = Tkinter.LEFT, fill = Tkinter.BOTH, expand = 1) + side = tkinter.LEFT, fill = tkinter.BOTH, expand = 1) widget.configure(anchor = 'center', justify = 'center', - relief = Tkinter.RAISED, font = ('MSSansSerif', 12, 'bold')) + relief = tkinter.RAISED, font = ('MSSansSerif', 12, 'bold')) widget = self.createButton(frame, 'Playback', '>>', 'Jump to end of playback', self.jumpToEndOfPlayback, - side = Tkinter.LEFT, expand = 1) + side = tkinter.LEFT, expand = 1) widget['font'] = (('MSSansSerif', 12, 'bold')) self.createCheckbutton(frame, 'Playback', 'Loop', 'On: loop playback', self.setLoopPlayback, self.loopPlayback, - side = Tkinter.LEFT, fill = Tkinter.BOTH, expand = 0) - frame.pack(fill = Tkinter.X, expand = 1) + side = tkinter.LEFT, fill = tkinter.BOTH, expand = 0) + frame.pack(fill = tkinter.X, expand = 1) # Speed control frame = Frame(playbackFrame) - widget = Button(frame, text = 'PB Speed Vernier', relief = Tkinter.FLAT, + widget = Button(frame, text = 'PB Speed Vernier', relief = tkinter.FLAT, command = lambda s = self: s.setSpeedScale(1.0)) - widget.pack(side = Tkinter.LEFT, expand = 0) + widget.pack(side = tkinter.LEFT, expand = 0) self.speedScale = Scale(frame, from_ = -1, to = 1, resolution = 0.01, showvalue = 0, width = 10, orient = 'horizontal', command = self.setPlaybackSF) - self.speedScale.pack(side = Tkinter.LEFT, fill = Tkinter.X, expand = 1) + self.speedScale.pack(side = tkinter.LEFT, fill = tkinter.X, expand = 1) self.speedVar = StringVar() self.speedVar.set("0.00") self.speedEntry = Entry(frame, textvariable = self.speedVar, @@ -368,14 +375,14 @@ class MopathRecorder(AppShell, DirectObject): '', lambda e = None, s = self: s.setSpeedScale( string.atof(s.speedVar.get()))) - self.speedEntry.pack(side = Tkinter.LEFT, expand = 0) - frame.pack(fill = Tkinter.X, expand = 1) + self.speedEntry.pack(side = tkinter.LEFT, expand = 0) + frame.pack(fill = tkinter.X, expand = 1) - playbackFrame.pack(fill = Tkinter.X, pady = 2) + playbackFrame.pack(fill = tkinter.X, pady = 2) # Create notebook pages self.mainNotebook = Pmw.NoteBook(interior) - self.mainNotebook.pack(fill = Tkinter.BOTH, expand = 1) + self.mainNotebook.pack(fill = tkinter.BOTH, expand = 1) self.resamplePage = self.mainNotebook.add('Resample') self.refinePage = self.mainNotebook.add('Refine') self.extendPage = self.mainNotebook.add('Extend') @@ -386,35 +393,35 @@ class MopathRecorder(AppShell, DirectObject): ## RESAMPLE PAGE label = Label(self.resamplePage, text = 'RESAMPLE CURVE', font=('MSSansSerif', 12, 'bold')) - label.pack(fill = Tkinter.X) + label.pack(fill = tkinter.X) # Resample resampleFrame = Frame( - self.resamplePage, relief = Tkinter.SUNKEN, borderwidth = 2) + self.resamplePage, relief = tkinter.SUNKEN, borderwidth = 2) label = Label(resampleFrame, text = 'RESAMPLE CURVE', font=('MSSansSerif', 12, 'bold')).pack() widget = self.createSlider( resampleFrame, 'Resample', 'Num. Samples', 'Number of samples in resampled curve', resolution = 1, min = 2, max = 1000, command = self.setNumSamples) - widget.component('hull')['relief'] = Tkinter.RIDGE + widget.component('hull')['relief'] = tkinter.RIDGE widget['postCallback'] = self.sampleCurve frame = Frame(resampleFrame) self.createButton( frame, 'Resample', 'Make Even', 'Apply timewarp so resulting path has constant velocity', - self.makeEven, side = Tkinter.LEFT, fill = Tkinter.X, expand = 1) + self.makeEven, side = tkinter.LEFT, fill = tkinter.X, expand = 1) self.createButton( frame, 'Resample', 'Face Forward', 'Compute HPR so resulting hpr curve faces along xyz tangent', - self.faceForward, side = Tkinter.LEFT, fill = Tkinter.X, expand = 1) - frame.pack(fill = Tkinter.X, expand = 0) - resampleFrame.pack(fill = Tkinter.X, expand = 0, pady = 2) + self.faceForward, side = tkinter.LEFT, fill = tkinter.X, expand = 1) + frame.pack(fill = tkinter.X, expand = 0) + resampleFrame.pack(fill = tkinter.X, expand = 0, pady = 2) # Desample desampleFrame = Frame( - self.resamplePage, relief = Tkinter.SUNKEN, borderwidth = 2) + self.resamplePage, relief = tkinter.SUNKEN, borderwidth = 2) Label(desampleFrame, text = 'DESAMPLE CURVE', font=('MSSansSerif', 12, 'bold')).pack() widget = self.createSlider( @@ -422,16 +429,16 @@ class MopathRecorder(AppShell, DirectObject): 'Specify number of points to skip between samples', min = 1, max = 100, resolution = 1, command = self.setDesampleFrequency) - widget.component('hull')['relief'] = Tkinter.RIDGE + widget.component('hull')['relief'] = tkinter.RIDGE widget['postCallback'] = self.desampleCurve - desampleFrame.pack(fill = Tkinter.X, expand = 0, pady = 2) + desampleFrame.pack(fill = tkinter.X, expand = 0, pady = 2) ## REFINE PAGE ## - refineFrame = Frame(self.refinePage, relief = Tkinter.SUNKEN, + refineFrame = Frame(self.refinePage, relief = tkinter.SUNKEN, borderwidth = 2) label = Label(refineFrame, text = 'REFINE CURVE', font=('MSSansSerif', 12, 'bold')) - label.pack(fill = Tkinter.X) + label.pack(fill = tkinter.X) widget = self.createSlider(refineFrame, 'Refine Page', 'Refine From', @@ -460,14 +467,14 @@ class MopathRecorder(AppShell, DirectObject): command = self.setRefineStop) widget['preCallback'] = self.setRefineMode widget['postCallback'] = self.getPostPoints - refineFrame.pack(fill = Tkinter.X) + refineFrame.pack(fill = tkinter.X) ## EXTEND PAGE ## - extendFrame = Frame(self.extendPage, relief = Tkinter.SUNKEN, + extendFrame = Frame(self.extendPage, relief = tkinter.SUNKEN, borderwidth = 2) label = Label(extendFrame, text = 'EXTEND CURVE', font=('MSSansSerif', 12, 'bold')) - label.pack(fill = Tkinter.X) + label.pack(fill = tkinter.X) widget = self.createSlider(extendFrame, 'Extend Page', 'Extend From', @@ -483,14 +490,14 @@ class MopathRecorder(AppShell, DirectObject): resolution = 0.01, command = self.setControlStart) widget['preCallback'] = self.setExtendMode - extendFrame.pack(fill = Tkinter.X) + extendFrame.pack(fill = tkinter.X) ## CROP PAGE ## - cropFrame = Frame(self.cropPage, relief = Tkinter.SUNKEN, + cropFrame = Frame(self.cropPage, relief = tkinter.SUNKEN, borderwidth = 2) label = Label(cropFrame, text = 'CROP CURVE', font=('MSSansSerif', 12, 'bold')) - label.pack(fill = Tkinter.X) + label.pack(fill = tkinter.X) widget = self.createSlider( cropFrame, @@ -508,11 +515,11 @@ class MopathRecorder(AppShell, DirectObject): self.createButton(cropFrame, 'Crop Page', 'Crop Curve', 'Crop curve to specified from to times', - self.cropCurve, fill = Tkinter.NONE) - cropFrame.pack(fill = Tkinter.X) + self.cropCurve, fill = tkinter.NONE) + cropFrame.pack(fill = tkinter.X) ## DRAW PAGE ## - drawFrame = Frame(self.drawPage, relief = Tkinter.SUNKEN, + drawFrame = Frame(self.drawPage, relief = tkinter.SUNKEN, borderwidth = 2) self.sf = Pmw.ScrolledFrame(self.drawPage, horizflex = 'elastic') @@ -521,57 +528,57 @@ class MopathRecorder(AppShell, DirectObject): label = Label(sfFrame, text = 'CURVE RENDERING STYLE', font=('MSSansSerif', 12, 'bold')) - label.pack(fill = Tkinter.X) + label.pack(fill = tkinter.X) frame = Frame(sfFrame) - Label(frame, text = 'SHOW:').pack(side = Tkinter.LEFT, expand = 0) + Label(frame, text = 'SHOW:').pack(side = tkinter.LEFT, expand = 0) widget = self.createCheckbutton( frame, 'Style', 'Path', 'On: path is visible', self.setPathVis, 1, - side = Tkinter.LEFT, fill = Tkinter.X, expand = 1) + side = tkinter.LEFT, fill = tkinter.X, expand = 1) widget = self.createCheckbutton( frame, 'Style', 'Knots', 'On: path knots are visible', self.setKnotVis, 1, - side = Tkinter.LEFT, fill = Tkinter.X, expand = 1) + side = tkinter.LEFT, fill = tkinter.X, expand = 1) widget = self.createCheckbutton( frame, 'Style', 'CVs', 'On: path CVs are visible', self.setCvVis, 0, - side = Tkinter.LEFT, fill = Tkinter.X, expand = 1) + side = tkinter.LEFT, fill = tkinter.X, expand = 1) widget = self.createCheckbutton( frame, 'Style', 'Hull', 'On: path hull is visible', self.setHullVis, 0, - side = Tkinter.LEFT, fill = Tkinter.X, expand = 1) + side = tkinter.LEFT, fill = tkinter.X, expand = 1) widget = self.createCheckbutton( frame, 'Style', 'Trace', 'On: record is visible', self.setTraceVis, 0, - side = Tkinter.LEFT, fill = Tkinter.X, expand = 1) + side = tkinter.LEFT, fill = tkinter.X, expand = 1) widget = self.createCheckbutton( frame, 'Style', 'Marker', 'On: playback marker is visible', self.setMarkerVis, 0, - side = Tkinter.LEFT, fill = Tkinter.X, expand = 1) - frame.pack(fill = Tkinter.X, expand = 1) + side = tkinter.LEFT, fill = tkinter.X, expand = 1) + frame.pack(fill = tkinter.X, expand = 1) # Sliders widget = self.createSlider( sfFrame, 'Style', 'Num Segs', 'Set number of segments used to approximate each parametric unit', min = 1.0, max = 400, resolution = 1.0, value = 40, - command = self.setNumSegs, side = Tkinter.TOP) - widget.component('hull')['relief'] = Tkinter.RIDGE + command = self.setNumSegs, side = tkinter.TOP) + widget.component('hull')['relief'] = tkinter.RIDGE widget = self.createSlider( sfFrame, 'Style', 'Num Ticks', 'Set number of tick marks drawn for each unit of time', min = 0.0, max = 10.0, resolution = 1.0, value = 0.0, - command = self.setNumTicks, side = Tkinter.TOP) - widget.component('hull')['relief'] = Tkinter.RIDGE + command = self.setNumTicks, side = tkinter.TOP) + widget.component('hull')['relief'] = tkinter.RIDGE widget = self.createSlider( sfFrame, 'Style', 'Tick Scale', 'Set visible size of time tick marks', min = 0.01, max = 100.0, resolution = 0.01, value = 5.0, - command = self.setTickScale, side = Tkinter.TOP) - widget.component('hull')['relief'] = Tkinter.RIDGE + command = self.setTickScale, side = tkinter.TOP) + widget.component('hull')['relief'] = tkinter.RIDGE self.createColorEntry( sfFrame, 'Style', 'Path Color', 'Color of curve', @@ -598,14 +605,14 @@ class MopathRecorder(AppShell, DirectObject): command = self.setHullColor, value = [255.0,128.0,128.0,255.0]) - #drawFrame.pack(fill = Tkinter.X) + #drawFrame.pack(fill = tkinter.X) ## OPTIONS PAGE ## - optionsFrame = Frame(self.optionsPage, relief = Tkinter.SUNKEN, + optionsFrame = Frame(self.optionsPage, relief = tkinter.SUNKEN, borderwidth = 2) label = Label(optionsFrame, text = 'RECORDING OPTIONS', font=('MSSansSerif', 12, 'bold')) - label.pack(fill = Tkinter.X) + label.pack(fill = tkinter.X) # Hooks frame = Frame(optionsFrame) widget = self.createLabeledEntry( @@ -614,7 +621,7 @@ class MopathRecorder(AppShell, DirectObject): value = self.startStopHook, command = self.setStartStopHook)[0] label = self.getWidget('Recording', 'Record Hook-Label') - label.configure(width = 16, anchor = Tkinter.W) + label.configure(width = 16, anchor = tkinter.W) self.setStartStopHook() widget = self.createLabeledEntry( frame, 'Recording', 'Keyframe Hook', @@ -622,9 +629,9 @@ class MopathRecorder(AppShell, DirectObject): value = self.keyframeHook, command = self.setKeyframeHook)[0] label = self.getWidget('Recording', 'Keyframe Hook-Label') - label.configure(width = 16, anchor = Tkinter.W) + label.configure(width = 16, anchor = tkinter.W) self.setKeyframeHook() - frame.pack(expand = 1, fill = Tkinter.X) + frame.pack(expand = 1, fill = tkinter.X) # PreRecordFunc frame = Frame(optionsFrame) widget = self.createComboBox( @@ -632,17 +639,17 @@ class MopathRecorder(AppShell, DirectObject): 'Function called before sampling each point', PRF_UTILITIES, self.setPreRecordFunc, history = 1, expand = 1) - widget.configure(label_width = 16, label_anchor = Tkinter.W) + widget.configure(label_width = 16, label_anchor = tkinter.W) widget.configure(entryfield_entry_state = 'normal') # Initialize preRecordFunc self.preRecordFunc = eval(PRF_UTILITIES[0]) self.createCheckbutton(frame, 'Recording', 'PRF Active', 'On: Pre Record Func enabled', None, 0, - side = Tkinter.LEFT, fill = Tkinter.BOTH, expand = 0) - frame.pack(expand = 1, fill = Tkinter.X) + side = tkinter.LEFT, fill = tkinter.BOTH, expand = 0) + frame.pack(expand = 1, fill = tkinter.X) # Pack record frame - optionsFrame.pack(fill = Tkinter.X, pady = 2) + optionsFrame.pack(fill = tkinter.X, pady = 2) self.mainNotebook.setnaturalsize() @@ -682,7 +689,7 @@ class MopathRecorder(AppShell, DirectObject): marker if subnode selected """ taskMgr.remove(self.name + '-curveEditTask') - print nodePath.get_key() + print(nodePath.get_key()) if nodePath.get_key() in self.playbackMarkerIds: SEditor.select(self.playbackMarker) elif nodePath.get_key() in self.tangentMarkerIds: @@ -799,7 +806,7 @@ class MopathRecorder(AppShell, DirectObject): def createNewPointSet(self, curveName = None): if curveName == None: - self.pointSetName = self.name + '-ps-' + `self.pointSetCount` + self.pointSetName = self.name + '-ps-' + repr(self.pointSetCount) else: self.pointSetName = curveName # Update dictionary and record pointer to new point set @@ -1137,7 +1144,7 @@ class MopathRecorder(AppShell, DirectObject): def computeCurves(self): # Check to make sure curve fitters have points if (self.curveFitter.getNumSamples() == 0): - print 'MopathRecorder.computeCurves: Must define curve first' + print('MopathRecorder.computeCurves: Must define curve first') return # Create curves # XYZ @@ -1282,8 +1289,8 @@ class MopathRecorder(AppShell, DirectObject): dictName = name else: # Generate a unique name for the dict - dictName = name # + '-' + `nodePath.get_key()` - if not dict.has_key(dictName): + dictName = name # + '-' + repr(nodePath.get_key()) + if dictName not in dict: # Update combo box to include new item names.append(dictName) listbox = menu.component('scrolledlist') @@ -1386,7 +1393,7 @@ class MopathRecorder(AppShell, DirectObject): def desampleCurve(self): if (self.curveFitter.getNumSamples() == 0): - print 'MopathRecorder.desampleCurve: Must define curve first' + print('MopathRecorder.desampleCurve: Must define curve first') return # NOTE: This is destructive, points will be deleted from curve fitter self.curveFitter.desample(self.desampleFrequency) @@ -1400,7 +1407,7 @@ class MopathRecorder(AppShell, DirectObject): def sampleCurve(self, fCompute = 1, curveName = None): if self.curveCollection == None: - print 'MopathRecorder.sampleCurve: Must define curve first' + print('MopathRecorder.sampleCurve: Must define curve first') return # Reset curve fitters self.curveFitter.reset() @@ -1617,7 +1624,7 @@ class MopathRecorder(AppShell, DirectObject): def cropCurve(self): if self.pointSet == None: - print 'Empty Point Set' + print('Empty Point Set') return # Keep handle on old points oldPoints = self.pointSet @@ -1653,15 +1660,15 @@ class MopathRecorder(AppShell, DirectObject): # Use first directory in model path mPath = getModelPath() if mPath.getNumDirectories() > 0: - if `mPath.getDirectory(0)` == '.': + if repr(mPath.getDirectory(0)) == '.': path = '.' else: path = mPath.getDirectory(0).toOsSpecific() else: path = '.' if not os.path.isdir(path): - print 'MopathRecorder Info: Empty Model Path!' - print 'Using current directory' + print('MopathRecorder Info: Empty Model Path!') + print('Using current directory') path = '.' mopathFilename = askopenfilename( defaultextension = '.egg', @@ -1692,15 +1699,15 @@ class MopathRecorder(AppShell, DirectObject): # Use first directory in model path mPath = getModelPath() if mPath.getNumDirectories() > 0: - if `mPath.getDirectory(0)` == '.': + if repr(mPath.getDirectory(0)) == '.': path = '.' else: path = mPath.getDirectory(0).toOsSpecific() else: path = '.' if not os.path.isdir(path): - print 'MopathRecorder Info: Empty Model Path!' - print 'Using current directory' + print('MopathRecorder Info: Empty Model Path!') + print('Using current directory') path = '.' mopathFilename = asksaveasfilename( defaultextension = '.egg', @@ -1734,28 +1741,28 @@ class MopathRecorder(AppShell, DirectObject): def createLabeledEntry(self, parent, category, text, balloonHelp, value = '', command = None, - relief = 'sunken', side = Tkinter.LEFT, + relief = 'sunken', side = tkinter.LEFT, expand = 1, width = 12): frame = Frame(parent) variable = StringVar() variable.set(value) label = Label(frame, text = text) - label.pack(side = Tkinter.LEFT, fill = Tkinter.X) + label.pack(side = tkinter.LEFT, fill = tkinter.X) self.bind(label, balloonHelp) self.widgetDict[category + '-' + text + '-Label'] = label entry = Entry(frame, width = width, relief = relief, textvariable = variable) - entry.pack(side = Tkinter.LEFT, fill = Tkinter.X, expand = expand) + entry.pack(side = tkinter.LEFT, fill = tkinter.X, expand = expand) self.bind(entry, balloonHelp) self.widgetDict[category + '-' + text] = entry self.variableDict[category + '-' + text] = variable if command: entry.bind('', command) - frame.pack(side = side, fill = Tkinter.X, expand = expand) + frame.pack(side = side, fill = tkinter.X, expand = expand) return (frame, label, entry) def createButton(self, parent, category, text, balloonHelp, command, - side = 'top', expand = 0, fill = Tkinter.X): + side = 'top', expand = 0, fill = tkinter.X): widget = Button(parent, text = text) # Do this after the widget so command isn't called on creation widget['command'] = command @@ -1766,10 +1773,10 @@ class MopathRecorder(AppShell, DirectObject): def createCheckbutton(self, parent, category, text, balloonHelp, command, initialState, - side = 'top', fill = Tkinter.X, expand = 0): + side = 'top', fill = tkinter.X, expand = 0): bool = BooleanVar() bool.set(initialState) - widget = Checkbutton(parent, text = text, anchor = Tkinter.W, + widget = Checkbutton(parent, text = text, anchor = tkinter.W, variable = bool) # Do this after the widget so command isn't called on creation widget['command'] = command @@ -1781,8 +1788,8 @@ class MopathRecorder(AppShell, DirectObject): def createRadiobutton(self, parent, side, category, text, balloonHelp, variable, value, - command = None, fill = Tkinter.X, expand = 0): - widget = Radiobutton(parent, text = text, anchor = Tkinter.W, + command = None, fill = tkinter.X, expand = 0): + widget = Radiobutton(parent, text = text, anchor = tkinter.W, variable = variable, value = value) # Do this after the widget so command isn't called on creation widget['command'] = command @@ -1798,10 +1805,10 @@ class MopathRecorder(AppShell, DirectObject): kw['min'] = min kw['maxVelocity'] = maxVelocity kw['resolution'] = resolution - widget = apply(Floater, (parent,), kw) + widget = Floater(parent, **kw) # Do this after the widget so command isn't called on creation widget['command'] = command - widget.pack(fill = Tkinter.X) + widget.pack(fill = tkinter.X) self.bind(widget, balloonHelp) self.widgetDict[category + '-' + text] = widget return widget @@ -1809,10 +1816,10 @@ class MopathRecorder(AppShell, DirectObject): def createAngleDial(self, parent, category, text, balloonHelp, command = None, **kw): kw['text'] = text - widget = apply(AngleDial,(parent,), kw) + widget = AngleDial(parent, **kw) # Do this after the widget so command isn't called on creation widget['command'] = command - widget.pack(fill = Tkinter.X) + widget.pack(fill = tkinter.X) self.bind(widget, balloonHelp) self.widgetDict[category + '-' + text] = widget return widget @@ -1820,13 +1827,13 @@ class MopathRecorder(AppShell, DirectObject): def createSlider(self, parent, category, text, balloonHelp, command = None, min = 0.0, max = 1.0, resolution = None, - side = Tkinter.TOP, fill = Tkinter.X, expand = 1, **kw): + side = tkinter.TOP, fill = tkinter.X, expand = 1, **kw): kw['text'] = text kw['min'] = min kw['max'] = max kw['resolution'] = resolution #widget = apply(EntryScale, (parent,), kw) - widget = apply(Slider, (parent,), kw) + widget = Slider(parent, **kw) # Do this after the widget so command isn't called on creation widget['command'] = command widget.pack(side = side, fill = fill, expand = expand) @@ -1837,12 +1844,12 @@ class MopathRecorder(AppShell, DirectObject): def createEntryScale(self, parent, category, text, balloonHelp, command = None, min = 0.0, max = 1.0, resolution = None, - side = Tkinter.TOP, fill = Tkinter.X, expand = 1, **kw): + side = tkinter.TOP, fill = tkinter.X, expand = 1, **kw): kw['text'] = text kw['min'] = min kw['max'] = max kw['resolution'] = resolution - widget = apply(EntryScale, (parent,), kw) + widget = EntryScale(parent, **kw) # Do this after the widget so command isn't called on creation widget['command'] = command widget.pack(side = side, fill = fill, expand = expand) @@ -1854,10 +1861,10 @@ class MopathRecorder(AppShell, DirectObject): command = None, **kw): # Set label's text kw['text'] = text - widget = apply(Vector2Entry, (parent,), kw) + widget = Vector2Entry(parent, **kw) # Do this after the widget so command isn't called on creation widget['command'] = command - widget.pack(fill = Tkinter.X) + widget.pack(fill = tkinter.X) self.bind(widget, balloonHelp) self.widgetDict[category + '-' + text] = widget return widget @@ -1866,10 +1873,10 @@ class MopathRecorder(AppShell, DirectObject): command = None, **kw): # Set label's text kw['text'] = text - widget = apply(Vector3Entry, (parent,), kw) + widget = Vector3Entry(parent, **kw) # Do this after the widget so command isn't called on creation widget['command'] = command - widget.pack(fill = Tkinter.X) + widget.pack(fill = tkinter.X) self.bind(widget, balloonHelp) self.widgetDict[category + '-' + text] = widget return widget @@ -1878,10 +1885,10 @@ class MopathRecorder(AppShell, DirectObject): command = None, **kw): # Set label's text kw['text'] = text - widget = apply(ColorEntry, (parent,) ,kw) + widget = ColorEntry(parent, **kw) # Do this after the widget so command isn't called on creation widget['command'] = command - widget.pack(fill = Tkinter.X) + widget.pack(fill = tkinter.X) self.bind(widget, balloonHelp) self.widgetDict[category + '-' + text] = widget return widget @@ -1891,13 +1898,13 @@ class MopathRecorder(AppShell, DirectObject): optionVar = StringVar() if len(items) > 0: optionVar.set(items[0]) - widget = Pmw.OptionMenu(parent, labelpos = Tkinter.W, label_text = text, + widget = Pmw.OptionMenu(parent, labelpos = tkinter.W, label_text = text, label_width = 12, menu_tearoff = 1, menubutton_textvariable = optionVar, items = items) # Do this after the widget so command isn't called on creation widget['command'] = command - widget.pack(fill = Tkinter.X) + widget.pack(fill = tkinter.X) self.bind(widget.component('menubutton'), balloonHelp) self.widgetDict[category + '-' + text] = widget self.variableDict[category + '-' + text] = optionVar @@ -1905,9 +1912,9 @@ class MopathRecorder(AppShell, DirectObject): def createComboBox(self, parent, category, text, balloonHelp, items, command, history = 0, - side = Tkinter.LEFT, expand = 0, fill = Tkinter.X): + side = tkinter.LEFT, expand = 0, fill = tkinter.X): widget = Pmw.ComboBox(parent, - labelpos = Tkinter.W, + labelpos = tkinter.W, label_text = text, label_anchor = 'e', label_width = 12, @@ -1959,14 +1966,14 @@ class MopathRecorder(AppShell, DirectObject): def bindMotionPathToNode(self): if self.curveCollection == None: - print '----Error: you need to select or create a curve first!' + print('----Error: you need to select or create a curve first!') return self.accept('MP_checkName', self.bindMotionPath) self.askName = namePathPanel(MopathRecorder.count) return def bindMotionPath(self,name=None,test=None): - print test + print(test) self.ignore('MP_checkName') del self.askName self.curveCollection.getCurve(0).setName(name) @@ -1993,7 +2000,7 @@ class MopathRecorder(AppShell, DirectObject): If the list is not None, it will put the vurve back into the curve list. else, do nothing. ''' - print curveList + print(curveList) self.ignore('curveListFor'+self.name) if curveList != None: for collection in curveList: @@ -2037,8 +2044,8 @@ class namePathPanel(AppShell): dataFrame = Frame(mainFrame) label = Label(dataFrame, text='This name will be used as a reference for this Path.',font=('MSSansSerif', 10)) - label.pack(side = Tkinter.TOP, expand = 0, fill = Tkinter.X) - dataFrame.pack(side = Tkinter.TOP, expand = 0, fill = Tkinter.X, padx=5, pady=10) + label.pack(side = tkinter.TOP, expand = 0, fill = tkinter.X) + dataFrame.pack(side = tkinter.TOP, expand = 0, fill = tkinter.X, padx=5, pady=10) dataFrame = Frame(mainFrame) self.inputZone = Pmw.EntryField(dataFrame, labelpos='w', label_text = 'Name Selected Path: ', @@ -2046,14 +2053,14 @@ class namePathPanel(AppShell): label_font=('MSSansSerif', 10), validate = None, entry_width = 20) - self.inputZone.pack(side = Tkinter.LEFT, fill=Tkinter.X,expand=0) + self.inputZone.pack(side = tkinter.LEFT, fill=tkinter.X,expand=0) self.button_ok = Button(dataFrame, text="OK", command=self.ok_press,width=10) - self.button_ok.pack(fill=Tkinter.X,expand=0,side=Tkinter.LEFT, padx = 3) + self.button_ok.pack(fill=tkinter.X,expand=0,side=tkinter.LEFT, padx = 3) - dataFrame.pack(side = Tkinter.TOP, expand = 0, fill = Tkinter.X, padx=10, pady=10) + dataFrame.pack(side = tkinter.TOP, expand = 0, fill = tkinter.X, padx=10, pady=10) - mainFrame.pack(expand = 1, fill = Tkinter.BOTH) + mainFrame.pack(expand = 1, fill = tkinter.BOTH) diff --git a/contrib/src/sceneeditor/seParticleEffect.py b/contrib/src/sceneeditor/seParticleEffect.py index 8ad3a658a8..a36f7d4025 100644 --- a/contrib/src/sceneeditor/seParticleEffect.py +++ b/contrib/src/sceneeditor/seParticleEffect.py @@ -209,9 +209,9 @@ class ParticleEffect(NodePath): """loadConfig(filename)""" #try: # if vfs: - print vfs.readFile(filename) - exec vfs.readFile(filename) - print "Particle Effect Reading using VFS" + print(vfs.readFile(filename)) + exec(vfs.readFile(filename)) + print("Particle Effect Reading using VFS") # else: # execfile(filename.toOsSpecific()) # print "Shouldnt be wrong" diff --git a/contrib/src/sceneeditor/seParticlePanel.py b/contrib/src/sceneeditor/seParticlePanel.py index 099e31012d..3c359e2628 100644 --- a/contrib/src/sceneeditor/seParticlePanel.py +++ b/contrib/src/sceneeditor/seParticlePanel.py @@ -2,9 +2,7 @@ # Import Tkinter, Pmw, and the floater code from this directory tree. from direct.tkwidgets.AppShell import AppShell -from tkFileDialog import * -from tkSimpleDialog import askstring -import os, Pmw, Tkinter +import os, Pmw, sys from direct.tkwidgets.Dial import AngleDial from direct.tkwidgets.Floater import Floater from direct.tkwidgets.Slider import Slider @@ -15,6 +13,15 @@ import seForceGroup import seParticles import seParticleEffect + +if sys.version_info >= (3, 0): + from tkinter.filedialog import * + from tkinter.simpledialog import askstring +else: + from tkFileDialog import * + from tkSimpleDialog import askstring + + class ParticlePanel(AppShell): # Override class variables appname = 'Particle Panel' @@ -774,7 +781,7 @@ class ParticlePanel(AppShell): kw['min'] = min kw['resolution'] = resolution kw['numDigits'] = numDigits - widget = apply(Floater, (parent,), kw) + widget = Floater(parent, **kw) # Do this after the widget so command isn't called on creation widget['command'] = command widget.pack(fill = X) @@ -786,7 +793,7 @@ class ParticlePanel(AppShell): command = None, **kw): kw['text'] = text kw['style'] = 'mini' - widget = apply(AngleDial,(parent,), kw) + widget = AngleDial(parent, **kw) # Do this after the widget so command isn't called on creation widget['command'] = command widget.pack(fill = X) @@ -801,7 +808,7 @@ class ParticlePanel(AppShell): kw['min'] = min kw['max'] = max kw['resolution'] = resolution - widget = apply(Slider, (parent,), kw) + widget = Slider(parent, **kw) # Do this after the widget so command isn't called on creation widget['command'] = command widget.pack(fill = X) @@ -813,7 +820,7 @@ class ParticlePanel(AppShell): command = None, **kw): # Set label's text kw['text'] = text - widget = apply(Vector2Entry, (parent,), kw) + widget = Vector2Entry(parent, **kw) # Do this after the widget so command isn't called on creation widget['command'] = command widget.pack(fill = X) @@ -825,7 +832,7 @@ class ParticlePanel(AppShell): command = None, **kw): # Set label's text kw['text'] = text - widget = apply(Vector3Entry, (parent,), kw) + widget = Vector3Entry(parent, **kw) # Do this after the widget so command isn't called on creation widget['command'] = command widget.pack(fill = X) @@ -837,7 +844,7 @@ class ParticlePanel(AppShell): command = None, **kw): # Set label's text kw['text'] = text - widget = apply(ColorEntry, (parent,) ,kw) + widget = ColorEntry(parent, **kw) # Do this after the widget so command isn't called on creation widget['command'] = command widget.pack(fill = X) @@ -992,7 +999,7 @@ class ParticlePanel(AppShell): self.mainNotebook.selectpage('System') self.updateInfo('System') else: - print 'ParticlePanel: No effect named ' + name + print('ParticlePanel: No effect named ' + name) def toggleEffect(self, effect, var): if var.get(): @@ -1041,15 +1048,15 @@ class ParticlePanel(AppShell): # Find path to particle directory pPath = getParticlePath() if pPath.getNumDirectories() > 0: - if `pPath.getDirectory(0)` == '.': + if repr(pPath.getDirectory(0)) == '.': path = '.' else: path = pPath.getDirectory(0).toOsSpecific() else: path = '.' if not os.path.isdir(path): - print 'ParticlePanel Warning: Invalid default DNA directory!' - print 'Using current directory' + print('ParticlePanel Warning: Invalid default DNA directory!') + print('Using current directory') path = '.' particleFilename = askopenfilename( defaultextension = '.ptf', @@ -1070,15 +1077,15 @@ class ParticlePanel(AppShell): # Find path to particle directory pPath = getParticlePath() if pPath.getNumDirectories() > 0: - if `pPath.getDirectory(0)` == '.': + if repr(pPath.getDirectory(0)) == '.': path = '.' else: path = pPath.getDirectory(0).toOsSpecific() else: path = '.' if not os.path.isdir(path): - print 'ParticlePanel Warning: Invalid default DNA directory!' - print 'Using current directory' + print('ParticlePanel Warning: Invalid default DNA directory!') + print('Using current directory') path = '.' particleFilename = asksaveasfilename( defaultextension = '.ptf', @@ -1654,7 +1661,7 @@ class ParticlePanel(AppShell): def setRendererSpriteNonAnimatedTheta(self, theta): self.particles.renderer.setNonanimatedTheta(theta) def setRendererSpriteBlendMethod(self, blendMethod): - print blendMethod + print(blendMethod) if blendMethod == 'PP_NO_BLEND': bMethod = BaseParticleRenderer.PPNOBLEND elif blendMethod == 'PP_BLEND_LINEAR': @@ -1863,7 +1870,7 @@ class ParticlePanel(AppShell): count, force): def setVec(vec, f = force): f.setVector(vec[0], vec[1], vec[2]) - forceName = 'Vector Force-' + `count` + forceName = 'Vector Force-' + repr(count) frame = self.createForceFrame(forcePage, forceName, force) self.createLinearForceWidgets(frame, pageName, forceName, force) vec = force.getLocalVector() @@ -1875,7 +1882,7 @@ class ParticlePanel(AppShell): def createLinearRandomForceWidget(self, forcePage, pageName, count, force, type): - forceName = type + ' Force-' + `count` + forceName = type + ' Force-' + repr(count) frame = self.createForceFrame(forcePage, forceName, force) self.createLinearForceWidgets(frame, pageName, forceName, force) self.createForceActiveWidget(frame, pageName, forceName, force) @@ -1884,7 +1891,7 @@ class ParticlePanel(AppShell): count, force): def setCoef(coef, f = force): f.setCoef(coef) - forceName = 'Friction Force-' + `count` + forceName = 'Friction Force-' + repr(count) frame = self.createForceFrame(forcePage, forceName, force) self.createLinearForceWidgets(frame, pageName, forceName, force) self.createFloater(frame, pageName, forceName + ' Coef', @@ -1895,7 +1902,7 @@ class ParticlePanel(AppShell): def createLinearCylinderVortexForceWidget(self, forcePage, pageName, count, force): - forceName = 'Vortex Force-' + `count` + forceName = 'Vortex Force-' + repr(count) def setCoef(coef, f = force): f.setCoef(coef) def setLength(length, f = force): @@ -1934,7 +1941,7 @@ class ParticlePanel(AppShell): f.setForceCenter(Point3(vec[0], vec[1], vec[2])) def setRadius(radius, f = force): f.setRadius(radius) - forceName = type + ' Force-' + `count` + forceName = type + ' Force-' + repr(count) frame = self.createForceFrame(forcePage, forceName, force) self.createLinearForceWidgets(frame, pageName, forceName, force) var = self.createOptionMenu( diff --git a/contrib/src/sceneeditor/seParticles.py b/contrib/src/sceneeditor/seParticles.py index 655d06b804..a4f0d0e5d6 100644 --- a/contrib/src/sceneeditor/seParticles.py +++ b/contrib/src/sceneeditor/seParticles.py @@ -93,7 +93,7 @@ class Particles(ParticleSystem): elif (type == "OrientedParticleFactory"): self.factory = OrientedParticleFactory.OrientedParticleFactory() else: - print "unknown factory type: %s" % type + print("unknown factory type: %s" % type) return None self.factory.setLifespanBase(0.5) ParticleSystem.ParticleSystem.setFactory(self, self.factory) @@ -132,7 +132,7 @@ class Particles(ParticleSystem): # See sourceFileName and sourceNodeName in SpriteParticleRenderer-extensions.py self.renderer.setTextureFromNode() else: - print "unknown renderer type: %s" % type + print("unknown renderer type: %s" % type) return None ParticleSystem.ParticleSystem.setRenderer(self, self.renderer) @@ -163,7 +163,7 @@ class Particles(ParticleSystem): elif (type == "TangentRingEmitter"): self.emitter = TangentRingEmitter.TangentRingEmitter() else: - print "unknown emitter type: %s" % type + print("unknown emitter type: %s" % type) return None ParticleSystem.ParticleSystem.setEmitter(self, self.emitter) diff --git a/contrib/src/sceneeditor/sePlacer.py b/contrib/src/sceneeditor/sePlacer.py index 3f2b3b4b75..15804629a7 100644 --- a/contrib/src/sceneeditor/sePlacer.py +++ b/contrib/src/sceneeditor/sePlacer.py @@ -5,9 +5,16 @@ from direct.directtools.DirectGlobals import * from direct.tkwidgets.AppShell import AppShell from direct.tkwidgets.Dial import AngleDial from direct.tkwidgets.Floater import Floater -from Tkinter import Button, Menubutton, Menu, StringVar from panda3d.core import * -import Tkinter, Pmw +import sys, Pmw + +if sys.version_info >= (3, 0): + from tkinter import Button, Menubutton, Menu, StringVar + import tkinter +else: + from Tkinter import Button, Menubutton, Menu, StringVar + import Tkinter as tkinter + """ TODO: Task to monitor pose @@ -84,7 +91,7 @@ class Placer(AppShell): def createInterface(self): # The interior of the toplevel panel interior = self.interior() - interior['relief'] = Tkinter.FLAT + interior['relief'] = tkinter.FLAT # Add placer commands to menubar self.menuBar.addmenu('Placer', 'Placer Panel Operations') self.menuBar.addmenuitem('Placer', 'command', @@ -113,7 +120,7 @@ class Placer(AppShell): # Get a handle to the menu frame menuFrame = self.menuFrame self.nodePathMenu = Pmw.ComboBox( - menuFrame, labelpos = Tkinter.W, label_text = 'Node Path:', + menuFrame, labelpos = tkinter.W, label_text = 'Node Path:', entry_width = 20, selectioncommand = self.selectNodePathNamed, scrolledlist_items = self.nodePathNames) @@ -168,7 +175,7 @@ class Placer(AppShell): tag_text = 'Position', tag_font=('MSSansSerif', 14), tag_activebackground = '#909090', - ring_relief = Tkinter.RIDGE) + ring_relief = tkinter.RIDGE) posMenubutton = posGroup.component('tag') self.bind(posMenubutton, 'Position menu operations') posMenu = Menu(posMenubutton, tearoff = 0) @@ -182,7 +189,7 @@ class Placer(AppShell): # Create the dials self.posX = self.createcomponent('posX', (), None, Floater, (posInterior,), - text = 'X', relief = Tkinter.FLAT, + text = 'X', relief = tkinter.FLAT, value = 0.0, label_foreground = 'Red') self.posX['commandData'] = ['x'] @@ -193,7 +200,7 @@ class Placer(AppShell): self.posY = self.createcomponent('posY', (), None, Floater, (posInterior,), - text = 'Y', relief = Tkinter.FLAT, + text = 'Y', relief = tkinter.FLAT, value = 0.0, label_foreground = '#00A000') self.posY['commandData'] = ['y'] @@ -204,7 +211,7 @@ class Placer(AppShell): self.posZ = self.createcomponent('posZ', (), None, Floater, (posInterior,), - text = 'Z', relief = Tkinter.FLAT, + text = 'Z', relief = tkinter.FLAT, value = 0.0, label_foreground = 'Blue') self.posZ['commandData'] = ['z'] @@ -219,7 +226,7 @@ class Placer(AppShell): tag_text = 'Orientation', tag_font=('MSSansSerif', 14), tag_activebackground = '#909090', - ring_relief = Tkinter.RIDGE) + ring_relief = tkinter.RIDGE) hprMenubutton = hprGroup.component('tag') self.bind(hprMenubutton, 'Orientation menu operations') hprMenu = Menu(hprMenubutton, tearoff = 0) @@ -234,7 +241,7 @@ class Placer(AppShell): AngleDial, (hprInterior,), style = 'mini', text = 'H', value = 0.0, - relief = Tkinter.FLAT, + relief = tkinter.FLAT, label_foreground = 'blue') self.hprH['commandData'] = ['h'] self.hprH['preCallback'] = self.xformStart @@ -246,7 +253,7 @@ class Placer(AppShell): AngleDial, (hprInterior,), style = 'mini', text = 'P', value = 0.0, - relief = Tkinter.FLAT, + relief = tkinter.FLAT, label_foreground = 'red') self.hprP['commandData'] = ['p'] self.hprP['preCallback'] = self.xformStart @@ -258,7 +265,7 @@ class Placer(AppShell): AngleDial, (hprInterior,), style = 'mini', text = 'R', value = 0.0, - relief = Tkinter.FLAT, + relief = tkinter.FLAT, label_foreground = '#00A000') self.hprR['commandData'] = ['r'] self.hprR['preCallback'] = self.xformStart @@ -276,7 +283,7 @@ class Placer(AppShell): tag_pyclass = Menubutton, tag_font=('MSSansSerif', 14), tag_activebackground = '#909090', - ring_relief = Tkinter.RIDGE) + ring_relief = tkinter.RIDGE) self.scaleMenubutton = scaleGroup.component('tag') self.bind(self.scaleMenubutton, 'Scale menu operations') self.scaleMenubutton['textvariable'] = self.scalingMode @@ -302,7 +309,7 @@ class Placer(AppShell): self.scaleX = self.createcomponent('scaleX', (), None, Floater, (scaleInterior,), text = 'X Scale', - relief = Tkinter.FLAT, + relief = tkinter.FLAT, min = 0.0001, value = 1.0, resetValue = 1.0, label_foreground = 'Red') @@ -315,7 +322,7 @@ class Placer(AppShell): self.scaleY = self.createcomponent('scaleY', (), None, Floater, (scaleInterior,), text = 'Y Scale', - relief = Tkinter.FLAT, + relief = tkinter.FLAT, min = 0.0001, value = 1.0, resetValue = 1.0, label_foreground = '#00A000') @@ -328,7 +335,7 @@ class Placer(AppShell): self.scaleZ = self.createcomponent('scaleZ', (), None, Floater, (scaleInterior,), text = 'Z Scale', - relief = Tkinter.FLAT, + relief = tkinter.FLAT, min = 0.0001, value = 1.0, resetValue = 1.0, label_foreground = 'Blue') @@ -508,8 +515,8 @@ class Placer(AppShell): dictName = name else: # Generate a unique name for the dict - dictName = name + '-' + `nodePath.get_key()` - if not dict.has_key(dictName): + dictName = name + '-' + repr(nodePath.get_key()) + if dictName not in dict: # Update combo box to include new item names.append(dictName) listbox = menu.component('scrolledlist') @@ -769,12 +776,12 @@ class Placer(AppShell): posString = '%.2f, %.2f, %.2f' % (pos[0], pos[1], pos[2]) hprString = '%.2f, %.2f, %.2f' % (hpr[0], hpr[1], hpr[2]) scaleString = '%.2f, %.2f, %.2f' % (scale[0], scale[1], scale[2]) - print 'NodePath: %s' % name - print 'Pos: %s' % posString - print 'Hpr: %s' % hprString - print 'Scale: %s' % scaleString - print ('%s.setPosHprScale(%s, %s, %s)' % - (name, posString, hprString, scaleString)) + print('NodePath: %s' % name) + print('Pos: %s' % posString) + print('Hpr: %s' % hprString) + print('Scale: %s' % scaleString) + print(('%s.setPosHprScale(%s, %s, %s)' % + (name, posString, hprString, scaleString))) def onDestroy(self, event): # Remove hooks diff --git a/contrib/src/sceneeditor/seSceneGraphExplorer.py b/contrib/src/sceneeditor/seSceneGraphExplorer.py index fc7f29370a..163287965c 100644 --- a/contrib/src/sceneeditor/seSceneGraphExplorer.py +++ b/contrib/src/sceneeditor/seSceneGraphExplorer.py @@ -9,9 +9,16 @@ # ################################################################# from direct.showbase.DirectObject import DirectObject -from Tkinter import IntVar, Frame, Label from seTree import TreeNode, TreeItem -import Pmw, Tkinter + +import Pmw, sys + +if sys.version_info >= (3, 0): + from tkinter import IntVar, Frame, Label + import tkinter +else: + from Tkinter import IntVar, Frame, Label + import Tkinter as tkinter # changing these strings requires changing sceneEditor.py SGE_ strs too! # This list of items will be showed on the pop out window when user right click on @@ -57,7 +64,7 @@ class seSceneGraphExplorer(Pmw.MegaWidget, DirectObject): # Setup up container interior = self.interior() - interior.configure(relief = Tkinter.GROOVE, borderwidth = 2) + interior.configure(relief = tkinter.GROOVE, borderwidth = 2) # Create a label and an entry self._scrolledCanvas = self.createcomponent( @@ -69,7 +76,7 @@ class seSceneGraphExplorer(Pmw.MegaWidget, DirectObject): self._canvas = self._scrolledCanvas.component('canvas') self._canvas['scrollregion'] = ('0i', '0i', '2i', '4i') self._scrolledCanvas.resizescrollregion() - self._scrolledCanvas.pack(padx = 3, pady = 3, expand=1, fill = Tkinter.BOTH) + self._scrolledCanvas.pack(padx = 3, pady = 3, expand=1, fill = tkinter.BOTH) self._canvas.bind('', self.mouse2Down) self._canvas.bind('', self.mouse2Motion) @@ -91,8 +98,8 @@ class seSceneGraphExplorer(Pmw.MegaWidget, DirectObject): (), None, Label, (interior,), text = 'Active Reparent Target: ', - anchor = Tkinter.W, justify = Tkinter.LEFT) - self._label.pack(fill = Tkinter.X) + anchor = tkinter.W, justify = tkinter.LEFT) + self._label.pack(fill = tkinter.X) # Add update parent label def updateLabel(nodePath = None, s = self): @@ -145,7 +152,7 @@ class seSceneGraphExplorer(Pmw.MegaWidget, DirectObject): if item!= None: item.select(callBack) else: - print '----SGE: Error Selection' + print('----SGE: Error Selection') class SceneGraphExplorerItem(TreeItem): diff --git a/contrib/src/sceneeditor/seSelection.py b/contrib/src/sceneeditor/seSelection.py index 0d34ad120a..b7d9b260dc 100644 --- a/contrib/src/sceneeditor/seSelection.py +++ b/contrib/src/sceneeditor/seSelection.py @@ -70,7 +70,7 @@ class SelectedNodePaths(DirectObject): """ Select the specified node path. Multiselect as required """ # Do nothing if nothing selected if not nodePath: - print 'Nothing selected!!' + print('Nothing selected!!') return None # Reset selected objects and highlight if multiSelect is false @@ -124,7 +124,7 @@ class SelectedNodePaths(DirectObject): Return a list of all selected node paths. No verification of connectivity is performed on the members of the list """ - return self.selectedDict.values()[:] + return list(self.selectedDict.values()) def __getitem__(self,index): return self.getSelectedAsList()[index] @@ -141,7 +141,7 @@ class SelectedNodePaths(DirectObject): return None def getDeselectedAsList(self): - return self.deselectedDict.values()[:] + return list(self.deselectedDict.values()) def getDeselectedDict(self, id): """ @@ -385,7 +385,7 @@ class DirectBoundingBox: return '%.2f %.2f %.2f' % (vec[0], vec[1], vec[2]) def __repr__(self): - return (`self.__class__` + + return (repr(self.__class__) + '\nNodePath:\t%s\n' % self.nodePath.getName() + 'Min:\t\t%s\n' % self.vecAsString(self.min) + 'Max:\t\t%s\n' % self.vecAsString(self.max) + diff --git a/contrib/src/sceneeditor/seSession.py b/contrib/src/sceneeditor/seSession.py index ab466c4388..c8e7a1a20f 100644 --- a/contrib/src/sceneeditor/seSession.py +++ b/contrib/src/sceneeditor/seSession.py @@ -480,7 +480,7 @@ class SeSession(DirectObject): ### Customized DirectSession def isNotCycle(self, nodePath, parent): if nodePath.get_key() == parent.get_key(): - print 'DIRECT.reparent: Invalid parent' + print('DIRECT.reparent: Invalid parent') return 0 elif parent.hasParent(): return self.isNotCycle(nodePath, parent.getParent()) @@ -735,8 +735,8 @@ class SeSession(DirectObject): ### Customized DirectSession hprB = base.camera.getHpr() posE = Point3((radius*-1.41)+center.getX(), (radius*-1.41)+center.getY(), (radius*1.41)+center.getZ()) hprE = Point3(-45, -38, 0) - print posB, hprB - print posE, hprE + print(posB, hprB) + print(posE, hprE) posInterval1 = base.camera.posInterval(time, posE, bakeInStart = 1) posInterval2 = base.camera.posInterval(time, posB, bakeInStart = 1) diff --git a/contrib/src/sceneeditor/seTree.py b/contrib/src/sceneeditor/seTree.py index 9685d54b35..9927c11112 100644 --- a/contrib/src/sceneeditor/seTree.py +++ b/contrib/src/sceneeditor/seTree.py @@ -12,15 +12,21 @@ # ################################################################# -import os, sys, string, Pmw, Tkinter +import os, sys, string, Pmw from direct.showbase.DirectObject import DirectObject -from Tkinter import IntVar, Menu, PhotoImage, Label, Frame, Entry from panda3d.core import * +if sys.version_info >= (3, 0): + import tkinter + from tkinter import IntVar, Menu, PhotoImage, Label, Frame, Entry +else: + import Tkinter as tkinter + from Tkinter import IntVar, Menu, PhotoImage, Label, Frame, Entry + # Initialize icon directory ICONDIR = getModelPath().findFile(Filename('icons')).toOsSpecific() if not os.path.isdir(ICONDIR): - raise RuntimeError, "can't find DIRECT icon directory (%s)" % `ICONDIR` + raise RuntimeError("can't find DIRECT icon directory (%r)" % ICONDIR) class TreeNode: @@ -187,9 +193,9 @@ class TreeNode: oldcursor = self.canvas['cursor'] self.canvas['cursor'] = "watch" self.canvas.update() - self.canvas.delete(Tkinter.ALL) # XXX could be more subtle + self.canvas.delete(tkinter.ALL) # XXX could be more subtle self.draw(7, 2) - x0, y0, x1, y1 = self.canvas.bbox(Tkinter.ALL) + x0, y0, x1, y1 = self.canvas.bbox(tkinter.ALL) self.canvas.configure(scrollregion=(0, 0, x1, y1)) self.canvas['cursor'] = oldcursor @@ -208,7 +214,7 @@ class TreeNode: self.kidKeys = [] for item in sublist: key = item.GetKey() - if self.children.has_key(key): + if key in self.children: child = self.children[key] else: child = TreeNode(self.canvas, self, item, self.menuList) @@ -309,7 +315,7 @@ class TreeNode: def edit(self, event=None): self.entry = Entry(self.label, bd=0, highlightthickness=1, width=0) self.entry.insert(0, self.label['text']) - self.entry.selection_range(0, Tkinter.END) + self.entry.selection_range(0, tkinter.END) self.entry.pack(ipadx=5) self.entry.focus_set() self.entry.bind("", self.edit_finish) @@ -344,7 +350,7 @@ class TreeNode: for item in sublist: key = item.GetKey() # Use existing child or create new TreeNode if none exists - if self.children.has_key(key): + if key in self.children: child = self.children[key] else: child = TreeNode(self.canvas, self, item, self.menuList)