If you also want the source code, you can clone this repo or grab the latest releases’ source, open a console where you put the code, and type python3-mpipinstall. (or, if you plan on modifying that code, python3-mpipinstall-e.). Same remarks as above apply.
+
If you also want the source code, you can clone this repo or grab the latest releases' source, open a console where you put the code, and type python3-mpipinstall. (or, if you plan on modifying that code, python3-mpipinstall-e.). Same remarks as above apply.
Currently binaries are only available for windows (.msi files). Choose packages with ‘amd64’ in the name if you have a 64 bit machine, ‘x86’ if you have a 32 bit machine. The ‘vlc’ suffix indicates that this installer ships VLC as well to support video, so try it if the other version fails to read videos.
Currently binaries are only available for windows (.msi files). Choose packages with 'amd64' in the name if you have a 64 bit machine, 'x86' if you have a 32 bit machine. The 'vlc' suffix indicates that this installer ships VLC as well to support video, so try it if the other version fails to read videos.
+
On windows, in the unlikely event you get an error message along the lines of "MSVCP100.dll is missing", you can download this package from Microsoft for x86 (32 bit) or for x64 (64 bits). Those libraries really should already be installed on your system.
Introspection bindings for poppler may be shipped separately, ensure you have those as well (typelib-1_0-Poppler-0_18 on OpenSUSE, gir1.2-poppler-0.18 on Ubuntu)
optionally VLC, to play videos (with the same bitness as Python)
-
On windows GTK+3, Poppler and their python bindings are all shipped together in the PyGi installer. Be sure to check the supported Python versions (up to 3.4 at the time of writing), they appear in the FEATURES list in the linked page.
+
On windows GTK+3, Poppler and their python bindings are all shipped together in the PyGi installer. Be sure to check the supported Python versions (up to 3.4 at the time of writing), they appear in the FEATURES list in the linked page. Be sure to tick all the necessary dependencies in the installer (Poppler, Cairo, Gdk-Pixbuf).
On other platforms they are often installed by default, or easily available through your package or software manager.
For example, on ubuntu, you can run the following as root to make sure you have all the prerequisites assuming you use python3:
All functionalities are available from the menus of the window with slide previews. Don’t be afraid to experiment with them!
+
All functionalities are available from the menus of the window with slide previews. Don't be afraid to experiment with them!
Keyboard shortcuts are also listed in these menus. Some more usual shortcuts are often available, for example Ctrl+L, and F11 also toggle fullscreen, though the main shortcut is just F.
A few of the fancier functionalities are listed here:
Swap screens: If Pympress mixed up which screen is the projector and which is not, press S
-
Go To Slide: To jump to a selected slide without flashing through the whole presentation on the projector, press G or click the “current slide” box.
+
Go To Slide: To jump to a selected slide without flashing through the whole presentation on the projector, press G or click the "current slide" box.
A spin box will appear, and you will be able to navigate through your slides in the presenter window only by scrolling your mouse, with the Home/Up/Down/End keys, with the + and - buttons of the spin box, or simply by typing in the number of the slide. Press Enter to validate going to the new slide or Esc to cancel.
Estimated talk time: Click the Timeestimation box and set your planned talk duration. You can also pass this on the command line through the -ett flag. The color will allow you to see at a glance how much time you have left.
-
Adjust screen centering: If your slides’ form factor doesn’t fit the projectors’ and you don’t want the slide centered in the window, use the “Screen Center” option in the “Presentation” menu.
+
Adjust screen centering: If your slides' form factor doesn't fit the projectors' and you don't want the slide centered in the window, use the "Screen Center" option in the "Presentation" menu.
Resize Current/Next slide: You can drag the bar between both slides on the Presenter window to adjust their relative sizes to your liking.
__all__.append("Editable")
-ifGtk._versionin("2.0","3.0"):
- classAction(Gtk.Action):
- __init__=deprecated_init(Gtk.Action.__init__,
- arg_names=('name','label','tooltip','stock_id'),
- category=PyGTKDeprecationWarning)
-
- Action=override(Action)
- __all__.append("Action")
-
- classRadioAction(Gtk.RadioAction):
- __init__=deprecated_init(Gtk.RadioAction.__init__,
- arg_names=('name','label','tooltip','stock_id','value'),
- category=PyGTKDeprecationWarning)
-
- RadioAction=override(RadioAction)
- __all__.append("RadioAction")
-
- classActionGroup(Gtk.ActionGroup):
- __init__=deprecated_init(Gtk.ActionGroup.__init__,
- arg_names=('name',),
- category=PyGTKDeprecationWarning)
-
- defadd_actions(self,entries,user_data=None):
- """
- The add_actions() method is a convenience method that creates a number
- of gtk.Action objects based on the information in the list of action
- entry tuples contained in entries and adds them to the action group.
- The entry tuples can vary in size from one to six items with the
- following information:
-
- * The name of the action. Must be specified.
- * The stock id for the action. Optional with a default value of None
- if a label is specified.
- * The label for the action. This field should typically be marked
- for translation, see the set_translation_domain() method. Optional
- with a default value of None if a stock id is specified.
- * The accelerator for the action, in the format understood by the
- gtk.accelerator_parse() function. Optional with a default value of
- None.
- * The tooltip for the action. This field should typically be marked
- for translation, see the set_translation_domain() method. Optional
- with a default value of None.
- * The callback function invoked when the action is activated.
- Optional with a default value of None.
-
- The "activate" signals of the actions are connected to the callbacks and
- their accel paths are set to <Actions>/group-name/action-name.
- """
- try:
- iter(entries)
- except(TypeError):
- raiseTypeError('entries must be iterable')
-
- def_process_action(name,stock_id=None,label=None,accelerator=None,tooltip=None,callback=None):
- action=Action(name=name,label=label,tooltip=tooltip,stock_id=stock_id)
- ifcallbackisnotNone:
- ifuser_dataisNone:
- action.connect('activate',callback)
- else:
- action.connect('activate',callback,user_data)
-
- self.add_action_with_accel(action,accelerator)
-
- foreinentries:
- # using inner function above since entries can leave out optional arguments
- _process_action(*e)
-
- defadd_toggle_actions(self,entries,user_data=None):
- """
- The add_toggle_actions() method is a convenience method that creates a
- number of gtk.ToggleAction objects based on the information in the list
- of action entry tuples contained in entries and adds them to the action
- group. The toggle action entry tuples can vary in size from one to seven
- items with the following information:
-
- * The name of the action. Must be specified.
- * The stock id for the action. Optional with a default value of None
- if a label is specified.
- * The label for the action. This field should typically be marked
- for translation, see the set_translation_domain() method. Optional
- with a default value of None if a stock id is specified.
- * The accelerator for the action, in the format understood by the
- gtk.accelerator_parse() function. Optional with a default value of
- None.
- * The tooltip for the action. This field should typically be marked
- for translation, see the set_translation_domain() method. Optional
- with a default value of None.
- * The callback function invoked when the action is activated.
- Optional with a default value of None.
- * A flag indicating whether the toggle action is active. Optional
- with a default value of False.
-
- The "activate" signals of the actions are connected to the callbacks and
- their accel paths are set to <Actions>/group-name/action-name.
- """
+classAction(Gtk.Action):
+ __init__=deprecated_init(Gtk.Action.__init__,
+ arg_names=('name','label','tooltip','stock_id'),
+ category=PyGTKDeprecationWarning)
+
+Action=override(Action)
+__all__.append("Action")
+
+
+classRadioAction(Gtk.RadioAction):
+ __init__=deprecated_init(Gtk.RadioAction.__init__,
+ arg_names=('name','label','tooltip','stock_id','value'),
+ category=PyGTKDeprecationWarning)
+
+RadioAction=override(RadioAction)
+__all__.append("RadioAction")
- try:
- iter(entries)
- except(TypeError):
- raiseTypeError('entries must be iterable')
-
- def_process_action(name,stock_id=None,label=None,accelerator=None,tooltip=None,callback=None,is_active=False):
- action=Gtk.ToggleAction(name=name,label=label,tooltip=tooltip,stock_id=stock_id)
- action.set_active(is_active)
- ifcallbackisnotNone:
- ifuser_dataisNone:
- action.connect('activate',callback)
- else:
- action.connect('activate',callback,user_data)
-
- self.add_action_with_accel(action,accelerator)
-
- foreinentries:
- # using inner function above since entries can leave out optional arguments
- _process_action(*e)
-
- defadd_radio_actions(self,entries,value=None,on_change=None,user_data=None):
- """
- The add_radio_actions() method is a convenience method that creates a
- number of gtk.RadioAction objects based on the information in the list
- of action entry tuples contained in entries and adds them to the action
- group. The entry tuples can vary in size from one to six items with the
- following information:
-
- * The name of the action. Must be specified.
- * The stock id for the action. Optional with a default value of None
- if a label is specified.
- * The label for the action. This field should typically be marked
- for translation, see the set_translation_domain() method. Optional
- with a default value of None if a stock id is specified.
- * The accelerator for the action, in the format understood by the
- gtk.accelerator_parse() function. Optional with a default value of
- None.
- * The tooltip for the action. This field should typically be marked
- for translation, see the set_translation_domain() method. Optional
- with a default value of None.
- * The value to set on the radio action. Optional with a default
- value of 0. Should be specified in applications.
-
- The value parameter specifies the radio action that should be set
- active. The "changed" signal of the first radio action is connected to
- the on_change callback (if specified and not None) and the accel paths
- of the actions are set to <Actions>/group-name/action-name.
- """
- try:
- iter(entries)
- except(TypeError):
- raiseTypeError('entries must be iterable')
- first_action=None
+classActionGroup(Gtk.ActionGroup):
+ __init__=deprecated_init(Gtk.ActionGroup.__init__,
+ arg_names=('name',),
+ category=PyGTKDeprecationWarning)
- def_process_action(group_source,name,stock_id=None,label=None,accelerator=None,tooltip=None,entry_value=0):
- action=RadioAction(name=name,label=label,tooltip=tooltip,stock_id=stock_id,value=entry_value)
+ defadd_actions(self,entries,user_data=None):
+ """
+ The add_actions() method is a convenience method that creates a number
+ of gtk.Action objects based on the information in the list of action
+ entry tuples contained in entries and adds them to the action group.
+ The entry tuples can vary in size from one to six items with the
+ following information:
+
+ * The name of the action. Must be specified.
+ * The stock id for the action. Optional with a default value of None
+ if a label is specified.
+ * The label for the action. This field should typically be marked
+ for translation, see the set_translation_domain() method. Optional
+ with a default value of None if a stock id is specified.
+ * The accelerator for the action, in the format understood by the
+ gtk.accelerator_parse() function. Optional with a default value of
+ None.
+ * The tooltip for the action. This field should typically be marked
+ for translation, see the set_translation_domain() method. Optional
+ with a default value of None.
+ * The callback function invoked when the action is activated.
+ Optional with a default value of None.
+
+ The "activate" signals of the actions are connected to the callbacks and
+ their accel paths are set to <Actions>/group-name/action-name.
+ """
+ try:
+ iter(entries)
+ except(TypeError):
+ raiseTypeError('entries must be iterable')
- # FIXME: join_group is a patch to Gtk+ 3.0
- # otherwise we can't effectively add radio actions to a
- # group. Should we depend on 3.0 and error out here
- # or should we offer the functionality via a compat
- # C module?
- ifhasattr(action,'join_group'):
- action.join_group(group_source)
+ def_process_action(name,stock_id=None,label=None,accelerator=None,tooltip=None,callback=None):
+ action=Action(name=name,label=label,tooltip=tooltip,stock_id=stock_id)
+ ifcallbackisnotNone:
+ ifuser_dataisNone:
+ action.connect('activate',callback)
+ else:
+ action.connect('activate',callback,user_data)
- ifvalue==entry_value:
- action.set_active(True)
+ self.add_action_with_accel(action,accelerator)
- self.add_action_with_accel(action,accelerator)
- returnaction
+ foreinentries:
+ # using inner function above since entries can leave out optional arguments
+ _process_action(*e)
- foreinentries:
- # using inner function above since entries can leave out optional arguments
- action=_process_action(first_action,*e)
- iffirst_actionisNone:
- first_action=action
+ defadd_toggle_actions(self,entries,user_data=None):
+ """
+ The add_toggle_actions() method is a convenience method that creates a
+ number of gtk.ToggleAction objects based on the information in the list
+ of action entry tuples contained in entries and adds them to the action
+ group. The toggle action entry tuples can vary in size from one to seven
+ items with the following information:
+
+ * The name of the action. Must be specified.
+ * The stock id for the action. Optional with a default value of None
+ if a label is specified.
+ * The label for the action. This field should typically be marked
+ for translation, see the set_translation_domain() method. Optional
+ with a default value of None if a stock id is specified.
+ * The accelerator for the action, in the format understood by the
+ gtk.accelerator_parse() function. Optional with a default value of
+ None.
+ * The tooltip for the action. This field should typically be marked
+ for translation, see the set_translation_domain() method. Optional
+ with a default value of None.
+ * The callback function invoked when the action is activated.
+ Optional with a default value of None.
+ * A flag indicating whether the toggle action is active. Optional
+ with a default value of False.
+
+ The "activate" signals of the actions are connected to the callbacks and
+ their accel paths are set to <Actions>/group-name/action-name.
+ """
- iffirst_actionisnotNoneandon_changeisnotNone:
+ try:
+ iter(entries)
+ except(TypeError):
+ raiseTypeError('entries must be iterable')
+
+ def_process_action(name,stock_id=None,label=None,accelerator=None,tooltip=None,callback=None,is_active=False):
+ action=Gtk.ToggleAction(name=name,label=label,tooltip=tooltip,stock_id=stock_id)
+ action.set_active(is_active)
+ ifcallbackisnotNone:ifuser_dataisNone:
- first_action.connect('changed',on_change)
+ action.connect('activate',callback)else:
- first_action.connect('changed',on_change,user_data)
+ action.connect('activate',callback,user_data)
+
+ self.add_action_with_accel(action,accelerator)
+
+ foreinentries:
+ # using inner function above since entries can leave out optional arguments
+ _process_action(*e)
+
+ defadd_radio_actions(self,entries,value=None,on_change=None,user_data=None):
+ """
+ The add_radio_actions() method is a convenience method that creates a
+ number of gtk.RadioAction objects based on the information in the list
+ of action entry tuples contained in entries and adds them to the action
+ group. The entry tuples can vary in size from one to six items with the
+ following information:
+
+ * The name of the action. Must be specified.
+ * The stock id for the action. Optional with a default value of None
+ if a label is specified.
+ * The label for the action. This field should typically be marked
+ for translation, see the set_translation_domain() method. Optional
+ with a default value of None if a stock id is specified.
+ * The accelerator for the action, in the format understood by the
+ gtk.accelerator_parse() function. Optional with a default value of
+ None.
+ * The tooltip for the action. This field should typically be marked
+ for translation, see the set_translation_domain() method. Optional
+ with a default value of None.
+ * The value to set on the radio action. Optional with a default
+ value of 0. Should be specified in applications.
+
+ The value parameter specifies the radio action that should be set
+ active. The "changed" signal of the first radio action is connected to
+ the on_change callback (if specified and not None) and the accel paths
+ of the actions are set to <Actions>/group-name/action-name.
+ """
+ try:
+ iter(entries)
+ except(TypeError):
+ raiseTypeError('entries must be iterable')
+
+ first_action=None
+
+ def_process_action(group_source,name,stock_id=None,label=None,accelerator=None,tooltip=None,entry_value=0):
+ action=RadioAction(name=name,label=label,tooltip=tooltip,stock_id=stock_id,value=entry_value)
+
+ # FIXME: join_group is a patch to Gtk+ 3.0
+ # otherwise we can't effectively add radio actions to a
+ # group. Should we depend on 3.0 and error out here
+ # or should we offer the functionality via a compat
+ # C module?
+ ifhasattr(action,'join_group'):
+ action.join_group(group_source)
+
+ ifvalue==entry_value:
+ action.set_active(True)
+
+ self.add_action_with_accel(action,accelerator)
+ returnaction
+
+ foreinentries:
+ # using inner function above since entries can leave out optional arguments
+ action=_process_action(first_action,*e)
+ iffirst_actionisNone:
+ first_action=action
+
+ iffirst_actionisnotNoneandon_changeisnotNone:
+ ifuser_dataisNone:
+ first_action.connect('changed',on_change)
+ else:
+ first_action.connect('changed',on_change,user_data)
+
+ActionGroup=override(ActionGroup)
+__all__.append('ActionGroup')
- ActionGroup=override(ActionGroup)
- __all__.append('ActionGroup')
- classUIManager(Gtk.UIManager):
- defadd_ui_from_string(self,buffer):
- ifnotisinstance(buffer,_basestring):
- raiseTypeError('buffer must be a string')
+classUIManager(Gtk.UIManager):
+ defadd_ui_from_string(self,buffer):
+ ifnotisinstance(buffer,_basestring):
+ raiseTypeError('buffer must be a string')
- length=len(buffer.encode('UTF-8'))
+ length=len(buffer.encode('UTF-8'))
- returnGtk.UIManager.add_ui_from_string(self,buffer,length)
+ returnGtk.UIManager.add_ui_from_string(self,buffer,length)
- definsert_action_group(self,buffer,length=-1):
- returnGtk.UIManager.insert_action_group(self,buffer,length)
+ definsert_action_group(self,buffer,length=-1):
+ returnGtk.UIManager.insert_action_group(self,buffer,length)
- UIManager=override(UIManager)
- __all__.append('UIManager')
+UIManager=override(UIManager)
+__all__.append('UIManager')classComboBox(Gtk.ComboBox,Container):get_active_iter=strip_boolean_result(Gtk.ComboBox.get_active_iter)
-
ComboBox=override(ComboBox)__all__.append('ComboBox')
@@ -566,7 +574,6 @@
else:raiseTypeError('Argument list must be in the form of (column, value, ...), ((columns,...), (values, ...)) or {column: value}. No -1 termination is needed.')
-
ListStore=override(ListStore)__all__.append('ListStore')
@@ -1250,11 +1238,8 @@
Source code for gi.overrides.Gtk
foriinrange(start,stop,step):alist.append(self.model.get_value(self.iter,i))returnalist
- elifisinstance(key,tuple):
- return[self[k]forkinkey]else:
- raiseTypeError("indices must be integers, slice or tuple, not %s"
- %type(key).__name__)
+ raiseTypeError("indices must be integers, not %s"%type(key).__name__)def__setitem__(self,key,value):ifisinstance(key,int):
@@ -1273,16 +1258,8 @@
Source code for gi.overrides.Gtk
fori,vinenumerate(indexList):self.model.set_value(self.iter,v,value[i])
- elifisinstance(key,tuple):
- iflen(key)!=len(value):
- raiseValueError(
- "attempt to assign sequence of size %d to sequence of size %d"
- %(len(value),len(key)))
- fork,vinzip(key,value):
- self[k]=velse:
- raiseTypeError("indices must be an integer, slice or tuple, not %s"
- %type(key).__name__)
+ raiseTypeError("index must be an integer or slice, not %s"%type(key).__name__)def_convert_negative_index(self,index):new_index=self.model.get_n_columns()+index
@@ -1294,7 +1271,6 @@
else:raiseTypeError('Argument list must be in the form of (column, value, ...), ((columns,...), (values, ...)) or {column: value}. No -1 termination is needed.')
-
TreeStore=override(TreeStore)__all__.append('TreeStore')
@@ -1496,7 +1469,6 @@