how to upload pdf file in database using asp.net c# : How to search a pdf document for text Library software API .net windows html sharepoint PsychoPyManual26-part828

PsychoPy - Psychology software for Python, Release 1.84.0
[merge]
summary = true
log = true
tool = opendiff
then you’ll be able to use a handy GUI interface (opendiff) forreviewing differences and conflicts,just by typing:
git mergetool
from the command line afterhitting a merge conflict (such as duringa git pull upstream master).
Once you’ve folded yournew code backinto yourmaster and pushedit back to yourgithubforkthenit’s time toShare
your improvement with others.
13.2 Adding documentation
There are several ways to add documentation, all of them useful: doc strings, comments in the code, and demos to
show an example of actual usage. To further explain something to end-users, you can create or edit a .rst file that will
automatically become formatted for the web,and eventually appear on www.psychopy.org.
You make a new file under psychopy/docs/source/,either as a new file orfolderor within an existing one.
To test that your doc source code (.rst file) does what you expect in terms of formatting for display on the web, you
can simply do something like (this is my actual path, unlikely to be yours):
$ cd /Users/jgray/code/psychopy/docs/
$ make html
Do this within your docs directory (requires sphinx to be installed, try “easy_install sphinx” ifit’s not working). That
will adda build/html sub-directory.
Then you can viewyour new doc in a browser,e.g., for me:
file:///Users/jgray/code/psychopy/docs/build/html/
Push your changes to your github repository (using a “DOC:” commit message) and let Jon know, e.g. with a pull
request.
13.3 Adding a new Builder Component
Builder Components are auto-detected and displayed to the experimenteras icons (builder, right panel). This makes it
straightforward to add new ones.
All you need to do is create a list of parameters that the Component needs to know about (that will automatically
appear in the Component’s dialog) and a few pieces of code specifying what code should be called at different points
inthe script(e.g. beginning ofthe Routine, every frame,end of the study etc...). Many ofthese will come simply from
subclassing the _base or _visual Components.
To get started,Addanewfeaturebranchfor the development ofthis component. (Ifthis doesn’tmeananything to you
then seeUsingtherepository)
You’ll mainlybe working in the directory .../psychopy/app/builder/components/. Take a look at several existing Com-
ponents (such as ‘image.py’), andkey files including ‘_base.py’ and ‘_visual.py’.
There are three main steps, the first being by far the most involved.
13.2. Adding documentation
255
How to search a pdf document for text - search text inside PDF file in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Learn how to search text in PDF document and obtain text content and location information
select text in pdf; pdf searchable text
How to search a pdf document for text - VB.NET PDF Text Search Library: search text inside PDF file in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Learn How to Search Text in PDF Document and Obtain Text Content and Location Information in VB.NET application
search a pdf file for text; how to make a pdf file text searchable
PsychoPy - Psychology software for Python, Release 1.84.0
13.3.1 1. File: newcomp.py
It’s pretty straightforward to model a new Component on one of the existing ones. Be prepared to specify what your
Component needs to do at several different points in time: before the first trial, every frame,at the endof each routine,
and at the end of the experiment. In addition, you may need to sacrifice some complexity in order to keep things
streamlined enough for a Builder (see e.g.,ratingscale.py).
Your new Component class (in your file newcomp.py) should inherit fromBaseComponent (in _base.py), VisualCom-
ponent (in _visual.py), or KeyboardComponent (in keyboard.py). You may need to rewrite some or all some of these
methods, to override default behavior.:
class NewcompComponent(BaseComponent): # or (VisualComponent)
def __init__(...):
super(NewcompComponent, self).__init__(...)
...
def writeInitCode(self, buff):
def writeRoutineStartCode(self, buff):
def writeFrameCode(self, buff):
def writeRoutineEndCode(self, buff):
Calling super()willcreate the basic defaultset ofparams thatalmosteverycomponent willneed: name,startVal,start-
Type, etc. Some of these fields may need to be overridden (e.g., durationEstim in sound.py). Inheriting from Visual-
Component (which in turninherits fromBaseComponent)adds default visual params,plus arranges for Builderscripts
to import psychopy.visual. If your component will need other libs, call self.exp.requirePsychopyLib([’neededLib’])
(see e.g., parallelPort.py).
At the top of a component file is a dict named _localized. These mappings allow a strict separation of internal string
values (= used in logic, never displayed) from values used for display in the Builder interface (= for display only,
possibly translated, never used in logic). The .hint and .label fields of params[’someParam’] should always be set to
alocalized value, either by using a dict entry such as _localized[’message’], or via the globally available translation
function, _(‘message’). Localized values must not be used elsewhere in a component definition.
Very occasionally, you may also need to edit settings.py, which writes out the set-up code for the whole experiment
(e.g.,to define the window). Forexample, this was necessary forApertureComponent, topass “allowStencil=True” to
the window creation.
Your new Component writes code into a buffer that becomes an executable python file, xxx_lastrun.py (where xxx is
whatever the experimenter specifies when saving from the builder, xxx.psyexp). You will do a bunch of this kind of
call in your newcomp.py file:
buff.writeIndented(your_python_syntax_string_here)
You have to manage the indentation level of the output code,see experiment.IndentingBuffer().
xxx_lastrun.py is the file that gets built when you run xxx.psyexp from the builder. So you will want to look at
xxx_lastrun.py frequently when developing your component.
Name-space
There are several internal variables (er, names of python objects) that have a specific, hardcoded meaning within
xxx_lastrun.py. You can expect the following to be there, and they should only be used in the original way (or
something will breakforthe end-user, likely in a mysterious way):
'win' = the window
't' = time within the trial loop, referenced to trialClock
'x', 'y' = mouse coordinates, but only if the experimenter uses a mouse component
Handlingofvariable names is underactivedevelopment,so this list may wellbe out of date. (Ifso,youmight consider
updating it or posting a note to psychopy-dev.)
Preliminary testing suggests that there are 600-ish names fromnumpy or numpy.random,plus the following:
256
Chapter 13. For Developers
C# Word - Search and Find Text in Word
C# Word - Search and Find Text in Word. Learn How to Search Text in PDF Document and Obtain Text Content and Location Information. Overview.
searching pdf files for text; pdf editor with search and replace text
C# PowerPoint - Search and Find Text in PowerPoint
C# PowerPoint - Search and Find Text in PowerPoint. Learn How to Search Text in PDF Document and Obtain Text Content and Location Information. Overview.
pdf find and replace text; pdf text search
PsychoPy - Psychology software for Python, Release 1.84.0
['KeyResponse''__builtins__''__doc__''__file__''__name__''__package__''buttons''core''data''dlg''event''expInfo''expName''filename''gui''logFile''os''psychopy''sound''t''visual''win''x''y']
Yet other names get derived fromuser-entered names, like trials –> thisTrial.
Params
self.params is a key construct that you build up in __init__. You need name, startTime, duration, and several other
params to be defined or you get errors. ‘name’ should be of type ‘code’.
The Param() class is defined in psychopy.app.builder.experiment.Param(). A very useful thing that Params know is
how to create a string suitable for writing into the .py script. In particular, the __str__ representation of a Param will
format its value (.val) based on its type (.valType) appropriately. This means that you don’t need to check or handle
whether the user entered a plain string, a string with a code trigger character ($), or the field was of type code in the
first place. If you simply request the str() representation of the param, it is formatted correctly.
To indicate that a param (eg, thisParam) should be considered as an advanced feature, set its category to advanced:
self.params[’thisParam’].categ= ‘Advanced’. Thenthe GUIshowntothe experimenterwillplaceitonthe ‘Advanced’
tab. Other categories work similarly (Custom,etc).
During development, it can sometimes be helpful to save the params into the xxx_lastrun.py file as comments, so I
could see what was happening:
def writeInitCode(self,buff):
# for debugging during Component development:
buff.writeIndented("# self.params for r aperture:\n")
for p in self.params.keys():
try: buff.writeIndented("# %s%s <type %s>\n" (p, self.params[p].val, self.params[p].valType))
except: pass
Alot more detail canbe inferred from existing components.
Making things loop-compatible looks interesting – see keyboard.pyforan example, especially code for saving data at
the end.
13.3.2 Notes & gotchas
syntax errors innew_comp.py: The PsychoPy app will fail to start if there are syntax error in any of
the components that are auto-detected. Just correct themand start the app again.
param[].val : If you have a boolean variable (e.g., my_flag) as one of your params, note that
self.param[”my_flag”] is always True (the param exists –> True). So in a boolean context you
almost always want the .val part, e.g., if self.param[”my_flag”].val:.
However,you donot always want.val. Specifically,in a string/unicode context(=to triggerthe self-
formatting features of Param()s), you almost always want “%s” % self.param[’my_flag’], without
.val. Note that it’s better to do this via “%s”than str() because str(self.param[”my_flag”]) coerces
things to type str (squashing unicode)whereas %s works for both str and unicode.
13.3.3 2. Icon: newcomp.png
Using yourfavorite image software,make an icon for your Component with a descriptive name, e.g.,‘newcomp.png’.
Dimensions = 48 x 48. Put it in the components directory.
In ‘newcomp.py’, have a line near the top:
iconFile = path.join(thisFolder, 'newcomp.png')
13.3. Adding a new Builder Component
257
C# PDF delete text Library: delete, remove text from PDF file in
The following C# coding example illustrates how to perform PDF text deleting function in your .NET project, according to search option. // Open a document.
can't select text in pdf file; pdf select text
C# PDF replace text Library: replace text in PDF content in C#.net
The following C# coding example illustrates how to perform PDF text replacing function in your .NET project, according to search option. // Open a document.
how to search a pdf document for text; how to make pdf text searchable
PsychoPy - Psychology software for Python, Release 1.84.0
13.3.4 3. Documentation: newcomp.rst
Just make a descriptively-named text file that ends in .rst (“restructured text”), and put
it in psychopy/docs/source/builder/components/ .
It will get auto-formatted and end up at
http://www.psychopy.org/builder/components/newcomp.html
13.4 Style-guide for coder demos
Each coder demo is intended to illustrate a key PsychoPy feature (or two), especially in ways that show usage in
practice, and go beyond the description in the API. The aim is not to illustrate every aspect, but to get people up to
speed quickly,so they understand how basic usage works, and could thenplay around with advanced features.
As a newcomer to PsychoPy, you are in a great position to judge whether the comments and documentation are
clear enough or not. If something is not clear, you may need to ask a PsychoPy contributor for a description; email
psychopy-dev@googlegroups.com.
Here are some style guidelines, written for the OpenHatch event(s) but hopefully useful after that too. These are
intended specifically for the coder demos,not for the internal code-base (although they are generally quite close).
The idea is to have clean code that looks and works the same way across demos, while leaving the functioning mostly
untouched. Some small changes to function might be needed (e.g., to enable the use of‘escape’ to quit),but typically
only minor changes like this.
• Generally, when you run the demo, does it look good and help you understand the feature? Where might there
be room for improvement? You can either leave notes in the code in a comment, or include them in a commit
message.
• Standardizethetopstufftohave1)ashbangwith python2 (not justpython),2)utf-8encoding,and3)a comment:
#!/usr/bin/env python2
# -
*
- coding: utf-8 -
*
-
"""Demo name, purpose, description (1-2 sentences, although some demos need more explanation).
"""
For the comment / description, it’s a good idea to read and be informed by the relevant parts of the API (see
http://psychopy.org/api/api.html),butthere’snoneedtoduplicatethattextinyourcomment.Ifyouareunsure,please
post to the dev listpsychopy-dev@googlegroups.com .
• Follow PEP-8 mostly, some exceptions:
– current PsychoPyconventionis touse camelCase for variable names,so don’tconvertthoseto underscores
– 80 char columns can spill over a little. Try to keep things within 80 chars most of the time.
– do allow multiple imports on one line if they are thematically related (e.g., import os,sys,glob).
– inlinecomments are ok (because the code demos are intended to illustrate and explainusageinsomedetail,
more so than typical code).
• Checkall imports:
– remove anyunnecessary ones
– replace import time with from psychopy import core. Use core.getTime() (= ms since the script started) or
core.getAbsTime() (= seconds, unix-style) instead of time.time(), for all time-related functions or methods
not just time().
– add from __future__ import division, even if not needed. And make sure that doing so does not break the
demo!
• Fix any typos in comments; convert any lingering British spellings to US,e.g., change colour to color
258
Chapter 13. For Developers
C# HTML5 PDF Viewer SDK to view PDF document online in C#.NET
Easy to search PDF text in whole PDF document. C# HTML5 PDF Viewer: View PDF Online. 13. Page Thumbnails. Navigate PDF document with thumbnails. 14. Text Search.
convert pdf to searchable text; search text in pdf image
VB.NET PDF replace text library: replace text in PDF content in vb
will guide you how to replace text in specified PDF page. 'Open a document Dim doc As PDFDocument = New PDFDocument(inputFilePath) 'Set the search options Dim
select text in pdf file; make pdf text searchable
PsychoPy - Psychology software for Python, Release 1.84.0
• Prefer if <boolean>: as a construct instead of if <boolean> == True:. (There might not be any to change).
• Ifyou have tochoose,optformore verbosebuteasier-to-understandcode insteadofcleverorterse formulations.
This is for readability, especially for people new topython. If you are unsure, please add a note to yourcommit
message, or post a question to the dev listpsychopy-dev@googlegroups.com .
• Standardize variable names:
– use win for the visual.Window(), and so win.flip()
• Provide a consistent way for a userto exit a demo using the keyboard,ideally enable this on everyvisual frame:
use if len(event.getKeys([’escape’]): core.quit(). Note: if there is a previous event.getKeys() call, it can slurp up
the ‘escape’ keys. So check for ‘escape’ first.
• Time-out after 10 seconds, if there’s no user response and a timeout is appropriate for the demo (and a longer
time-out might be needed, e.g., for ratingScale.py):
demoClock = core.clock()
# is demoClock's time is 0.000s at this point
...
if demoClock.getTime() 10.:
core.quit()
• Most demos are not full screen. For any that are full-screen, see if it can work without being full screen. If it
has to be full-screen,add some text to say that pressing ‘escape’ will quit.
• Ifdisplaying log messages tothe console seems to help understand the demo, here’s how todo it:
from psychopy import logging
...
logging.console.setLevel(logging.INFO)
# or logging.DEBUG for even more stuff
• End a script with win.close() (assuming the script used a visual.Window), and then core.quit() even though it’s
not strictly necessary
13.5 Localization (I18N, translation)
PsychoPy is used worldwide. Starting with v1.81, many parts of PsychoPy itself (the app) can be translated into any
language that has a unicode character set. A translation affects whatthe experimenter sees while creating and running
experiments; it is completely separate from what is shown to the subject. Translations of the online documentation
will need a completely different approach.
In the app,translationis handledby a function,_translate(), which takes a string argument. (The standardname
is _(), but unfortunately this conflicts with _ as used in some external packages that PsychoPy depends on.) The
_translate() function returns a translated, unicode version ofthe string in the locale / language thatwas selected
when starting the app. If no translation is available forthat locale, the original string is returned (= English).
Alocale setting (e.g., ‘ja_JP’ for Japanese) allows the end-user (= the experimenter)to control the language that will
be used for display within the app itself. (It can potentially control other display conventions as well, not just the
language.) PsychoPy will obtain the locale from the user preference (if set), or the OS.
Workflow: 1) Make a translation from English (en_US) to another language. You’ll need a strong understanding of
PsychoPy,English, and the otherlanguage. 2) In some cases itwill be necessary toadjust PsychoPy’s code, butonly if
new code has been added to the app and that code displays text. Then re-dostep 1to translate the newlyaddedstrings.
See notes in psychopy/app/localization/readme.txt.
13.5. Localization (I18N, translation)
259
VB.NET PDF- View PDF Online with VB.NET HTML5 PDF Viewer
Easy to search PDF text in whole PDF document. VB.NET HTML5 PDF Viewer: View PDF Online. 13. Page Thumbnails. Navigate PDF document with thumbnails. 14. Text Search
find and replace text in pdf file; how to select text in pdf
C# PDF Text Highlight Library: add, delete, update PDF text
The following C# coding example illustrates how to perform PDF text highlight function in your .NET project, according to search option. // Open a document.
convert a scanned pdf to searchable text; how to select text on pdf
PsychoPy - Psychology software for Python, Release 1.84.0
13.5.1 Make a translation (.po file)
As a translator, you will likely introduce many new people to PsychoPy, and your translations will greatly influence
their experience. Try to be completely accurate; it is better to leave something in English if you are unsure how
PsychoPy is supposed to work.
To translate a given language, you’ll need to know the standard 5-character code (see psy-
chopy/app/localization/mappings). E.g., for Japanese, wherever LANG appears in the documentation here,
you should use the actual code,i.e.,“ja_JP” (without quotes).
Afree app called poedit is useful for managing a translation. For a given language, the translation mappings (from
en_US to LANG)are stored in a .po file (a text file with extension .po); after editing with poedit, these are converted
into binary format (with extension .mo) whichare used when the app is running.
• Start translation (do these steps once):
Start a translation by opening psychopy/app/locale/LANG/LC_MESSAGE/messages.po in Poedit. If there is no
such .po file,create a new one:
– make a new directory psychopy/app/locale/LANG/LC_MESSAGE/ if needed. Your LANG will be auto-
detected within PsychoPy only if you follow this convention. You can copy metadata (such as the project
name) from another.po file.
Set your name and e-mail address from “Preferences...” of “File” menu. Set translation properties (such as
project name, language and charset) from Catalog Properties Dialog, which can be opened from “Properties...”
of “Catalog” menu.
In poedit’s properties dialog, set the “source keywords” to include ‘_translate’. This allows poedit to find the
strings in PsychoPy that are to be translated.
To add paths where Poedit scans .py files, open “Sources paths” tab on the Catalog Properties Dialog, and set
“Base path:” to ”../../../../../” (= psychopy/psychopy/). Nothing more should be needed. If you’ve created new
catalog,save yourcatalog to psychopy/app/locale/LANG/LC_MESSAGE/messages.po.
Probably not needed, but check anyway: Edit the file containing language code and name mappings, psy-
chopy/app/localization/mappings, and fill in the name for your language. Give a name that should be familiar
to people who read that language (i.e., use the name of the language as written in the language itself, not in
en_US).About 25 are already done.
• Edit a translation:
Open the .po file with Poedit and press “Update” button on the toolbar to update newly added / removed strings
that need to be translated. Select a string you want to translate and input your translation to “Translation:” box.
If you are unsure where string is used, point on the string in “Source text” box and right-click. You can see
where the string is defined.
• Technicalterms shouldnot be translated: Builder,Coder,PsychoPy, Flow,Routine,andso on. (See the Japanese
translation forguidance.)
• Ifthere are formatting arguments in the original string (%s,%(first)i),the same number of arguments must
also appearin the translation (but theirorder is not constrained to be the original order). Ifthey are named (e.g.,
%(first)i), that part should not be translated–here first is a python name.
• If you think your translation might have room for improvement, indicate that it is “fuzzy”. (Saving Notes does
not work for me on Mac,seems like a bug in poedit.)
• After making a new translation, saving it in poedit will save the .po file and also make an associated .mo file.
You need to update the .mo file if you want to see your changes reflected in PsychoPy.
• The start-up tips are stored in separate files,and are not translated by poedit. Instead:
260
Chapter 13. For Developers
PsychoPy - Psychology software for Python, Release 1.84.0
• copy the default version (named psychopy/app/Resources/tips.txt) to a new file in the same directory, named
tips_LANG.txt. Then replace English-language tips with translated tips. Note that some of the humor might
not translate well, so feel free to leave out things that would be too odd, or include occasional mild humor that
wouldbe more appropriate. Humor mustbe respectfulandsuitable forusing ina classroom, laboratory, or other
professional situation. Don’t get too creative here. If you have any doubt, best leave it out. (Hopefully it goes
without saying that you should avoid any religious, political,disrespectful, or sexist material.)
• in poedit, translate the file name: translate “tips.txt” as “tips_LANG.txt”
• Commit both the .po and .mo files to github (not just one or the other),and any changed files (e.g., tips_LANG,
localization/mappings).
13.5.2 Adjust PsychoPy’s code
This is mostly complete (as of 1.81.00), but will be needed for new code that displays text to users of the app (experi-
menters, not study participants).
There are a few things to keep in mind whenworking on the app’s code to make it compatible with translations. Ifyou
are onlymaking a translation, you can skip this section.
• In PsychoPy’s code, the language to be used should always be English with American spellings (e.g., “color”).
• Within the app, the return value from _translate() should be used only for display purposes: in menus,
tooltips, etc. A translated value should never be used as part of the logic or internal functioning of PsychoPy. It
is purely a “skin”. Internally, everything must be in en_US.
• Basic usage is exactly what you expect: _translate("hello") will return a unicode string at run-time,
using mappings for the current locale as provided by a translator ina .mo file. (Not all translations are available
yet, see above to start a new one.) To have the app display a translated string to the experimenter, just display
the return value from the underscore translation function.
• The strings to be translated must appear somewhere in the app code base as explicit strings within
_translate(). If you need to translate a variable, e.g., named str_var using the expression
_translate(str_var),somewhere else you need to explicitly give all the possible values that str_var
can take, and enclose each of them within the translate function. It is okay for that to be elsewhere, even in
another file, but not in a comment. This allows poedit to discover of all the strings that need to be translated.
(This is one of the purposes of the _localized dict at the top ofsome modules.)
• _translate() should not be given a null string to translate; if you use a variable, check that it is not ‘’ to
avoid invoking _translate(’’).
• Strings that contain formatting placeholders (e.g., %d, %s, %.4f) require a little more thought. Single place-
holders are easy enough: _translate("hello, %s") % name.
• Strings with multiple formatting placeholders require named arguments, because positional arguments
are not always sufficient to disambiguate things depending on the phrase and the language to be
translated into: _translate("hello, %(first)s %(last)s") % {’first’:
firstname,
’last’:
lastname}
• Localizing drop-down menus is a little more involved. Such menus should display localized strings, but
return selected values as integers (GetSelection() returns the position within the list). Do not use
GetStringSelection(),because this will return the localized string,breaking the rule about a strict sep-
aration of display and logic. See Builder ParamDialogs for examples.
13.5.3 Other notes
When there are more translations (and if they make the app download large) we might want to manage things differ-
ently (e.g., have translations as a separate download from the app).
13.5. Localization (I18N, translation)
261
PsychoPy - Psychology software for Python, Release 1.84.0
13.6 Adding a new Menu Item
Adding a newmenu-itemto the Builder (orCoder)is relatively straightforward, but there are several files that need to
be changed in specific ways.
13.6.1 1. makeMenus()
The code that constructs the menus for the Builder is within a method named makeMenus(), within class
builder.BuilderFrame(). Decide which submenu your new command fits under, and look for that section (e.g., File,
Edit,View,and soon). Forexample,to add anitem formaking the Routine panelitems larger, Iaddedtwolines within
the View menu, by editing the makeMenus() method of class BuilderFrame within psychopy/app/builder/builder.py
(similar forCoder):
self.viewMenu.Append(self.IDs.tbIncrRoutineSize, _("&Routine Larger\t%s"%self.app.keys['largerRoutine'], _("Larger routine e items"))
wx.EVT_MENU(selfself.IDs.tbIncrRoutineSize, self.routinePanel.increaseSize)
Note the use of the translation function, _(), for translating text that will be displayed to users (menu listing, hint).
13.6.2 2. wxIDs.py
Anew itemneeds to have a(numeric)IDsothat wxcankeep trackofit. Here,the numberisself.IDs.tbIncrRoutineSize,
which I had to define within the file psychopy/app/wxIDs.py:
tbIncrRoutineSize=180
It’s possible that, instead of hard-coding it like this, it’s better to make a call to wx.NewId() – wx will take care of
avoiding duplicate IDs, presumably.
13.6.3 3. Key-binding prefs
Ialsodefined a key to use to as a keyboard short-cut for activating the new menu item:
self.app.keys['largerRoutine']
The actual key is defined in a preference file. Because psychopy is multi-platform, you need to add info to four
different .spec files, all ofthembeing within the psychopy/preferences/ directory, forfour operating systems (Darwin,
FreeBSD, Linux, Windows). For Darwin.spec (meaning Mac OS X), I added two lines. The first line is not merely
acomment: it is also automatically used as a tooltip (in the preferences dialog, under key-bindings), and the second
being the actual short-cut key to use:
# increase display size of Routines
largerRoutine = string(default='Ctrl++'# on Mac c Book Pro o this is s good
This means that the user has to hold down the Ctrl key and then press the + key. Note that on Macs,‘Ctrl’ in the spec
is automaticallyconverted into ‘Cmd’ forthe actualkeyto use;in the .spec, you should always specifythings interms
of‘Ctrl’(and not ‘Cmd’). The default value is the key-binding to use unless the user defines anotherone in her or his
preferences (which then overrides the default). Try to pick a sensible key for each operating system, and update all
four.spec files.
13.6.4 4. Your new method
The second line within makeMenus() adds the key-binding definition into wx’s internal space,so that when the key is
pressed, wx knows what to do. In the example, it will call the method self.routinePanel.increaseSize, which I had to
262
Chapter 13. For Developers
PsychoPy - Psychology software for Python, Release 1.84.0
defineto dothedesired behaviorwhen the method is called (in this case,increment an internalvariable and redraw the
routine panel at the new larger size).
13.6.5 5. Documentation
To let people know that your new feature exists, add a note about your new feature in the CHANGELOG.txt, and
appropriate documentation in .rst files.
Happy Coding Folks!!
13.6. Adding a new Menu Item
263
PsychoPy - Psychology software for Python, Release 1.84.0
264
Chapter 13. For Developers
Documents you may be interested
Documents you may be interested