0
votes

wxpython - Comment définir un éditeur pour une colonne d'une grille

the docs pour wx.grid.gridcelleditor dire

instances de wx.grid.gridcelleditor ... peut être associé aux attributs de cellule pour des cellules individuelles, des lignes, des colonnes ou même pour toute la grille.

Maintenant, je sais comment associer un éditeur avec une cellule: xxx

et je sais comment associer un éditeur avec une grille entière: xxx

mais je ne sais pas comment définir un éditeur pour une seule colonne. Cette solution évidente n'est pas une bonne solution: xxx

car si j'ajoute des lignes à la grille (qui est une opération courante), les nouvelles lignes n'ont pas l'éditeur jusqu'à ce que Je le réglais spécifiquement.

L'autre solution de contournement évidente consiste à associer une classe d'éditeur générique avec toute la grille et instanciez un éditeur spécifique à une colonne à l'exécution basée sur le numéro de colonne.

La documentation implique clairement que je ne devrais pas avoir à recourir à la solution de contournement. Mais cela n'offre pas non plus (au moins n'importe où que je puisse trouver) une autre façon de le faire.

Donc, la question est, comment puis-je définir un éditeur pour une colonne de grille entière?


0 commentaires

3 Réponses :


0
votes

La solution la plus évidente pour cela, un nom de méthode comme "SetDefaultDitoritorColumn", ne semble pas exister.

Mais je pense que l'idée de la grille est de spécifier un éditeur pour un type de données plutôt que pour une seule colonne. De cette façon, vous pouvez avoir plus d'une colonne avec le même type de données dans votre grille et utiliser le même éditeur.

C'est là que grid.registerdaTaType (auto, typename, rendu, éditeur) fait son entrée.

Si vous ne voulez que modifier uniquement l'un des deux, rendez-vous ou éditeur, vous pouvez également appeler grid.getdefaulrendererPortype () et grid.getdefauletoritoryype () .


2 commentaires

Est-ce que cela ne fait que déplacer le problème? Je devrais enregistrer des types de données personnalisés, car les colonnes contiennent des chaînes dessinées à partir de différents ensembles. Et il n'ya également aucun moyen évident de définir le type de données d'une colonne, uniquement pour les cellules. Donc, lorsque j'ajoute une ligne, je devrais définir le type de données de chaque cellule ajoutée, qui n'est pas moins de travail que de définir directement l'éditeur.


Jetez un coup d'œil à la méthode de la grille'setColformatCustom', cela peut être ce que vous recherchez.



0
votes

N'est-ce pas cette fonction effectuée par ce qui suit? :

  • SetColformatbool (COL)
  • SetColformatfloat (COL)
  • SetColformatNumber (COL)
  • SetColformatCustom (Col, Nom)

    Ces fonctions définissent à la fois l'éditeur et le rendu de la colonne en question.


0 commentaires

0
votes

L'approche dans les deux autres réponses consiste à créer un type de données, associez un éditeur avec le type de données, puis associer le type de données avec une colonne. Découplage de l'éditeur du numéro de colonne est une bonne idée si vous avez plusieurs colonnes avec le même type de données, et ces solutions sont donc probablement la meilleure approche générique.

Mais je voulais une approche plus simple qui associe un éditeur avec une colonne spécifique car, dans mon application, chaque colonne est un type de données différent. Partager le type de données entre colonnes n'a aucun sens. Donc, cette réponse est une ajustement plus proche de la question initiale.

Tout est tout tourne autour de la classe confusement nommée wx.grid.gridcellattr . Vous pouvez être pardonné pour supposer que l'élément de nom attr signifie essentiellement l'alignement et la couleur, car c'est ce que cela signifie, par exemple, wx.textattr . Et le constructeur le plus clairement documenté de cette classe est gridcellattr (coltext, colback, police, halign, Valign) qui suggère à nouveau que attr concerne l'alignement et la couleur.

mais la classe wx.grid.gridcellattr est en fait une classe de descripteur de propriétés de cellule très générique avec plus de 30 méthodes de réglage et d'alignement et de couleur, comme prévu, mais aussi (entre autres) Taille, mode lecture / écriture, rendu et éditeur .

afin de définir un éditeur pour la colonne d'une grille est xxx

Mais si vous souhaitez définir le même éditeur pour deux colonnes, n'appelez pas setingcolattr () avec la même instance de gridcellattr , car vous allez faire référence à la référence Comptez les erreurs lors de l'arrêt du programme si vous le faites. Au lieu de cela, faites xxx


0 commentaires