def _reset_watch(self): """Resets or initializes the internal GUI representation of the MetaWatch to default values. Called on startup during initialization.""" self.m_LEDNotice.Hide() self.m_vibrateNotice.Hide() self.m_watchMode.Selection = 0 self.m_watchMode.Enabled = False self.m_manualModeSet.Value = False self.clock_offset = relativedelta(0) self.parser.watch_reset() # There is no seperate internal data structure for the watch state, # the GUI elements *are* the internal representation. This function # essentially resets them to a known state. self.m_pg.ClearPage(0) self.m_pg.Append(wxpg.PropertyCategory("NVAL Store")) # All NVAL values are listed in the protocol_constants module. The # property grid is built by parsing that list and applying default # values (NVAL properties which have no default value are ignored, # they are marked 'reserved' in the protocol documentation). for value in nval.get_nval_list(): args, kwargs = ([], {}) if value.displaytype[0] and value.default: dest_type, value_type = value.displaytype kwargs = dict(value = value_type(value.default)) elif isinstance(value.valuetype, list): dest_type = wxpg.EnumProperty args = (value.valuetype, range(len(value.valuetype)), value.default) elif isinstance(value.valuetype, dict): dest_type = wxpg.EnumProperty args = (value.valuetype.values(), value.valuetype.keys(), value.default) else: continue self.m_pg.Append(dest_type(value.name, str("nval_%04X" % value.identifier), *args, **kwargs)) self.m_pg.Append(wxpg.PropertyCategory("Real Time Clock")) self.m_pg.Append(wxpg.DateProperty("Date")) self.m_pg.Append(wxpg.StringProperty("Time")) self.m_pg.SetPropertyAttribute("Date", wxpg.PG_DATE_PICKER_STYLE, wx.DP_DROPDOWN|wx.DP_SHOWCENTURY) # Call the timer function once for immediate clock update. self.OnClock() self.logger.info("Initialized watch to default state")
def _create_dummy_content(self): # some dummy content from the wxPython demo import wx.propgrid as wxpg pg = self.widget pg.AddPage( "Page 1 - Dummy" ) pg.Append( wxpg.PropertyCategory("1 - Basic Properties") ) pg.Append( wxpg.StringProperty("String",value="Some Text") ) sp = pg.Append( wxpg.StringProperty('StringProperty w/ Password flag', value='ABadPassword') ) sp.SetAttribute('Hint', 'This is a hint') sp.SetAttribute('Password', True) pg.Append( wxpg.IntProperty("Int",value=123) ) pg.Append( wxpg.FloatProperty("Float",value=123.4) ) pg.Append( wxpg.BoolProperty("Bool",value=True) ) pg.Append( wxpg.BoolProperty("Bool_with_Checkbox",value=True) ) pg.SetPropertyAttribute( "Bool_with_Checkbox", "UseCheckbox", True) pg.Append( wxpg.PropertyCategory("2 - More Properties") ) pg.Append( wxpg.LongStringProperty("LongString", value="This is a\nmulti-line string\nwith\ttabs\nmixed\tin.")) pg.Append( wxpg.DirProperty("Dir",value=r"C:\Windows") ) pg.Append( wxpg.FileProperty("File",value=r"C:\Windows\system.ini") ) pg.Append( wxpg.ArrayStringProperty("ArrayString",value=['A','B','C']) ) pg.Append( wxpg.EnumProperty("Enum","Enum", ['wxPython Rules', 'wxPython Rocks', 'wxPython Is The Best'], [10,11,12], 0) ) pg.Append( wxpg.EditEnumProperty("EditEnum","EditEnumProperty", ['A','B','C'], [0,1,2], "Text Not in List") ) pg.Append( wxpg.PropertyCategory("3 - Advanced Properties") ) pg.Append( wxpg.DateProperty("Date",value=wx.DateTime.Now()) ) pg.Append( wxpg.FontProperty("Font",value=self.widget.GetFont()) ) pg.Append( wxpg.ColourProperty("Colour", value=self.widget.GetBackgroundColour()) ) pg.Append( wxpg.SystemColourProperty("SystemColour") ) pg.Append( wxpg.ImageFileProperty("ImageFile") ) pg.Append( wxpg.MultiChoiceProperty("MultiChoice", choices=['wxWidgets','QT','GTK+']) ) pg.Append( wxpg.PropertyCategory("4 - Additional Properties") ) pg.Append( wxpg.IntProperty("IntWithSpin",value=256) ) pg.SetPropertyEditor("IntWithSpin","SpinCtrl") pg.SetPropertyAttribute( "File", wxpg.PG_FILE_SHOW_FULL_PATH, 0 ) pg.SetPropertyAttribute( "File", wxpg.PG_FILE_INITIAL_PATH, r"C:\Program Files\Internet Explorer" ) if compat.IS_PHOENIX: pg.SetPropertyAttribute( "Date", wxpg.PG_DATE_PICKER_STYLE, wx.adv.DP_DROPDOWN|wx.adv.DP_SHOWCENTURY ) pg.AddPage( "Page 2 - Almost Empty" ) pg.Append( wxpg.PropertyCategory("1 - Basic Properties") ) pg.Append( wxpg.StringProperty("String 2",value="Some Text") )
def _create_plot_properties(self): pg = self.property_grid_1 # pg.AddPage("Page 1 - Plot Settings") # if pages are needed, use PropertyGridManger instead dir_path = os.path.dirname(os.path.realpath(__file__)) pg.Append(wxpg.PropertyCategory("1 - Basic Properties")) pg.Append(wxpg.StringProperty(label="Title", value="Title")) pg.Append(wxpg.StringProperty(label="X Label", value="X Label")) pg.Append(wxpg.StringProperty(label="Y Label", value="Y Label")) pg.Append(wxpg.BoolProperty(label="Grid", value=True)) pg.SetPropertyAttribute(id="Grid", attrName="UseCheckbox", value=True) pg.Append(wxpg.PropertyCategory("2 - Data")) # https://discuss.wxpython.org/t/wxpython-pheonix-4-0-2-question-regarding-multichoiceproperty-and-setting-the-selection-of-the-choices/30044 # https://discuss.wxpython.org/t/how-to-set-propertygrid-values/30152/4 pg.Append( wxpg.EnumProperty( label="Scale", labels=['Linear', 'SemilogX', 'SemilogY', 'LogLog'])) pg.Append( wxpg.EnumProperty(label="X Data", name="X Data", labels=['NaN'], values=[0])) pg.Append( wxpg.MultiChoiceProperty(label="Y Data", name='Y Data', choices=['NaN'], value=['NaN'])) pg.Append( wxpg.EnumProperty(label="Data Labels", name="Data Labels", labels=['NaN'], values=[0])) pg.Append(wxpg.PropertyCategory("3 - Optional Static Plot Overlay")) pg.Append(wxpg.FileProperty(label="Overlay Plot", value=rf"{dir_path}")) pg.Append(wxpg.EnumProperty(label="X Axis Variable", labels=[''])) pg.Append(wxpg.EnumProperty(label="Y Axis Variable", labels=[''])) pg.Append(wxpg.PropertyCategory("4 - Advanced Properties")) pg.Append(wxpg.ArrayStringProperty(label="xLim", value=['0', '100'])) pg.Append(wxpg.ArrayStringProperty(label="yLim", value=['0', '100'])) pg.Append(wxpg.DateProperty(label="Date", value=wx.DateTime.Now())) pg.Append(wxpg.ColourProperty(label="Line Colour", value='#1f77b4')) pg.Append(wxpg.FontProperty(label="Font", value=self.GetFont())) pg.Grid.FitColumns()
def init_view(self, items, para, preview=False, modal=True, app=None): self.para, self.modal = para, modal self.pg = pg = wxpg.PropertyGridManager( self, style=wxpg.PG_SPLITTER_AUTO_CENTER) sizer = wx.BoxSizer(wx.VERTICAL) # Show help as tooltips pg.SetExtraStyle(wxpg.PG_EX_HELP_AS_TOOLTIPS) pg.Bind(wxpg.EVT_PG_CHANGED, self.OnPropGridChange) pg.Bind(wxpg.EVT_PG_SELECTED, self.OnPropGridSelect) pg.AddPage('') for i in items: if i[0] == 'lab': pg.Append(wxpg.PropertyCategory(i[2])) if i[0] == int: pg.Append(wxpg.IntProperty(i[1], value=int(para[i[1]]) or 0)) if i[0] == float: pg.Append( wxpg.FloatProperty(i[1], value=float(para[i[1]]) or 0)) if i[0] == str: pg.Append(wxpg.StringProperty(i[1], value=para[i[1]] or '')) if i[0] == 'txt': pg.Append(wxpg.LongStringProperty(i[1], value=para[i[1]] or '')) if i[0] == bool: pg.Append(wxpg.BoolProperty(i[1])) if i[0] == 'date': pg.Append(wxpg.DateProperty(i[1], value=wx.DateTime.Now())) #if i[0] == 'list': pg.Append( wxpg.EnumProperty(i[1], i[1], [i.strip() for i in i[2][1:-1].split(',')])) #if i[0] == 'img': pg.Append( wxpg.EnumProperty(v[1], v[1], ['a','b','c'])) #if i[0] == 'tab': pg.Append( wxpg.EnumProperty(v[1], v[1], ['a','b','c'])) #if preview:self.add_ctrl_(Check, 'preview', ('preview',), app=app) #self.reset(para) sizer.Add(pg, 1, wx.EXPAND) self.SetSizer(sizer) self.add_confirm(modal) self.Layout() self.Fit() wx.Dialog.Bind(self, wx.EVT_WINDOW_DESTROY, self.OnDestroy) #wx.Dialog.Bind(self, wx.EVT_IDLE, lambda e: self.reset()) print('bind close')
def __init__( self, parent, id = wx.ID_ANY, pos = wx.DefaultPosition, size = wx.Size( 500,395 ), style = wx.TAB_TRAVERSAL, name = wx.EmptyString ): wx.Panel.__init__ ( self, parent, id = id, pos = pos, size = size, style = style, name = name ) bSizer1 = wx.BoxSizer( wx.VERTICAL ) self.m_propertyGridManager1 = pg.PropertyGridManager(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.propgrid.PG_DESCRIPTION|wx.propgrid.PG_SPLITTER_AUTO_CENTER|wx.propgrid.PG_TOOLBAR|wx.propgrid.PG_TOOLTIPS|wx.TAB_TRAVERSAL) self.m_propertyGridManager1.SetExtraStyle( wx.propgrid.PG_EX_AUTO_UNSPECIFIED_VALUES|wx.propgrid.PG_EX_MODE_BUTTONS|wx.propgrid.PG_EX_NO_FLAT_TOOLBAR|wx.propgrid.PG_EX_NO_TOOLBAR_DIVIDER ) self.m_propertyGridPage1 = self.m_propertyGridManager1.AddPage( u"Page", wx.ArtProvider.GetBitmap( wx.ART_REPORT_VIEW, wx.ART_BUTTON ) ); self.Item1 = self.m_propertyGridPage1.Append( pg.PropertyCategory( u"Directory of Work", u"Directory of Work" ) ) self.Item2 = self.m_propertyGridPage1.Append( pg.DirProperty( u"Database and Sql files", u"Database and Sql files" ) ) self.Item3 = self.m_propertyGridPage1.Append( pg.DirProperty( u"Utility and Plugin", u"Utility and Plugin" ) ) self.Item4 = self.m_propertyGridPage1.Append( pg.DirProperty( u"Server and Local Network", u"Server and Local Network" ) ) self.m_propertyGridPage1.SetPropertyHelpString( Item4, u"Directory of Local Network that Database and Main File here and other client get Data from it" ) self.Item5 = self.m_propertyGridPage1.Append( pg.DirProperty( u"Other and Temp", u"Other and Temp" ) ) self.Item6 = self.m_propertyGridPage1.Append( pg.PropertyCategory( u"General parameter", u"General parameter" ) ) self.Item7 = self.m_propertyGridPage1.Append( pg.DateProperty( u"Date of Today ", u"Date of Today " ) ) self.Item8 = self.m_propertyGridPage1.Append( pg.EnumProperty( u"Language", u"Language" ) ) self.Item9 = self.m_propertyGridPage1.Append( pg.BoolProperty( u"Show Clock", u"Show Clock" ) ) self.Item10 = self.m_propertyGridPage1.Append( pg.FontProperty( u"Font", u"Font" ) ) self.Item11 = self.m_propertyGridPage1.Append( pg.FlagsProperty( u"Size", u"Size" ) ) self.Item12 = self.m_propertyGridPage1.Append( pg.StringProperty( u"position", u"position" ) ) self.m_propertyGridPage2 = self.m_propertyGridManager1.AddPage( u"Page", wx.ArtProvider.GetBitmap( wx.ART_LIST_VIEW, wx.ART_TOOLBAR ) ); self.Item13 = self.m_propertyGridPage2.Append( pg.PropertyCategory( u"Other Status", u"Other Status" ) ) self.Item14 = self.m_propertyGridPage2.Append( pg.StringProperty( u"Toolbar", u"Toolbar" ) ) self.Item15 = self.m_propertyGridPage2.Append( pg.StringProperty( u"Pan Input", u"Pan Input" ) ) self.Item16 = self.m_propertyGridPage2.Append( pg.StringProperty( u"Pan Status", u"Pan Status" ) ) self.Item17 = self.m_propertyGridPage2.Append( pg.ImageFileProperty( u"Background", u"Background" ) ) self.Item18 = self.m_propertyGridPage2.Append( pg.CursorProperty( u"Cursor", u"Cursor" ) ) self.Item19 = self.m_propertyGridPage2.Append( pg.LongStringProperty( u"Help", u"Help" ) ) bSizer1.Add( self.m_propertyGridManager1, 1, wx.ALL|wx.EXPAND, 5 ) self.SetSizer( bSizer1 ) self.Layout()
def __init__(self, parent, log): wx.Panel.__init__(self, parent, wx.ID_ANY) self.log = log self.panel = panel = wx.Panel(self, wx.ID_ANY) topsizer = wx.BoxSizer(wx.VERTICAL) # Difference between using PropertyGridManager vs PropertyGrid is that # the manager supports multiple pages and a description box. self.pg = pg = wxpg.PropertyGridManager( panel, style=wxpg.PG_SPLITTER_AUTO_CENTER | wxpg.PG_AUTO_SORT | wxpg.PG_TOOLBAR) # Show help as tooltips pg.SetExtraStyle(wxpg.PG_EX_HELP_AS_TOOLTIPS) pg.Bind(wxpg.EVT_PG_CHANGED, self.OnPropGridChange) pg.Bind(wxpg.EVT_PG_PAGE_CHANGED, self.OnPropGridPageChange) pg.Bind(wxpg.EVT_PG_SELECTED, self.OnPropGridSelect) pg.Bind(wxpg.EVT_PG_RIGHT_CLICK, self.OnPropGridRightClick) # # Let's use some simple custom editor # # NOTE: Editor must be registered *before* adding a property that # uses it. if not getattr(sys, '_PropGridEditorsRegistered', False): pg.RegisterEditor(TrivialPropertyEditor) pg.RegisterEditor(SampleMultiButtonEditor) pg.RegisterEditor(LargeImageEditor) # ensure we only do it once sys._PropGridEditorsRegistered = True # # Add properties # pg.AddPage("Page 1 - Testing All") pg.Append(wxpg.PropertyCategory("1 - Basic Properties")) pg.Append(wxpg.StringProperty("String", value="Some Text")) sp = pg.Append( wxpg.StringProperty('StringProperty w/ Password flag', value='ABadPassword')) sp.SetAttribute('Hint', 'This is a hint') sp.SetAttribute('Password', True) pg.Append(wxpg.IntProperty("Int", value=100)) pg.Append(wxpg.FloatProperty("Float", value=100.0)) pg.Append(wxpg.BoolProperty("Bool", value=True)) boolprop = pg.Append( wxpg.BoolProperty("Bool_with_Checkbox", value=True)) pg.SetPropertyAttribute( "Bool_with_Checkbox", # You can find the property by name, #boolprop, # or give the property object itself. "UseCheckbox", True) # The attribute name and value pg.Append(wxpg.PropertyCategory("2 - More Properties")) pg.Append( wxpg.LongStringProperty( "LongString", value="This is a\nmulti-line string\nwith\ttabs\nmixed\tin.")) pg.Append(wxpg.DirProperty("Dir", value=r"C:\Windows")) pg.Append(wxpg.FileProperty("File", value=r"C:\Windows\system.ini")) pg.Append( wxpg.ArrayStringProperty("ArrayString", value=['A', 'B', 'C'])) pg.Append( wxpg.EnumProperty( "Enum", "Enum", ['wxPython Rules', 'wxPython Rocks', 'wxPython Is The Best'], [10, 11, 12], 0)) pg.Append( wxpg.EditEnumProperty("EditEnum", "EditEnumProperty", ['A', 'B', 'C'], [0, 1, 2], "Text Not in List")) pg.Append(wxpg.PropertyCategory("3 - Advanced Properties")) pg.Append(wxpg.DateProperty("Date", value=wx.DateTime.Now())) pg.Append(wxpg.FontProperty("Font", value=panel.GetFont())) pg.Append( wxpg.ColourProperty("Colour", value=panel.GetBackgroundColour())) pg.Append(wxpg.SystemColourProperty("SystemColour")) pg.Append(wxpg.ImageFileProperty("ImageFile")) pg.Append( wxpg.MultiChoiceProperty("MultiChoice", choices=['wxWidgets', 'QT', 'GTK+'])) pg.Append(wxpg.PropertyCategory("4 - Additional Properties")) #pg.Append( wxpg.PointProperty("Point",value=panel.GetPosition()) ) pg.Append(SizeProperty("Size", value=panel.GetSize())) #pg.Append( wxpg.FontDataProperty("FontData") ) pg.Append(wxpg.IntProperty("IntWithSpin", value=256)) pg.SetPropertyEditor("IntWithSpin", "SpinCtrl") pg.SetPropertyAttribute("File", wxpg.PG_FILE_SHOW_FULL_PATH, 0) pg.SetPropertyAttribute("File", wxpg.PG_FILE_INITIAL_PATH, r"C:\Program Files\Internet Explorer") pg.SetPropertyAttribute("Date", wxpg.PG_DATE_PICKER_STYLE, wx.adv.DP_DROPDOWN | wx.adv.DP_SHOWCENTURY) pg.Append(wxpg.PropertyCategory("5 - Custom Properties and Editors")) pg.Append(IntProperty2("IntProperty2", value=1024)) pg.Append(PyObjectProperty("PyObjectProperty")) pg.Append(DirsProperty("Dirs1", value=['C:/Lib', 'C:/Bin'])) pg.Append(DirsProperty("Dirs2", value=['/lib', '/bin'])) # Test another type of delimiter pg.SetPropertyAttribute("Dirs2", "Delimiter", '"') # SampleMultiButtonEditor pg.Append(wxpg.LongStringProperty("MultipleButtons")) pg.SetPropertyEditor("MultipleButtons", "SampleMultiButtonEditor") pg.Append(SingleChoiceProperty("SingleChoiceProperty")) # Custom editor samples prop = pg.Append( wxpg.StringProperty("StringWithCustomEditor", value="test value")) pg.SetPropertyEditor(prop, "TrivialPropertyEditor") pg.Append(wxpg.ImageFileProperty("ImageFileWithLargeEditor")) pg.SetPropertyEditor("ImageFileWithLargeEditor", "LargeImageEditor") # When page is added, it will become the target page for AutoFill # calls (and for other property insertion methods as well) pg.AddPage("Page 2 - Results of AutoFill will appear here") topsizer.Add(pg, 1, wx.EXPAND) rowsizer = wx.BoxSizer(wx.HORIZONTAL) but = wx.Button(panel, -1, "SetPropertyValues") but.Bind(wx.EVT_BUTTON, self.OnSetPropertyValues) rowsizer.Add(but, 1) but = wx.Button(panel, -1, "GetPropertyValues") but.Bind(wx.EVT_BUTTON, self.OnGetPropertyValues) rowsizer.Add(but, 1) topsizer.Add(rowsizer, 0, wx.EXPAND) rowsizer = wx.BoxSizer(wx.HORIZONTAL) but = wx.Button(panel, -1, "GetPropertyValues(as_strings=True)") but.Bind(wx.EVT_BUTTON, self.OnGetPropertyValues2) rowsizer.Add(but, 1) but = wx.Button(panel, -1, "AutoFill") but.Bind(wx.EVT_BUTTON, self.OnAutoFill) rowsizer.Add(but, 1) topsizer.Add(rowsizer, 0, wx.EXPAND) rowsizer = wx.BoxSizer(wx.HORIZONTAL) but = wx.Button(panel, -1, "Delete") but.Bind(wx.EVT_BUTTON, self.OnDeleteProperty) rowsizer.Add(but, 1) but = wx.Button(panel, -1, "Run Tests") but.Bind(wx.EVT_BUTTON, self.RunTests) rowsizer.Add(but, 1) topsizer.Add(rowsizer, 0, wx.EXPAND) panel.SetSizer(topsizer) topsizer.SetSizeHints(panel) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(panel, 1, wx.EXPAND) self.SetSizer(sizer) self.SetAutoLayout(True)
def Remplissage(self): # Bordereau self.Append(wxpg.PropertyCategory(_(u"Bordereau"))) propriete = wxpg.IntProperty(label=_(u"Exercice"), name="exercice", value=datetime.date.today().year) propriete.SetHelpString(_(u"Saisissez l'année de l'exercice")) self.Append(propriete) self.SetPropertyEditor("exercice", "SpinCtrl") listeMois = [ u"_", _(u"Janvier"), _(u"Février"), _(u"Mars"), _(u"Avril"), _(u"Mai"), _(u"Juin"), _(u"Juillet"), _(u"Août"), _(u"Septembre"), _(u"Octobre"), _(u"Novembre"), _(u"Décembre") ] propriete = wxpg.EnumProperty(label=_(u"Mois"), name="mois", labels=listeMois, values=range(0, 13), value=datetime.date.today().month) propriete.SetHelpString(_(u"Sélectionnez le mois")) self.Append(propriete) propriete = wxpg.StringProperty(label=_(u"Objet"), name="objet_dette", value=u"") propriete.SetHelpString( _(u"Saisissez l'objet du bordereau (Ex : 'Centre de Loisirs')")) self.Append(propriete) # Dates self.Append(wxpg.PropertyCategory(_(u"Dates"))) if 'phoenix' in wx.PlatformInfo: now = wx.DateTime.Now() else: now = wx.DateTime_Now() propriete = wxpg.DateProperty(label=_(u"Date d'émission"), name="date_emission", value=now) propriete.SetAttribute(wxpg.PG_DATE_PICKER_STYLE, DP_DROPDOWN | DP_SHOWCENTURY) self.Append(propriete) propriete = wxpg.DateProperty(label=_(u"Date du prélèvement"), name="date_prelevement", value=now) propriete.SetAttribute(wxpg.PG_DATE_PICKER_STYLE, DP_DROPDOWN | DP_SHOWCENTURY) self.Append(propriete) propriete = wxpg.DateProperty(label=_(u"Avis d'envoi"), name="date_envoi", value=now) propriete.SetAttribute(wxpg.PG_DATE_PICKER_STYLE, DP_DROPDOWN | DP_SHOWCENTURY) self.Append(propriete) # Collectivité self.Append(wxpg.PropertyCategory(_(u"Identification"))) propriete = wxpg.StringProperty(label=_(u"ID Bordereau"), name="id_bordereau", value=u"") propriete.SetHelpString(_(u"Saisissez l'ID du bordereau")) self.Append(propriete) propriete = wxpg.StringProperty(label=_(u"ID Poste"), name="id_poste", value=u"") propriete.SetHelpString(_(u"Saisissez l'ID du bordereau")) self.Append(propriete) propriete = wxpg.StringProperty(label=_(u"ID Collectivité"), name="id_collectivite", value=u"") propriete.SetHelpString(_(u"Saisissez l'ID de la collectivité")) self.Append(propriete) propriete = wxpg.StringProperty(label=_(u"Code Collectivité"), name="code_collectivite", value=u"") propriete.SetHelpString(_(u"Saisissez le code Collectivité")) self.Append(propriete) propriete = wxpg.StringProperty(label=_(u"Code Budget"), name="code_budget", value=u"") propriete.SetHelpString(_(u"Saisissez le code Budget")) self.Append(propriete) propriete = wxpg.StringProperty(label=_(u"Code Produit Local"), name="code_prodloc", value=u"") propriete.SetHelpString(_(u"Saisissez le code Produit Local")) self.Append(propriete) propriete = wxpg.StringProperty(label=_(u"Code Etablissement"), name="code_etab", value=u"") propriete.SetHelpString( _(u"Saisissez le code Etablissement (3 caractères max). Nécessaire pour le datamatrix. Ce code apparaît dans les paramètres de flux dans Hélios." )) self.Append(propriete) # Libellés self.Append(wxpg.PropertyCategory(_(u"Libellés"))) propriete = wxpg.StringProperty( label=_(u"Objet de la pièce"), name="objet_piece", value=_(u"FACTURE NUM{NUM_FACTURE} {MOIS_LETTRES} {ANNEE}")) propriete.SetHelpString( _(u"Saisissez l'objet de la pièce (en majuscules et sans accents). Vous pouvez personnaliser ce libellé grâce aux mots-clés suivants : {NOM_ORGANISATEUR} {NUM_FACTURE} {LIBELLE_FACTURE} {MOIS} {MOIS_LETTRES} {ANNEE}." )) self.Append(propriete) propriete = wxpg.StringProperty( label=_(u"Libellé du prélèvement"), name="prelevement_libelle", value=u"{NOM_ORGANISATEUR} - {OBJET_PIECE}") propriete.SetHelpString( _(u"Saisissez le libellé du prélèvement qui apparaîtra sur le relevé de compte de la famille. Vous pouvez personnaliser ce libellé grâce aux mots-clés suivants : {NOM_ORGANISATEUR} {OBJET_PIECE} {NUM_FACTURE} {LIBELLE_FACTURE} {MOIS} {MOIS_LETTRES} {ANNEE}." )) self.Append(propriete) # Pièces jointes self.Append(wxpg.PropertyCategory(_(u"Pièces jointes"))) propriete = wxpg.BoolProperty( label=_(u"Inclure les factures en pièces jointes"), name="inclure_pieces_jointes", value=False) propriete.SetHelpString( _(u"Cochez cette case si vous souhaitez que Noethys intègre les factures en temps que pièces jointes au bordereau" )) propriete.SetAttribute("UseCheckbox", True) self.Append(propriete) propriete = wxpg.StringProperty( label=_(u"Format des noms de fichiers"), name="format_nom_fichier", value=_(u"F{NUM_FACTURE}_{NOM_TITULAIRES_MAJ}")) propriete.SetHelpString( _(u"Saisissez le format des noms de fichiers (en majuscules et sans espaces ni accents). Vous pouvez personnaliser ce libellé grâce aux mots-clés suivants : {NUM_FACTURE} {NOM_TITULAIRES} {NOM_TITULAIRES_MAJ}." )) self.Append(propriete) # Règlement automatique self.Append(wxpg.PropertyCategory(_(u"Règlement automatique"))) propriete = wxpg.BoolProperty(label=_(u"Régler automatiquement"), name="reglement_auto", value=False) propriete.SetHelpString( _(u"Cochez cette case si vous souhaitez que Noethys créé un règlement automatiquement pour les prélèvements" )) propriete.SetAttribute("UseCheckbox", True) self.Append(propriete) propriete = wxpg.EnumProperty(label=_(u"Compte à créditer"), name="IDcompte") propriete.SetHelpString( _(u"Sélectionnez le compte bancaire à créditer dans le cadre du règlement automatique" )) propriete.SetEditor("EditeurComboBoxAvecBoutons") self.Append(propriete) self.MAJ_comptes() propriete = wxpg.EnumProperty(label=_(u"Mode de règlement"), name="IDmode") propriete.SetHelpString( _(u"Sélectionnez le mode de règlement à utiliser dans le cadre du règlement automatique" )) propriete.SetEditor("EditeurComboBoxAvecBoutons") self.Append(propriete) self.MAJ_modes() # Préférences self.SetPropertyValue( "inclure_pieces_jointes", UTILS_Parametres.Parametres(mode="get", categorie="export_pes", nom="inclure_pieces_jointes", valeur=False))
def InitMatrice(self, matrice): # Compose la grille de saisie des paramètres selon le dictionnaire matrice self.matrice = matrice self.dicProperties = {} chapitre = self.matrice['nomchapitre'] if isinstance(chapitre, str): self.Append(wxpg.PropertyCategory(chapitre)) for ligne in self.matrice['lignes']: if 'name' in ligne and 'genre' in ligne: if not 'label' in ligne: ligne['name'] = None if not 'value' in ligne: ligne['value'] = None genre, name, label, value = (ligne['genre'], ligne['name'], ligne['label'], ligne['value']) genre = genre.lower() if not 'labels' in ligne: ligne['labels'] = [] """ if 'values' in ligne and ligne['values']: if ligne['labels']: if len(ligne['values']) > 0 and len(ligne['labels']) == 0: ligne['labels'] = ligne['values'] else: ligne['labels'] = ligne['values'] """ commande = '' try: commande = genre if genre in ['enum', 'combo']: values = list(range(0, len(ligne['labels']))) if not isinstance(value, int): value = 0 choix = wxpg.PGChoices(ligne['labels'], values=values) propriete = wxpg.EnumProperty(label=label, name=name, choices=choix, value=value) elif genre == 'multichoice': propriete = wxpg.MultiChoiceProperty( label, name, choices=ligne['labels'], value=value) elif genre in ['bool', 'check']: wxpg.PG_BOOL_USE_CHECKBOX = 1 propriete = wxpg.BoolProperty(label=label, name=name, value=value) propriete.PG_BOOL_USE_CHECKBOX = 1 elif genre in ['date', 'datetime', 'time']: wxpg.PG_BOOL_USE_CHECKBOX = 1 propriete = wxpg.DateProperty(label=label, name=name, value=value) propriete.SetFormat('%d/%m/%Y') propriete.PG_BOOL_USE_CHECKBOX = 1 else: commande = "wxpg." + genre.upper()[:1] + genre.lower()[1:] \ + "Property(label= label, name=name, value=value)" propriete = eval(commande) if 'help' in ligne: propriete.SetHelpString(ligne['help']) self.Append(propriete) self.dicProperties[propriete] = name self.dicProperties[name] = propriete except Exception as err: wx.MessageBox( "Echec sur Property de name - value: %s - %s (%s)\nLe retour d'erreur est : \n%s\n\nSur commande : %s" % (name, value, type(value), err, commande), 'CTRL_property.InitMatrice() : Paramètre ligne indigeste !', wx.OK | wx.ICON_STOP)
def Remplissage(self): # Bordereau self.Append(wxpg.PropertyCategory(_(u"Bordereau"))) propriete = wxpg.IntProperty(label=_(u"Exercice"), name="exercice", value=datetime.date.today().year) propriete.SetHelpString(_(u"Saisissez l'année de l'exercice")) self.Append(propriete) self.SetPropertyEditor("exercice", "SpinCtrl") listeMois = [ u"_", _(u"Janvier"), _(u"Février"), _(u"Mars"), _(u"Avril"), _(u"Mai"), _(u"Juin"), _(u"Juillet"), _(u"Août"), _(u"Septembre"), _(u"Octobre"), _(u"Novembre"), _(u"Décembre") ] propriete = wxpg.EnumProperty(label=_(u"Mois"), name="mois", labels=listeMois, values=range(0, 13), value=datetime.date.today().month) propriete.SetHelpString(_(u"Sélectionnez le mois")) self.Append(propriete) propriete = wxpg.StringProperty(label=_(u"Objet"), name="objet_dette", value=u"") propriete.SetHelpString( _(u"Saisissez l'objet du bordereau (Ex : 'Centre de Loisirs')")) self.Append(propriete) # Dates self.Append(wxpg.PropertyCategory(_(u"Dates"))) if 'phoenix' in wx.PlatformInfo: now = wx.DateTime.Now() else: now = wx.DateTime_Now() propriete = wxpg.DateProperty(label=_(u"Date d'émission"), name="date_emission", value=now) propriete.SetAttribute(wxpg.PG_DATE_PICKER_STYLE, DP_DROPDOWN | DP_SHOWCENTURY) self.Append(propriete) propriete = wxpg.DateProperty(label=_(u"Date du prélèvement"), name="date_prelevement", value=now) propriete.SetAttribute(wxpg.PG_DATE_PICKER_STYLE, DP_DROPDOWN | DP_SHOWCENTURY) self.Append(propriete) propriete = wxpg.DateProperty(label=_(u"Avis d'envoi"), name="date_envoi", value=now) propriete.SetAttribute(wxpg.PG_DATE_PICKER_STYLE, DP_DROPDOWN | DP_SHOWCENTURY) self.Append(propriete) # Collectivité self.Append(wxpg.PropertyCategory(_(u"Identification"))) propriete = wxpg.StringProperty(label=_(u"ID Bordereau"), name="id_bordereau", value=u"") propriete.SetHelpString( _(u"Saisissez l'ID du bordereau. Facultatif : Si non renseigné, le bordereau est créé dans le Brouillard" )) self.Append(propriete) propriete = wxpg.StringProperty(label=_(u"Article budgétaire"), name="id_poste", value=u"") propriete.SetHelpString(_(u"Saisissez l'article budgétaire (Nature)")) self.Append(propriete) propriete = wxpg.StringProperty(label=_(u"ID Collectivité"), name="id_collectivite", value=u"") propriete.SetHelpString( _(u"Saisissez l'ID de la collectivité (Numéro SIRET)")) self.Append(propriete) propriete = wxpg.StringProperty(label=_(u"Code Collectivité"), name="code_collectivite", value=u"") propriete.SetHelpString(_(u"Saisissez le code Collectivité")) self.Append(propriete) propriete = wxpg.StringProperty(label=_(u"Code Budget"), name="code_budget", value=u"") propriete.SetHelpString(_(u"Saisissez le code Budget")) self.Append(propriete) propriete = wxpg.StringProperty(label=_(u"Code Produit Local"), name="code_prodloc", value=u"") propriete.SetHelpString(_(u"Saisissez le code Produit Local")) self.Append(propriete) # Libellés self.Append(wxpg.PropertyCategory(_(u"Libellés"))) propriete = wxpg.StringProperty( label=_(u"Objet de la pièce"), name="objet_piece", value=_(u"FACTURE NUM{NUM_FACTURE} {MOIS_LETTRES} {ANNEE}")) propriete.SetHelpString( _(u"Saisissez l'objet de la pièce (en majuscules et sans accents). Vous pouvez personnaliser ce libellé grâce aux mots-clés suivants : {NOM_ORGANISATEUR} {NUM_FACTURE} {LIBELLE_FACTURE} {MOIS} {MOIS_LETTRES} {ANNEE}." )) self.Append(propriete) propriete = wxpg.StringProperty( label=_(u"Libellé du prélèvement"), name="prelevement_libelle", value=u"{NOM_ORGANISATEUR} - {OBJET_PIECE}") propriete.SetHelpString( _(u"Saisissez le libellé du prélèvement qui apparaîtra sur le relevé de compte de la famille. Vous pouvez personnaliser ce libellé grâce aux mots-clés suivants : {NOM_ORGANISATEUR} {OBJET_PIECE} {NUM_FACTURE} {LIBELLE_FACTURE} {MOIS} {MOIS_LETTRES} {ANNEE}." )) self.Append(propriete) propriete = wxpg.StringProperty(label=_(u"Nom de la collectivité"), name="nom_collectivite", value=u"{NOM_ORGANISATEUR}") propriete.SetHelpString( _(u"Saisissez le nom de la collectivité. A défaut, c'est le nom de l'organisateur qui sera inséré automatiquement." )) self.Append(propriete) # Règlement automatique self.Append(wxpg.PropertyCategory(_(u"Règlement automatique"))) propriete = wxpg.BoolProperty(label=_(u"Régler automatiquement"), name="reglement_auto", value=False) propriete.SetHelpString( _(u"Cochez cette case si vous souhaitez que Noethys créé un règlement automatiquement pour les prélèvements" )) propriete.SetAttribute("UseCheckbox", True) self.Append(propriete) propriete = wxpg.EnumProperty(label=_(u"Compte à créditer"), name="IDcompte") propriete.SetHelpString( _(u"Sélectionnez le compte bancaire à créditer dans le cadre du règlement automatique" )) propriete.SetEditor("EditeurComboBoxAvecBoutons") self.Append(propriete) self.MAJ_comptes() propriete = wxpg.EnumProperty(label=_(u"Mode de règlement"), name="IDmode") propriete.SetHelpString( _(u"Sélectionnez le mode de règlement à utiliser dans le cadre du règlement automatique" )) propriete.SetEditor("EditeurComboBoxAvecBoutons") self.Append(propriete) self.MAJ_modes()
def UpdateHeaderValues(self): # clear the existing general page self._general_page.Clear() # get main frame widget - abort if something goes wrong # for instance - handle case where all tabs are closed try: try: image = component.getUtility(ICurrentImage) except component.ComponentLookupError: # no image is loaded return header = image.GetHeader().copy() dicom_header = image.GetDICOMHeader() pageState = component.getUtility( ICurrentViewportManager).GetPageState() except: logging.exception("ImageInfo") return # if page isn't an image, get out of here early if pageState.GetPageType() != "image": return # remove hidden properties # Update all text fields in the dialog box # Title val = dicom_header.PatientsName if isinstance(val, list): val = '\\'.join(val) properties = { 'Image Properties': [], 'Patient/Subject Info': [], 'Scan Properties': [], 'Reconstruction Properties': [], "Display Properties": [], 'Additional Properties': [] } prop = Property("Image Properties", "Number of Channels", image.GetNumberOfScalarComponents(), int, True) properties[prop.category].append(prop) spacing = image.GetSpacing() origin = image.GetOrigin() (SizeX, SizeY, SizeZ) = image.GetDimensions() _range = image.GetScalarRange() _size = SizeX * SizeY * SizeZ * image.GetScalarSize( ) * image.GetNumberOfScalarComponents() prop = Property("Image Properties", "Minimum Value", float(_range[0]), float, True) properties[prop.category].append(prop) prop = Property("Image Properties", "Maximum Value", float(_range[1]), float, True) properties[prop.category].append(prop) prop = Property( "Image Properties", "Voxel Size (mm)", "%.4F %.4F %.4F" % (spacing[0], spacing[1], spacing[2]), str, True) properties[prop.category].append(prop) prop = Property("Image Properties", "Image Origin (mm)", "%.4F %.4F %.4F" % (origin[0], origin[1], origin[2]), str, True) properties[prop.category].append(prop) prop = Property("Image Properties", "Image Bit-depth", int(image.GetScalarSize() * 8), int, True) properties[prop.category].append(prop) prop = Property("Image Properties", "Image Data Type", image.GetScalarTypeAsString(), str, True) properties[prop.category].append(prop) prop = Property("Image Properties", "Dimensions", "%d %d %d" % (SizeX, SizeY, SizeZ), str, True) properties[prop.category].append(prop) prop = Property("Image Properties", "Memory Required", self.sizeof_fmt(_size), str, True) properties[prop.category].append(prop) prop = Property("Patient/Subject Info", "Title", str(val).encode('utf-8'), str, False) properties[prop.category].append(prop) val = dicom_header.SeriesDescription prop = Property("Patient/Subject Info", "Subject", str(val).encode('utf-8'), str, False) properties[prop.category].append(prop) if 'PatientPosition' in dicom_header: pos = dicom_header.PatientPosition else: pos = '' if pos in self.patient_positions: index = self.patient_positions.keys().index(pos) else: index = 0 prop = Property("Patient/Subject Info", "Patient Position", index, self.patient_positions.values(), False) properties[prop.category].append(prop) # Modality modality = dicom_header.Modality if modality in self.modtostring: index = self.modtostring.keys().index(modality) else: index = 0 prop = Property("Scan Properties", "Modality", index, self.modtostring.values(), False) properties[prop.category].append(prop) try: _d = image.GetDate() # DICOM-style date dmy = None try: year, month, day = int(_d[0:4]), int(_d[4:6]), int(_d[6:8]) except: logging.error("Unable to parse DICOM date: {0}".format(_d)) _t = image.GetTime() # DICOM_style time try: hour, minute, second, microsecond = int(_t[0:2]), int( _t[2:4]), int(_t[4:6]), _t[6:] dmy = (day, month - 1, year) except: logging.error("Unable to parse DICOM time: {0}".format(_t)) if dmy: prop = Property("Scan Properties", "Date", wx.DateTimeFromDMY(*dmy), wx.DateTime, False) properties[prop.category].append(prop) except: logging.exception("UpdateHeaderValues") # Scan-related fields (deprecated) scan_mapping = { 'spacingunit': (str, 'Measurement Unit'), } # handle old-style keywords (deprecated) for key in header: if key.startswith('scan_') or key.startswith('scanner_'): if key in scan_mapping: dtype, label = scan_mapping[key] else: dtype, label = (str, key) if dtype == float or isinstance(header[key], float): prop = Property("Scan Properties", label, float(header[key]), float, False) elif dtype == int or isinstance(header[key], int): prop = Property("Scan Properties", label, int(header[key]), int, False) else: prop = Property("Scan Properties", label, str(header[key]), str, False) properties[prop.category].append(prop) # scan-related DICOM fields dicom_scan_fields = { 'ExposureTime': (float, 'Exposure Time (ms)'), 'KVP': (float, 'X-Ray Voltage (kVp)'), 'XRayTubeCurrent': (float, 'X-Ray Tube Current (mA)'), 'XRayTubeCurrentInmA': (float, u'X-Ray Tube Current (mA)'), 'XRayTubeCurrentInuA': (float, u'X-Ray Tube Current (\u00b5A)'), 'DistanceSourceToPatient': (float, 'Object Position (mm)'), 'DistanceSourceToDetector': (float, 'Detector Position (mm)'), 'Manufacturer': (str, 'Scanner Manufacturer'), 'ManufacturerModelName': (str, 'Scanner Model'), 'ProtocolName': (str, 'Protocol Name'), } # handle DICOM keywords for key in dicom_scan_fields: if key in dicom_header: dtype, label = dicom_scan_fields[key] value = dicom_header.get(key) if dtype == float: try: value = float(value) prop = Property("Scan Properties", label, value, float, False) properties[prop.category].append(prop) continue except: dtype = str elif dtype == int: try: value = int(value) prop = Property("Scan Properties", label, value, int, False) properties[prop.category].append(prop) continue except: dtype = str prop = Property("Scan Properties", label, str(dicom_header.get(key)), str, False) properties[prop.category].append(prop) # Reconstruction-related fields recon_property_created = False recon_mapping = { 'recon_sw_version': (str, 'Software Version'), 'recon_git_sha1': (str, 'Software SHA1'), 'recon_date': (str, 'Reconstruction Date'), 'recon_center_of_rotation': (float, 'Center of Rotation'), 'recon_central_slice': (float, 'Central Slice'), 'recon_filter_type': (str, 'Filter Type'), 'recon_auth': (int, 'Reconstruction Authorized'), 'recon_cmdLine': (str, 'Commandline'), 'recon_gate_delay_us': (float, u'Gating delay (\u00b5s)'), 'recon_gate_window_us': (float, u'Gating window (\u00b5s)'), 'ct_recon_macaddr': (str, 'Ethernet Address'), 'ct_recon_every_nth_proj': (int, 'View Skip'), 'ct_cone_angle': (float, 'Cone Angle (deg)') } for key in header.keys(): if key.startswith('recon_') or key.startswith( 'ct_recon_') or key in ('y_bin', 'z_bin'): if key in recon_mapping: dtype, label = recon_mapping[key] else: dtype, label = (str, key) if dtype == float: prop = Property("Reconstruction Properties", label, float(header[key]), float, False) properties[prop.category].append(prop) else: prop = Property("Reconstruction Properties", label, str(header[key]), str, False) properties[prop.category].append(prop) del (header[key]) try: if modality == 'CT': prop = Property("Reconstruction Properties", "Air Value", float(header.get('air', 0.0)), float, False) properties[prop.category].append(prop) prop = Property("Reconstruction Properties", "Water Value", float(header.get('water', 0.0)), float, False) properties[prop.category].append(prop) prop = Property("Reconstruction Properties", "Bone Value (HU", int(header.get('boneHU', 0)), int, False) properties[prop.category].append(prop) except: pass self._general_page.Append(wxpg.PropertyCategory("Display Properties")) prop = Property("Display Properties", "Texture Interpolation", bool(self._config.bInterpolateTextures), bool, False) properties[prop.category].append(prop) numC = image.GetNumberOfScalarComponents() prop = Property("Display Properties", "Colour Table", pageState.lut_index, self.LD.get_names(), False, disabled=(numC > 1)) properties[prop.category].append(prop) # grab configuration object, see if there's any colour info in there try: root = MicroViewObjectShelve.MicroViewObjectShelve.getObject( ).getRoot() state = root['options.pane3D.background'] bg1 = state.GetTopColour() bg2 = state.GetBottomColour() use_gradient = state.GetGradientState() except: bg1 = bg2 = (0, 0, 0) use_gradient = True # for the moment, colour editing shall be disabled prop = Property("Display Properties", "Background Colour #1", bg1, tuple, False) properties[prop.category].append(prop) prop = Property("Display Properties", "Background Colour #2", bg2, tuple, False) properties[prop.category].append(prop) prop = Property("Display Properties", "Enable Background Gradient", use_gradient, bool, False) properties[prop.category].append(prop) # everything else for key in header: _k = key.lower() if not (_k.startswith('recon_') or _k.startswith('scan_') or _k.startswith('scanner_') or _k.startswith('hidden')): if key.lower() not in ('size', 'air', 'water', 'bonehu', 'y_bin', 'z_bin'): try: prop = Property("Additional Properties", key, str(header[key]), str, False) properties[prop.category].append(prop) except: logging.warning("duplicate tag: {0}".format(key)) _filter = None if self._search_filter: _filter = self._search_filter.lower() _filter = _filter.split() added_categories = [] for category in properties: for property in properties[category]: name = property.name value = property.value # apply filter should_display = False if _filter: for _f in _filter: if _f in unicode(name).lower() or _f in unicode( repr(value)).lower(): should_display = True break if not should_display: continue if category not in added_categories: added_categories.append(category) self._general_page.Append(wxpg.PropertyCategory(category)) if property.value_type is int: _id = wxpg.IntProperty(property.name, value=property.value) elif property.value_type is float: _id = wxpg.FloatProperty(property.name, value=property.value) elif property.value_type is str: _id = wxpg.StringProperty(property.name, value=property.value) elif isinstance(property.value_type, list): # enum _id = wxpg.EnumProperty(property.name, property.name, property.value_type, range(len(property.value_type)), property.value) elif property.value_type is wx.DateTime: # date _id = wxpg.DateProperty(property.name, value=property.value) _id.SetAttribute(wxpg.PG_DATE_PICKER_STYLE, wx.DP_DROPDOWN | wx.DP_SHOWCENTURY) elif property.value_type is bool: _id = wxpg.BoolProperty(property.name, value=property.value) elif property.value_type is tuple: _id = wxpg.ColourProperty(property.name, value=property.value) self._general_page.Append(_id) if property.read_only: _id.ChangeFlag(wxpg.PG_PROP_READONLY, True) if property.disabled: self._general_page.DisableProperty(_id)
def test_propgridadvprops10(self): p = pg.DateProperty()
def __init__(self, parent, log): # Use the WANTS_CHARS style so the panel doesn't eat the Return key. wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS) self.log = log tID = wx.NewId() topsizer = wx.BoxSizer(wx.VERTICAL) # Difference between using PropertyGridManager vs PropertyGrid is that # the manager supports multiple pages and a description box. self.pg = pg = wxpg.PropertyGridManager( self, style=wxpg.PG_SPLITTER_AUTO_CENTER | wxpg.PG_AUTO_SORT | wxpg.PG_TOOLBAR) # |wxpg.PG_DESCRIPTION #self.pg = pg = wxpg.PropertyGrid(self, # style=wxpg.PG_SPLITTER_AUTO_CENTER|wxpg.PG_AUTO_SORT) # Show help as tooltips pg.SetExtraStyle(wxpg.PG_EX_HELP_AS_TOOLTIPS | wxpg.PG_EX_MULTIPLE_SELECTION) pg.Bind(wxpg.EVT_PG_CHANGED, self.OnPropGridChange) pg.Bind(wxpg.EVT_PG_PAGE_CHANGED, self.OnPropGridPageChange) pg.Bind(wxpg.EVT_PG_SELECTED, self.OnPropGridSelect) pg.Bind(wxpg.EVT_PG_RIGHT_CLICK, self.OnPropGridRightClick) # Needed by custom image editor wx.InitAllImageHandlers() # # Let's use some simple custom editor # # NOTE: Editor must be registered *before* adding a property that # uses it. pg.RegisterEditor(TrivialPropertyEditor) pg.RegisterEditor(LargeImageEditor) # # Add properties # pg.AddPage("Page 1 - Testing All") pg.Append(wxpg.PropertyCategory("1 - Basic Properties")) pg.Append(wxpg.StringProperty("String", value="Some Text")) pg.Append(wxpg.IntProperty("Int", value=100)) pg.Append(wxpg.FloatProperty("Float", value=100.0)) pg.Append(wxpg.BoolProperty("Bool", value=True)) pg.Append(wxpg.BoolProperty("Bool_with_Checkbox", value=True)) pg.SetPropertyAttribute("Bool_with_Checkbox", "UseCheckbox", True) pg.Append(wxpg.PropertyCategory("2 - More Properties")) pg.Append( wxpg.LongStringProperty( "LongString", value= "This is a\\nmulti-line string\\nwith\\ttabs\\nmixed\\tin.")) pg.Append(wxpg.DirProperty("Dir", value="C:\\Windows")) pg.Append(wxpg.FileProperty("File", value="C:\\Windows\\system.ini")) pg.Append( wxpg.ArrayStringProperty("ArrayString", value=['A', 'B', 'C'])) pg.Append( wxpg.EnumProperty( "Enum", "Enum", ['wxPython Rules', 'wxPython Rocks', 'wxPython Is The Best'], [10, 11, 12], 0)) pg.Append( wxpg.EditEnumProperty("EditEnum", "EditEnumProperty", ['A', 'B', 'C'], [0, 1, 2], "Text Not in List")) pg.Append(wxpg.PropertyCategory("3 - Advanced Properties")) pg.Append(wxpg.DateProperty("Date", value=wx.DateTime_Now())) pg.Append(wxpg.FontProperty("Font", value=self.GetFont())) pg.Append( wxpg.ColourProperty("Colour", value=self.GetBackgroundColour())) pg.Append(wxpg.SystemColourProperty("SystemColour")) pg.Append(wxpg.ImageFileProperty("ImageFile")) pg.Append( wxpg.MultiChoiceProperty("MultiChoice", choices=['wxWidgets', 'QT', 'GTK+'])) pg.Append(wxpg.PropertyCategory("4 - Additional Properties")) pg.Append(wxpg.PointProperty("Point", value=self.GetPosition())) pg.Append(wxpg.SizeProperty("Size", value=self.GetSize())) pg.Append(wxpg.FontDataProperty("FontData")) pg.Append(wxpg.IntProperty("IntWithSpin", value=256)) pg.SetPropertyEditor("IntWithSpin", "SpinCtrl") pg.Append(wxpg.DirsProperty("Dirs", value=['C:/Lib', 'C:/Bin'])) pg.SetPropertyHelpString("String", "String Property help string!") pg.SetPropertyHelpString("Dirs", "Dirs Property help string!") pg.SetPropertyAttribute("File", wxpg.PG_FILE_SHOW_FULL_PATH, 0) pg.SetPropertyAttribute("File", wxpg.PG_FILE_INITIAL_PATH, "C:\\Program Files\\Internet Explorer") pg.SetPropertyAttribute("Date", wxpg.PG_DATE_PICKER_STYLE, wx.DP_DROPDOWN | wx.DP_SHOWCENTURY) pg.Append(wxpg.PropertyCategory("5 - Custom Properties")) pg.Append(IntProperty2("IntProperty2", value=1024)) pg.Append( RectProperty("RectProperty", value=wx.Rect(100, 200, 300, 400))) pg.Append(ShapeProperty("ShapeProperty", value=0)) pg.Append(PyObjectProperty("PyObjectProperty")) prop = pg.Append( wxpg.StringProperty("StringWithCustomEditor", value="test value")) pg.SetPropertyEditor(prop, "TrivialPropertyEditor") pg.Append(wxpg.ImageFileProperty("ImageFileWithLargeEditor")) pg.SetPropertyEditor("ImageFileWithLargeEditor", "LargeImageEditor") # When page is added, it will become the target page for AutoFill # calls (and for other property insertion methods as well) pg.AddPage("Page 2 - Results of AutoFill will appear here") pg.SetPropertyClientData("Point", 1234) if pg.GetPropertyClientData("Point") != 1234: raise ValueError("Set/GetPropertyClientData() failed") # Test setting unicode string pg.GetPropertyByName("String").SetValue(u"Some Unicode Text") # # Test some code that *should* fail (but not crash) try: a_ = pg.GetPropertyValue("NotARealProperty") pg.EnableProperty("NotAtAllRealProperty", False) pg.SetPropertyHelpString("AgaintNotARealProperty", "Dummy Help String") except: pass #raise topsizer.Add(pg, 1, wx.EXPAND) rowsizer = wx.BoxSizer(wx.HORIZONTAL) but = wx.Button(self, -1, "SetPropertyValues") but.Bind(wx.EVT_BUTTON, self.OnSetPropertyValues) rowsizer.Add(but, 1) but = wx.Button(self, -1, "GetPropertyValues") but.Bind(wx.EVT_BUTTON, self.OnGetPropertyValues) rowsizer.Add(but, 1) topsizer.Add(rowsizer, 0, wx.EXPAND) rowsizer = wx.BoxSizer(wx.HORIZONTAL) but = wx.Button(self, -1, "GetPropertyValues(as_strings=True)") but.Bind(wx.EVT_BUTTON, self.OnGetPropertyValues2) rowsizer.Add(but, 1) but = wx.Button(self, -1, "AutoFill") but.Bind(wx.EVT_BUTTON, self.OnAutoFill) rowsizer.Add(but, 1) topsizer.Add(rowsizer, 0, wx.EXPAND) rowsizer = wx.BoxSizer(wx.HORIZONTAL) but = wx.Button(self, -1, "Delete") but.Bind(wx.EVT_BUTTON, self.OnDeleteProperty) rowsizer.Add(but, 1) but = wx.Button(self, -1, "Run Tests") but.Bind(wx.EVT_BUTTON, self.RunTests) rowsizer.Add(but, 1) topsizer.Add(rowsizer, 0, wx.EXPAND) self.SetSizer(topsizer) topsizer.SetSizeHints(self)
def __init__(self, parent, title, tree, key): wx.Dialog.__init__(self, parent, -1, title, style=wx.DEFAULT_DIALOG_STYLE, size=wx.Size((300, 480))) # wx.Panel.__init__(self, parent, wx.ID_ANY) self.app = parent self.panel = panel = wx.Panel(self, wx.ID_ANY) topsizer = wx.BoxSizer(wx.VERTICAL) # Difference between using PropertyGridManager vs PropertyGrid is that # the manager supports multiple pages and a description box. self.pg = pg = wxpg.PropertyGridManager( panel, style=wxpg.PG_SPLITTER_AUTO_CENTER) # Show help as tooltips pg.SetExtraStyle(wxpg.PG_EX_HELP_AS_TOOLTIPS) pg.Bind(wxpg.EVT_PG_CHANGED, self.OnPropGridChange) pg.Bind(wxpg.EVT_PG_SELECTED, self.OnPropGridSelect) pg.AddPage('Page 1') self.key = key for page in tree: pg.Append(wxpg.PropertyCategory(page[0])) for item in page[1]: v = item[1] if v[0] == 'int': pg.Append(wxpg.IntProperty(v[1], value=int(v[2]) or 0)) if v[0] == 'float': pg.Append(wxpg.FloatProperty(v[1], value=float(v[2]) or 0)) if v[0] == 'str': pg.Append(wxpg.StringProperty(v[1], value=v[2] or '')) if v[0] == 'txt': pg.Append(wxpg.LongStringProperty(v[1], value=v[2] or '')) if v[0] == 'bool': pg.Append(wxpg.BoolProperty(v[1])) if v[0] == 'date': pg.Append(wxpg.DateProperty(v[1], value=wx.DateTime.Now())) if v[0] == 'list': pg.Append( wxpg.EnumProperty( v[1], v[1], [i.strip() for i in v[2][1:-1].split(',')])) if v[0] == 'img': pg.Append( wxpg.EnumProperty(v[1], v[1], self.app.img_names())) if v[0] == 'tab': pg.Append( wxpg.EnumProperty(v[1], v[1], self.app.table_names())) topsizer.Add(pg, 1, wx.EXPAND) self.txt_info = wx.TextCtrl(self, wx.ID_ANY, 'information', wx.DefaultPosition, wx.Size(80, 80), wx.TE_MULTILINE | wx.TRANSPARENT_WINDOW) topsizer.Add(self.txt_info, 0, wx.EXPAND | wx.ALL, 0) rowsizer = wx.BoxSizer(wx.HORIZONTAL) but = wx.Button(panel, wx.ID_OK, "OK") rowsizer.Add(but, 1) #but.Bind( wx.EVT_BUTTON, self.OnGetPropertyValues ) but = wx.Button(panel, wx.ID_CANCEL, "Cancel") rowsizer.Add(but, 1) topsizer.Add(rowsizer, 0, wx.EXPAND) panel.SetSizer(topsizer) topsizer.SetSizeHints(panel) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(panel, 1, wx.EXPAND) self.SetSizer(sizer) self.SetAutoLayout(True)
def create_datetime_property(prop_name): date_prop = wxpg.DateProperty(prop_name) # date_prop.SetAttribute(wxpg.PG_DATE_PICKER_STYLE, wx.DP_DEFAULT | DP_SHOWCENTURY) # date_prop.SetAttribute(wxpg.PG_DATE_FORMAT, wildcard) return date_prop