def __init__(self, arg=0, testMode=False, **kwargs): """With a wx.App some things get done here, before App.__init__ then some further code is launched in OnInit() which occurs after """ if profiling: import cProfile, time profile = cProfile.Profile() profile.enable() t0 = time.time() self._appLoaded = False # set to true when all frames are created self.coder = None self.runner = None self.version = psychopy.__version__ # set default paths and prefs self.prefs = psychopy.prefs self.keys = self.prefs.keys self.prefs.pageCurrent = 0 # track last-viewed page, can return there self.IDs = IDStore() self.urls = urls.urls self.quitting = False # check compatibility with last run version (before opening windows) self.firstRun = False self.testMode = testMode self._stdout = sys.stdout self._stderr = sys.stderr self._stdoutFrame = None if not self.testMode: self._lastRunLog = open(os.path.join( self.prefs.paths['userPrefsDir'], 'last_app_load.log'), 'w') sys.stderr = sys.stdout = lastLoadErrs = self._lastRunLog logging.console.setLevel(logging.DEBUG) # indicates whether we're running for testing purposes self.osfSession = None self.pavloviaSession = None self.copiedRoutine = None self.copiedCompon = None self._allFrames = frametracker.openFrames # ordered; order updated with self.onNewTopWindow wx.App.__init__(self, arg) # import localization after wx: from psychopy import localization # needed by splash screen self.localization = localization self.locale = localization.setLocaleWX() self.locale.AddCatalog(self.GetAppName()) self.onInit(testMode=testMode, **kwargs) if profiling: profile.disable() print("time to load app = {:.2f}".format(time.time()-t0)) profile.dump_stats('profileLaunchApp.profile')
def __init__(self, arg=0, testMode=False, **kwargs): """With a wx.App some things get done here, before App.__init__ then some further code is launched in OnInit() which occurs after """ if profiling: import cProfile, time profile = cProfile.Profile() profile.enable() t0 = time.time() self._appLoaded = False # set to true when all frames are created self.coder = None self.version = psychopy.__version__ # set default paths and prefs self.prefs = psychopy.prefs self.keys = self.prefs.keys self.prefs.pageCurrent = 0 # track last-viewed page, can return there self.IDs = IDStore() self.urls = urls.urls self.quitting = False # check compatibility with last run version (before opening windows) self.firstRun = False self.testMode = testMode if self.prefs.app['debugMode']: logging.console.setLevel(logging.DEBUG) # indicates whether we're running for testing purposes self.osfSession = None self.pavloviaSession = None self.copiedRoutine = None self.copiedCompon = None self._allFrames = frametracker.openFrames # ordered; order updated with self.onNewTopWindow wx.App.__init__(self, arg) # import localization after wx: from psychopy import localization # needed by splash screen self.localization = localization self.locale = localization.setLocaleWX() self.locale.AddCatalog(self.GetAppName()) self.onInit(testMode=testMode, **kwargs) if profiling: profile.disable() print("time to load app = {:.2f}".format(time.time()-t0)) profile.dump_stats('profileLaunchApp.profile')
def __init__(self, arg=0, testMode=False, **kwargs): """With a wx.App some things get done here, before App.__init__ then some further code is launched in OnInit() which occurs after """ self._appLoaded = False # set to true when all frames are created self.coder = None self.version = psychopy.__version__ # set default paths and prefs self.prefs = psychopy.prefs self.keys = self.prefs.keys self.prefs.pageCurrent = 0 # track last-viewed page, can return there self.IDs = IDStore() self.urls = urls.urls self.quitting = False # check compatibility with last run version (before opening windows) self.firstRun = False self.testMode = testMode if self.prefs.app['debugMode']: logging.console.setLevel(logging.DEBUG) # indicates whether we're running for testing purposes self.osfSession = None self.pavloviaSession = None self.copiedRoutine = None self.copiedCompon = None self._allFrames = frametracker.openFrames # ordered; order updated with self.onNewTopWindow wx.App.__init__(self, arg) # import localization after wx: from psychopy import localization # needed by splash screen self.localization = localization self.locale = localization.setLocaleWX() self.locale.AddCatalog(self.GetAppName()) self.onInit(testMode=testMode, **kwargs)
def __init__(self, arg=0, testMode=False, **kwargs): """With a wx.App some things get done here, before App.__init__ then some further code is launched in OnInit() which occurs after """ self.coder = None self.version = psychopy.__version__ # set default paths and prefs self.prefs = psychopy.prefs self.keys = self.prefs.keys self.prefs.pageCurrent = 0 # track last-viewed page, can return there self.IDs = IDStore() self.urls = urls.urls self.quitting = False # check compatibility with last run version (before opening windows) self.firstRun = False self.testMode = testMode if self.prefs.app['debugMode']: logging.console.setLevel(logging.DEBUG) # indicates whether we're running for testing purposes self.osf_session = None self.copiedRoutine = None self.copiedCompon = None self._allFrames = [] # ordered; order updated with self.onNewTopWindow wx.App.__init__(self, arg) # import localization after wx: from psychopy import localization # needed by splash screen self.localization = localization self.locale = localization.setLocaleWX() self.locale.AddCatalog(self.GetAppName()) self.onInit(testMode=testMode, **kwargs)
def onInit(self, showSplash=True, testMode=False): """ :Parameters: testMode: bool If set to True then startup wizard won't appear and stdout/stderr won't be redirected to the Coder """ self.version = psychopy.__version__ self.SetAppName('PsychoPy2') # import localization after wx: from psychopy import localization # needed by splash screen self.localization = localization self.locale = localization.setLocaleWX() self.locale.AddCatalog(self.GetAppName()) # set default paths and prefs self.prefs = psychopy.prefs if self.prefs.app['debugMode']: logging.console.setLevel(logging.DEBUG) # indicates whether we're running for testing purposes self.testMode = testMode self.osf_session = None if showSplash: # show splash screen splashFile = os.path.join( self.prefs.paths['resources'], 'psychopySplash.png') splashBitmap = wx.Image(name=splashFile).ConvertToBitmap() splash = AS.AdvancedSplash(None, bitmap=splashBitmap, timeout=3000, agwStyle=AS.AS_TIMEOUT | AS.AS_CENTER_ON_SCREEN, shadowcolour=wx.RED) # transparency? splash.SetTextPosition((10, 240)) splash.SetText(_translate(" Loading libraries...")) else: splash = None # SLOW IMPORTS - these need to be imported after splash screen starts # but then that they end up being local so keep track in self if splash: splash.SetText(_translate(" Loading PsychoPy2...")) from psychopy.compatibility import checkCompatibility # import coder and builder here but only use them later from psychopy.app import coder, builder, dialogs, urls self.keys = self.prefs.keys self.prefs.pageCurrent = 0 # track last-viewed page, can return there self.IDs = IDStore() self.urls = urls.urls self.quitting = False # check compatibility with last run version (before opening windows) self.firstRun = False if '--firstrun' in sys.argv: del sys.argv[sys.argv.index('--firstrun')] self.firstRun = True if 'lastVersion' not in self.prefs.appData: # must be before 1.74.00 last = self.prefs.appData['lastVersion'] = '1.73.04' self.firstRun = True else: last = self.prefs.appData['lastVersion'] if self.firstRun and not self.testMode: self.firstrunWizard() # setup links for URLs # on a mac, don't exit when the last frame is deleted, just show menu if sys.platform == 'darwin': self.menuFrame = MenuFrame(parent=None, app=self) # get preferred view(s) from prefs and previous view if self.prefs.app['defaultView'] == 'last': mainFrame = self.prefs.appData['lastFrame'] else: # configobjValidate should take care of this situation allowed = ['last', 'coder', 'builder', 'both'] if self.prefs.app['defaultView'] in allowed: mainFrame = self.prefs.app['defaultView'] else: self.prefs.app['defaultView'] = 'both' mainFrame = 'both' # fetch prev files if that's the preference if self.prefs.coder['reloadPrevFiles']: scripts = self.prefs.appData['coder']['prevFiles'] else: scripts = [] appKeys = list(self.prefs.appData['builder'].keys()) if self.prefs.builder['reloadPrevExp'] and ('prevFiles' in appKeys): exps = self.prefs.appData['builder']['prevFiles'] else: exps = [] # then override the prev files by command options and passed files if len(sys.argv) > 1: if sys.argv[1] == __name__: # program was executed as "python.exe PsychoPyIDE.py %1' args = sys.argv[2:] else: # program was executed as "PsychoPyIDE.py %1' args = sys.argv[1:] # choose which frame to start with if args[0] in ['builder', '--builder', '-b']: mainFrame = 'builder' args = args[1:] # can remove that argument elif args[0] in ['coder', '--coder', '-c']: mainFrame = 'coder' args = args[1:] # can remove that argument # did we get .py or .psyexp files? elif args[0][-7:] == '.psyexp': mainFrame = 'builder' exps = [args[0]] elif args[0][-3:] == '.py': mainFrame = 'coder' scripts = [args[0]] else: args = [] self.dpi = int(wx.GetDisplaySize()[0] / float(wx.GetDisplaySizeMM()[0]) * 25.4) if not (50 < self.dpi < 120): self.dpi = 80 # dpi was unreasonable, make one up if sys.platform == 'win32': # wx.SYS_DEFAULT_GUI_FONT is default GUI font in Win32 self._mainFont = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT) else: self._mainFont = wx.SystemSettings.GetFont(wx.SYS_ANSI_FIXED_FONT) self._codeFont = wx.SystemSettings.GetFont(wx.SYS_ANSI_FIXED_FONT) self._codeFont.SetFaceName(self.prefs.coder['codeFont']) # removed Aug 2017: on newer versions of wx (at least on mac) # this looks too big # if hasattr(self._mainFont, 'Larger'): # # Font.Larger is available since wyPython version 2.9.1 # # PsychoPy still supports 2.8 (see ensureMinimal above) # self._mainFont = self._mainFont.Larger() # self._codeFont.SetPointSize( # self._mainFont.GetPointSize()) # unify font size # create both frame for coder/builder as necess if splash: splash.SetText(_translate(" Creating frames...")) self.coder = None self.copiedRoutine = None self.copiedCompon = None self._allFrames = [] # ordered; order updated with self.onNewTopWindow if mainFrame in ['both', 'coder']: self.showCoder(fileList=scripts) if mainFrame in ['both', 'builder']: self.showBuilder(fileList=exps) # send anonymous info to www.psychopy.org/usage.php # please don't disable this, it's important for PsychoPy's development self._latestAvailableVersion = None self.updater = None prefsConn = self.prefs.connections if prefsConn['checkForUpdates'] or prefsConn['allowUsageStats']: connectThread = threading.Thread( target=connections.makeConnections, args=(self,)) connectThread.start() # query github in the background to populate a local cache about # what versions are available for download: from psychopy.tools import versionchooser as vc versionsThread = threading.Thread(target=vc._remoteVersions, args=(True,)) versionsThread.start() ok, msg = checkCompatibility(last, self.version, self.prefs, fix=True) # tell the user what has changed if not ok and not self.firstRun and not self.testMode: title = _translate("Compatibility information") dlg = dialogs.MessageDialog(parent=None, message=msg, type='Info', title=title) dlg.ShowModal() if self.prefs.app['showStartupTips'] and not self.testMode: tipFile = os.path.join( self.prefs.paths['resources'], _translate("tips.txt")) tipIndex = self.prefs.appData['tipIndex'] if parse_version(wx.__version__) >= parse_version('4.0.0a1'): tp = wx.adv.CreateFileTipProvider(tipFile, tipIndex) showTip = wx.adv.ShowTip(None, tp) else: tp = wx.CreateFileTipProvider(tipFile, tipIndex) showTip = wx.ShowTip(None, tp) self.prefs.appData['tipIndex'] = tp.GetCurrentTip() self.prefs.saveAppData() self.prefs.app['showStartupTips'] = showTip self.prefs.saveUserPrefs() if self.prefs.connections['checkForUpdates']: self.Bind(wx.EVT_IDLE, self.checkUpdates) else: self.Bind(wx.EVT_IDLE, self.onIdle) # doing this once subsequently enables the app to open & switch among # wx-windows on some platforms (Mac 10.9.4) with wx-3.0: if wx.version() >= '3.0' and sys.platform == 'darwin': _Showgui_Hack() # returns ~immediately, no display # focus stays in never-land, so bring back to the app: if mainFrame in ['both', 'builder']: self.showBuilder() else: self.showCoder() return True
def __init__(self, arg=0, testMode=False, **kwargs): """With a wx.App some things get done here, before App.__init__ then some further code is launched in OnInit() which occurs after """ if profiling: import cProfile import time profile = cProfile.Profile() profile.enable() t0 = time.time() self._appLoaded = False # set to true when all frames are created self.coder = None self.runner = None self.version = psychopy.__version__ # set default paths and prefs self.prefs = psychopy.prefs self._currentThemeSpec = None self.keys = self.prefs.keys self.prefs.pageCurrent = 0 # track last-viewed page, can return there self.IDs = IDStore() self.urls = urls.urls self.quitting = False # check compatibility with last run version (before opening windows) self.firstRun = False self.testMode = testMode self._stdout = sys.stdout self._stderr = sys.stderr self._stdoutFrame = None # Shared memory used for messaging between app instances, this gets # allocated when `OnInit` is called. self._sharedMemory = None self._singleInstanceChecker = None # checker for instances self._timer = None # Size of the memory map buffer, needs to be large enough to hold UTF-8 # encoded long file paths. self.mmap_sz = 2048 # mdc - removed the following and put it in `app.startApp()` to have # error logging occur sooner. # # if not self.testMode: # self._lastRunLog = open(os.path.join( # self.prefs.paths['userPrefsDir'], 'last_app_load.log'), # 'w') # sys.stderr = sys.stdout = lastLoadErrs = self._lastRunLog # logging.console.setLevel(logging.DEBUG) # indicates whether we're running for testing purposes self.osfSession = None self.pavloviaSession = None self.copiedRoutine = None self.copiedCompon = None self._allFrames = frametracker.openFrames # ordered; order updated with self.onNewTopWindow wx.App.__init__(self, arg) # import localization after wx: from psychopy import localization # needed by splash screen self.localization = localization self.locale = localization.setLocaleWX() self.locale.AddCatalog(self.GetAppName()) logging.flush() self.onInit(testMode=testMode, **kwargs) if profiling: profile.disable() print("time to load app = {:.2f}".format(time.time() - t0)) profile.dump_stats('profileLaunchApp.profile') logging.flush() # if we're on linux, check if we have the permissions file setup from psychopy.app.linuxconfig import (LinuxConfigDialog, linuxConfigFileExists) if not linuxConfigFileExists(): linuxConfDlg = LinuxConfigDialog( None, timeout=1000 if self.testMode else None) linuxConfDlg.ShowModal() linuxConfDlg.Destroy()