psychopy 2025.1.0__py3-none-any.whl → 2025.2.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of psychopy might be problematic. Click here for more details.
- psychopy/VERSION +1 -1
- psychopy/alerts/alertsCatalogue/4810.yaml +19 -0
- psychopy/alerts/alertsCatalogue/alertCategories.yaml +4 -0
- psychopy/alerts/alertsCatalogue/alertmsg.py +15 -1
- psychopy/alerts/alertsCatalogue/generateAlertmsg.py +2 -2
- psychopy/app/Resources/classic/add_many.png +0 -0
- psychopy/app/Resources/classic/add_many@2x.png +0 -0
- psychopy/app/Resources/classic/devices.png +0 -0
- psychopy/app/Resources/classic/devices@2x.png +0 -0
- psychopy/app/Resources/classic/photometer.png +0 -0
- psychopy/app/Resources/classic/photometer@2x.png +0 -0
- psychopy/app/Resources/dark/add_many.png +0 -0
- psychopy/app/Resources/dark/add_many@2x.png +0 -0
- psychopy/app/Resources/dark/devices.png +0 -0
- psychopy/app/Resources/dark/devices@2x.png +0 -0
- psychopy/app/Resources/dark/photometer.png +0 -0
- psychopy/app/Resources/dark/photometer@2x.png +0 -0
- psychopy/app/Resources/light/add_many.png +0 -0
- psychopy/app/Resources/light/add_many@2x.png +0 -0
- psychopy/app/Resources/light/devices.png +0 -0
- psychopy/app/Resources/light/devices@2x.png +0 -0
- psychopy/app/Resources/light/photometer.png +0 -0
- psychopy/app/Resources/light/photometer@2x.png +0 -0
- psychopy/app/_psychopyApp.py +35 -13
- psychopy/app/builder/builder.py +88 -35
- psychopy/app/builder/dialogs/__init__.py +69 -220
- psychopy/app/builder/dialogs/dlgsCode.py +29 -8
- psychopy/app/builder/dialogs/paramCtrls.py +1468 -904
- psychopy/app/builder/validators.py +25 -17
- psychopy/app/coder/coder.py +12 -1
- psychopy/app/coder/repl.py +5 -2
- psychopy/app/colorpicker/__init__.py +1 -1
- psychopy/app/deviceManager/__init__.py +1 -0
- psychopy/app/deviceManager/addDialog.py +218 -0
- psychopy/app/deviceManager/dialog.py +185 -0
- psychopy/app/deviceManager/panel.py +191 -0
- psychopy/app/deviceManager/utils.py +60 -0
- psychopy/app/idle.py +7 -0
- psychopy/app/locale/ar_001/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ar_001/LC_MESSAGE/messages.po +12695 -10592
- psychopy/app/locale/cs_CZ/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/cs_CZ/LC_MESSAGE/messages.po +10199 -24
- psychopy/app/locale/da_DK/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/da_DK/LC_MESSAGE/messages.po +10199 -24
- psychopy/app/locale/de_DE/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/de_DE/LC_MESSAGE/messages.po +11221 -9712
- psychopy/app/locale/el_GR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/el_GR/LC_MESSAGE/messages.po +10200 -25
- psychopy/app/locale/en_NZ/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/en_NZ/LC_MESSAGE/messages.po +10200 -25
- psychopy/app/locale/en_US/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/en_US/LC_MESSAGE/messages.po +10195 -18
- psychopy/app/locale/es_CO/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/es_CO/LC_MESSAGE/messages.po +11917 -9101
- psychopy/app/locale/es_ES/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/es_ES/LC_MESSAGE/messages.po +11924 -9103
- psychopy/app/locale/es_US/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/es_US/LC_MESSAGE/messages.po +11917 -9101
- psychopy/app/locale/et_EE/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/et_EE/LC_MESSAGE/messages.po +11084 -9569
- psychopy/app/locale/fa_IR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/fa_IR/LC_MESSAGE/messages.po +11590 -5806
- psychopy/app/locale/fi_FI/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/fi_FI/LC_MESSAGE/messages.po +10199 -24
- psychopy/app/locale/fr_FR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/fr_FR/LC_MESSAGE/messages.po +11091 -9577
- psychopy/app/locale/he_IL/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/he_IL/LC_MESSAGE/messages.po +11072 -9549
- psychopy/app/locale/hi_IN/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/hi_IN/LC_MESSAGE/messages.po +11071 -9559
- psychopy/app/locale/hu_HU/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/hu_HU/LC_MESSAGE/messages.po +10200 -25
- psychopy/app/locale/it_IT/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/it_IT/LC_MESSAGE/messages.po +11072 -9560
- psychopy/app/locale/ja_JP/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ja_JP/LC_MESSAGE/messages.po +1485 -1137
- psychopy/app/locale/ko_KR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ko_KR/LC_MESSAGE/messages.po +10199 -24
- psychopy/app/locale/ms_MY/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ms_MY/LC_MESSAGE/messages.po +11463 -8757
- psychopy/app/locale/nl_NL/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/nl_NL/LC_MESSAGE/messages.po +10200 -25
- psychopy/app/locale/nn_NO/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/nn_NO/LC_MESSAGE/messages.po +10200 -25
- psychopy/app/locale/pl_PL/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/pl_PL/LC_MESSAGE/messages.po +10200 -25
- psychopy/app/locale/pt_PT/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/pt_PT/LC_MESSAGE/messages.po +11288 -9434
- psychopy/app/locale/ro_RO/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ro_RO/LC_MESSAGE/messages.po +10200 -25
- psychopy/app/locale/ru_RU/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ru_RU/LC_MESSAGE/messages.po +10199 -24
- psychopy/app/locale/sv_SE/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/sv_SE/LC_MESSAGE/messages.po +11441 -8747
- psychopy/app/locale/tr_TR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/tr_TR/LC_MESSAGE/messages.po +11069 -9545
- psychopy/app/locale/zh_CN/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/zh_CN/LC_MESSAGE/messages.po +12085 -8268
- psychopy/app/locale/zh_TW/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/zh_TW/LC_MESSAGE/messages.po +11929 -8022
- psychopy/app/plugin_manager/dialog.py +12 -3
- psychopy/app/plugin_manager/packageIndex.py +303 -0
- psychopy/app/plugin_manager/packages.py +203 -63
- psychopy/app/plugin_manager/plugins.py +120 -240
- psychopy/app/preferencesDlg.py +6 -1
- psychopy/app/psychopyApp.py +16 -4
- psychopy/app/runner/runner.py +10 -2
- psychopy/app/runner/scriptProcess.py +8 -3
- psychopy/app/stdout/stdOutRich.py +11 -4
- psychopy/app/themes/icons.py +3 -0
- psychopy/app/utils.py +61 -0
- psychopy/colors.py +10 -5
- psychopy/data/experiment.py +133 -23
- psychopy/data/routine.py +12 -0
- psychopy/data/staircase.py +42 -20
- psychopy/data/trial.py +20 -12
- psychopy/data/utils.py +43 -3
- psychopy/demos/builder/Experiments/dragAndDrop/drag_and_drop.psyexp +22 -5
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solutions.xlsx +0 -0
- psychopy/demos/builder/Experiments/stroopVoice/stroopVoice.psyexp +2 -12
- psychopy/demos/builder/Feature Demos/buttonBox/buttonBoxDemo.psyexp +3 -8
- psychopy/demos/builder/Feature Demos/movies/movie.psyexp +220 -0
- psychopy/demos/builder/Feature Demos/movies/readme.md +3 -0
- psychopy/demos/builder/Feature Demos/visualValidator/visualValidator.psyexp +1 -2
- psychopy/demos/builder/Hardware/camera/camera.psyexp +3 -16
- psychopy/demos/builder/Hardware/microphone/microphone.psyexp +3 -16
- psychopy/demos/coder/hardware/hdf5_extract.py +133 -0
- psychopy/event.py +20 -15
- psychopy/experiment/_experiment.py +86 -10
- psychopy/experiment/components/__init__.py +3 -10
- psychopy/experiment/components/_base.py +9 -20
- psychopy/experiment/components/button/__init__.py +1 -1
- psychopy/experiment/components/buttonBox/__init__.py +50 -54
- psychopy/experiment/components/camera/__init__.py +137 -359
- psychopy/experiment/components/keyboard/__init__.py +17 -24
- psychopy/experiment/components/microphone/__init__.py +61 -110
- psychopy/experiment/components/movie/__init__.py +2 -3
- psychopy/experiment/components/serialOut/__init__.py +192 -93
- psychopy/experiment/components/settings/__init__.py +45 -27
- psychopy/experiment/components/sound/__init__.py +82 -73
- psychopy/experiment/components/soundsensor/__init__.py +43 -80
- psychopy/experiment/devices.py +303 -0
- psychopy/experiment/exports.py +20 -18
- psychopy/experiment/flow.py +7 -0
- psychopy/experiment/loops.py +47 -29
- psychopy/experiment/monitor.py +74 -0
- psychopy/experiment/params.py +48 -10
- psychopy/experiment/plugins.py +28 -108
- psychopy/experiment/py2js_transpiler.py +1 -1
- psychopy/experiment/routines/__init__.py +1 -1
- psychopy/experiment/routines/_base.py +59 -24
- psychopy/experiment/routines/audioValidator/__init__.py +19 -155
- psychopy/experiment/routines/visualValidator/__init__.py +25 -25
- psychopy/hardware/__init__.py +20 -57
- psychopy/hardware/button.py +15 -2
- psychopy/hardware/camera/__init__.py +2237 -1394
- psychopy/hardware/joystick/__init__.py +1 -1
- psychopy/hardware/keyboard.py +5 -8
- psychopy/hardware/listener.py +4 -1
- psychopy/hardware/manager.py +75 -35
- psychopy/hardware/microphone.py +53 -7
- psychopy/hardware/monitor.py +144 -0
- psychopy/hardware/photometer/__init__.py +156 -117
- psychopy/hardware/serialdevice.py +16 -2
- psychopy/hardware/soundsensor.py +4 -1
- psychopy/iohub/devices/deviceConfigValidation.py +2 -1
- psychopy/iohub/devices/eyetracker/hw/gazepoint/__init__.py +2 -2
- psychopy/iohub/devices/eyetracker/hw/gazepoint/gp3/__init__.py +1 -0
- psychopy/iohub/devices/eyetracker/hw/gazepoint/gp3/eyetracker.py +10 -0
- psychopy/iohub/devices/keyboard/darwin.py +8 -5
- psychopy/iohub/util/__init__.py +7 -8
- psychopy/localization/generateTranslationTemplate.py +208 -116
- psychopy/localization/messages.pot +4305 -3502
- psychopy/monitors/MonitorCenter.py +174 -74
- psychopy/plugins/__init__.py +6 -4
- psychopy/preferences/devices.py +80 -0
- psychopy/preferences/generateHints.py +2 -1
- psychopy/preferences/preferences.py +35 -11
- psychopy/scripts/psychopy-pkgutil.py +969 -0
- psychopy/scripts/psyexpCompile.py +1 -1
- psychopy/session.py +34 -38
- psychopy/sound/__init__.py +6 -260
- psychopy/sound/audioclip.py +164 -0
- psychopy/sound/backend_ptb.py +8 -0
- psychopy/sound/backend_pygame.py +10 -0
- psychopy/sound/backend_pysound.py +9 -0
- psychopy/sound/backends/__init__.py +0 -0
- psychopy/sound/microphone.py +3 -0
- psychopy/sound/sound.py +58 -0
- psychopy/tests/data/correctScript/python/correctNoiseStimComponent.py +1 -1
- psychopy/tests/data/duplicateHeaders.csv +2 -0
- psychopy/tests/test_app/test_builder/test_BuilderFrame.py +22 -7
- psychopy/tests/test_app/test_builder/test_CompileFromBuilder.py +0 -2
- psychopy/tests/test_data/test_utils.py +5 -1
- psychopy/tests/test_experiment/test_components/test_ButtonBoxComponent.py +22 -2
- psychopy/tests/test_hardware/test_ports.py +0 -12
- psychopy/tests/test_tools/test_stringtools.py +1 -1
- psychopy/tools/attributetools.py +12 -5
- psychopy/tools/fontmanager.py +17 -14
- psychopy/tools/gltools.py +4 -2
- psychopy/tools/movietools.py +43 -2
- psychopy/tools/stringtools.py +33 -8
- psychopy/tools/versionchooser.py +1 -1
- psychopy/validation/audio.py +5 -1
- psychopy/validation/visual.py +5 -1
- psychopy/visual/basevisual.py +8 -7
- psychopy/visual/circle.py +2 -2
- psychopy/visual/helpers.py +3 -1
- psychopy/visual/image.py +29 -109
- psychopy/visual/movies/__init__.py +1800 -313
- psychopy/visual/polygon.py +4 -0
- psychopy/visual/shape.py +2 -2
- psychopy/visual/window.py +35 -12
- psychopy/voicekey/__init__.py +41 -669
- psychopy/voicekey/labjack_vks.py +7 -48
- psychopy/voicekey/parallel_vks.py +7 -42
- psychopy/voicekey/vk_tools.py +114 -263
- {psychopy-2025.1.0.dist-info → psychopy-2025.2.1.dist-info}/METADATA +20 -13
- {psychopy-2025.1.0.dist-info → psychopy-2025.2.1.dist-info}/RECORD +222 -190
- {psychopy-2025.1.0.dist-info → psychopy-2025.2.1.dist-info}/WHEEL +1 -1
- psychopy/visual/movies/players/__init__.py +0 -62
- psychopy/visual/movies/players/ffpyplayer_player.py +0 -1401
- psychopy/voicekey/demo_vks.py +0 -12
- psychopy/voicekey/signal.py +0 -42
- {psychopy-2025.1.0.dist-info → psychopy-2025.2.1.dist-info}/entry_points.txt +0 -0
- {psychopy-2025.1.0.dist-info → psychopy-2025.2.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
2
|
from psychopy.experiment.components import BaseComponent, BaseDeviceComponent, Param, getInitVals
|
|
3
|
-
from psychopy.experiment.
|
|
3
|
+
from psychopy.experiment.devices import DeviceBackend
|
|
4
4
|
from psychopy.localization import _translate
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
class ButtonBoxComponent(BaseDeviceComponent
|
|
7
|
+
class ButtonBoxComponent(BaseDeviceComponent):
|
|
8
8
|
"""
|
|
9
9
|
Component for getting button presses from a button box device.
|
|
10
10
|
"""
|
|
@@ -13,6 +13,11 @@ class ButtonBoxComponent(BaseDeviceComponent, PluginDevicesMixin):
|
|
|
13
13
|
iconFile = Path(__file__).parent / 'buttonBox.png'
|
|
14
14
|
tooltip = _translate('Button Box: Get input from a button box')
|
|
15
15
|
beta = True
|
|
16
|
+
legacyParams = [
|
|
17
|
+
# old device setup params, no longer needed as this is handled by DeviceManager
|
|
18
|
+
"deviceBackend",
|
|
19
|
+
"kbButtonAliases"
|
|
20
|
+
]
|
|
16
21
|
|
|
17
22
|
def __init__(
|
|
18
23
|
self, exp, parentName,
|
|
@@ -22,6 +27,7 @@ class ButtonBoxComponent(BaseDeviceComponent, PluginDevicesMixin):
|
|
|
22
27
|
stopType='duration (s)', stopVal=1.0,
|
|
23
28
|
startEstim='', durationEstim='',
|
|
24
29
|
forceEndRoutine=True,
|
|
30
|
+
discardPrevious=True,
|
|
25
31
|
# device
|
|
26
32
|
deviceLabel="",
|
|
27
33
|
deviceBackend="keyboard",
|
|
@@ -69,6 +75,7 @@ class ButtonBoxComponent(BaseDeviceComponent, PluginDevicesMixin):
|
|
|
69
75
|
"allowedButtons",
|
|
70
76
|
"storeCorrect",
|
|
71
77
|
"correctAns",
|
|
78
|
+
"discardPrevious"
|
|
72
79
|
]
|
|
73
80
|
self.params['registerOn'] = Param(
|
|
74
81
|
registerOn, valType='code', inputType='choice', categ='Data',
|
|
@@ -119,26 +126,15 @@ class ButtonBoxComponent(BaseDeviceComponent, PluginDevicesMixin):
|
|
|
119
126
|
"$correctAns to compare to the key press. "
|
|
120
127
|
),
|
|
121
128
|
label=_translate("Correct answer"), direct=False)
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
"deviceBackend",
|
|
126
|
-
]
|
|
127
|
-
|
|
128
|
-
self.params['deviceBackend'] = Param(
|
|
129
|
-
deviceBackend, valType="str", inputType="choice", categ="Device",
|
|
130
|
-
allowedVals=self.getBackendKeys,
|
|
131
|
-
allowedLabels=self.getBackendLabels,
|
|
132
|
-
label=_translate("Device backend"),
|
|
129
|
+
self.params['discardPrevious'] = Param(
|
|
130
|
+
discardPrevious, valType='bool', inputType="bool", categ="Data",
|
|
131
|
+
updates="constant",
|
|
133
132
|
hint=_translate(
|
|
134
|
-
"
|
|
133
|
+
"Do you want to discard all responses occurring before the onset of this Component?"
|
|
135
134
|
),
|
|
136
|
-
|
|
135
|
+
label=_translate("Discard previous")
|
|
137
136
|
)
|
|
138
137
|
|
|
139
|
-
# add params for any backends
|
|
140
|
-
self.loadBackends()
|
|
141
|
-
|
|
142
138
|
def writeInitCode(self, buff):
|
|
143
139
|
inits = getInitVals(self.params)
|
|
144
140
|
# code to create object
|
|
@@ -180,13 +176,14 @@ class ButtonBoxComponent(BaseDeviceComponent, PluginDevicesMixin):
|
|
|
180
176
|
# writes an if statement to determine whether to draw etc
|
|
181
177
|
indented = self.writeStartTestCode(buff)
|
|
182
178
|
if indented:
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
179
|
+
if self.params['discardPrevious']:
|
|
180
|
+
# dispatch and clear messages
|
|
181
|
+
code = (
|
|
182
|
+
"# clear any messages from before starting\n"
|
|
183
|
+
"%(name)s.responses = []\n"
|
|
184
|
+
"%(name)s.clearResponses()\n"
|
|
185
|
+
)
|
|
186
|
+
buff.writeIndentedLines(code % params)
|
|
190
187
|
# to get out of the if statement
|
|
191
188
|
buff.setIndentLevel(-indented, relative=True)
|
|
192
189
|
|
|
@@ -277,50 +274,49 @@ class ButtonBoxComponent(BaseDeviceComponent, PluginDevicesMixin):
|
|
|
277
274
|
"thisExp.addData('%(name)s.corr', %(name)s.corr)\n"
|
|
278
275
|
)
|
|
279
276
|
buff.writeIndentedLines(code % params)
|
|
280
|
-
|
|
281
277
|
|
|
282
|
-
class KeyboardButtonBoxBackend(DeviceBackend):
|
|
283
|
-
"""
|
|
284
|
-
Adds a basic keyboard emulation backend for ButtonBoxComponent, as well as acting as an example
|
|
285
|
-
for implementing other ButtonBoxBackends.
|
|
286
|
-
"""
|
|
287
278
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
279
|
+
class KeyboardButtonBoxDeviceBackend(DeviceBackend):
|
|
280
|
+
backendLabel = "Keyboard Button Box"
|
|
281
|
+
deviceClass = "psychopy.hardware.button.KeyboardButtonBox"
|
|
282
|
+
icon = "light/buttonBox.png"
|
|
283
|
+
|
|
284
|
+
def __init__(self, profile):
|
|
285
|
+
# init parent class
|
|
286
|
+
DeviceBackend.__init__(self, profile)
|
|
292
287
|
|
|
293
|
-
def getParams(self: ButtonBoxComponent):
|
|
294
288
|
# define order
|
|
295
|
-
order
|
|
289
|
+
self.order += [
|
|
296
290
|
"kbButtonAliases",
|
|
297
291
|
]
|
|
298
292
|
# define params
|
|
299
|
-
params =
|
|
300
|
-
|
|
301
|
-
"'q', 'w', 'e'", valType="list", inputType="single", categ="Device",
|
|
293
|
+
self.params['kbButtonAliases'] = Param(
|
|
294
|
+
"'q', 'w', 'e'", valType="list", inputType="single",
|
|
302
295
|
label=_translate("Buttons"),
|
|
303
296
|
hint=_translate(
|
|
304
297
|
"Keys to treat as buttons (in order of what button index you want them to be). "
|
|
305
298
|
"Must be the same length as the number of buttons."
|
|
306
299
|
)
|
|
307
300
|
)
|
|
301
|
+
|
|
302
|
+
def writeDeviceCode(self, buff):
|
|
303
|
+
"""
|
|
304
|
+
Code to setup a device with this backend.
|
|
308
305
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
#
|
|
317
|
-
inits = getInitVals(self.params)
|
|
318
|
-
# make ButtonGroup object
|
|
306
|
+
Parameters
|
|
307
|
+
----------
|
|
308
|
+
buff : io.StringIO
|
|
309
|
+
Text buffer to write code to.
|
|
310
|
+
"""
|
|
311
|
+
# write basic code
|
|
312
|
+
self.writeBaseDeviceCode(buff, close=False)
|
|
313
|
+
# add param and close
|
|
319
314
|
code = (
|
|
320
|
-
"deviceManager.addDevice(\n"
|
|
321
|
-
" deviceClass='psychopy.hardware.button.KeyboardButtonBox',\n"
|
|
322
|
-
" deviceName=%(deviceLabel)s,\n"
|
|
323
315
|
" buttons=%(kbButtonAliases)s,\n"
|
|
324
316
|
")\n"
|
|
325
317
|
)
|
|
326
|
-
buff.
|
|
318
|
+
buff.writeIndentedLines(code % self.params)
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
# register backend with Component
|
|
322
|
+
ButtonBoxComponent.registerBackend(KeyboardButtonBoxDeviceBackend)
|