9
votes

Existe-t-il un moyen de décocher tous les boutons radio d'un groupe? (Pygtk)

Y a-t-il un moyen de décocher tous les boutons radio d'un groupe avec pygtk? Aucun bouton radio n'est vérifié sur le démarrage, alors je pense qu'il doit y avoir un moyen de les renvoyer à cet état non coché.


1 commentaires

Pas coché au démarrage? Je n'ai jamais vu ça.


4 Réponses :


1
votes

a regardé dans le code source et Set_Active simule simplement un clic sur le bouton si le nouvel état est différent de l'ancien. Le code de bouton radio vérifie ensuite s'il y a un autre bouton radio dans le groupe actif et sinon, il refuse de changer au fur et à mesure que vous avez remarqué.

De ce qu'il semble que le premier bouton radio doit toujours être défini sur Actif lorsque vous créez le groupe (comme prévu). Si cela ne montre pas, il est probablement un bug, il serait intéressé de voir si radio_button.get_active est true pour le premier bouton que vous créez (même s'il ne le fait pas t apparaître dans l'interface utilisateur).

Je suis d'accord avec Michael Kohne, cependant que vous devriez examiner un autre élément UI si vous souhaitez effectuer tous les boutons radio non sélectionnés.


3 commentaires

J'ai essayé de faire cela, mais cela réactive automatiquement l'un des boutons radio du groupe.


Mise à jour de la réponse après avoir examiné la mise en œuvre.


Merci pour la confirmation du code! Un peu étrange qu'ils nous donneraient une fonction à set_active (false) (dans gtkmm langage) mais n'honorez pas réellement pas dans tous les cas, mais oh bien.



3
votes

Il ne devrait pas y avoir. De par leur nature, un groupe de boutons radio est un type de contrôle «Choisissez l'un de nombreux». D'une perspective humaine, l'idée est que l'une d'entre elles est toujours sélectionnée. Le cadre devrait vraiment appliquer cela, alors il ne devrait donc pas vraiment être un État "Aucun sélectionné" pour le groupe. L'état non sélectionné d'un groupe de boutons radio (dans les cadres où il est possible) est très déroutant pour les utilisateurs, car ce n'est pas un état qu'ils peuvent obtenir le contrôle.

Si vous voulez un état "Aucun sélectionné", je dirais que vous devriez ajouter un élément "Aucun" au groupe ou choisir un type de contrôle différent conforme à ce que vous voulez faire avec cela.


12 commentaires

Merci. J'ai ajouté un bouton radio "Aucun". :)


Totalement en désaccord. Imaginez une situation où le groupe de radio est insensibilisé par interaction avec un autre widget. Aucun des éléments ne doit apparaître sélectionné. GTK lui-même ne vous obligera pas à vous comporter de règles imaginaires.


@Ali A: Vous ne devriez toujours pas être capable de forcer une sélection de sélection. Le groupe devrait devenir visuellement différent (grisé sur la plupart des systèmes) comme une indication qu'elle ne peut être interagiante. Dans une bonne interface utilisateur, la sélection précédente doit toujours être présente, car si vous retournez le réglage de l'autre contrôle, les boutons radio doivent revenir à ce qu'ils étaient avant de toucher l'autre contrôle.


Si vous avez un questionnaire avec des boutons radio et que vous ne voulez aucun parti pris, vous avez besoin d'un moyen de ne pas avoir de bouton sélectionné.


@Sebastianwerk - Pourquoi? Je ne vois pas où une sélection "Aucune de ces réponses" ne fonctionnerait pas très bien.


Par exemple, si vous voulez vérifier, si les gens comprenaient une tâche, ils devaient être effectués, cela pourrait être une réponse régulière. Si cela est présélectionné, vous pourriez influencer la distribution des réponses. En outre, une telle option n'est pas toujours souhaitée; Dans certaines expériences psychologiques, vous voulez que les gens sélectionnent une réponse régulière, même s'ils ont tendance à ne rien sélectionner (exemple: préféreriez-vous préférer "Obama et une majorité républicaine au Sénat" ou "Romney et une majorité démocratique au Sénat")


Alors, y a-t-il une solution à cela?


@Rakshithhravi - Eh bien, si vous avez lu ma réponse et que vous avez décidé de casser la convention de l'interface utilisateur et de confondre vos utilisateurs, continuez à lire d'autres réponses, qui montrent comment accomplir cela.


FYI: J'ai écrit un Question de suivi de GTK # -Based référencer cette réponse. Comme GTK # expose assez directement l'interface de GTK, peut-être vous avez une idée là-bas, au cas où vous auriez le temps de le regarder.


Le commentaire de Sebastian @Michaelkohne est un excellent exemple de là où cela pourrait être utile. La chose est que je fais un cadre qui utilise GTK. Donc, pour cela, j'ai besoin de contrôle total sur les widgets. Donc, j'ai besoin de pouvoir contrôler si le bouton radio est sélectionné ou non


Un cas d'utilisation valide pour ne pas avoir de boutons initialement sélectionnés constituerait un jeu tel que Yahtzee où vous ne pouvez sélectionner qu'un emplacement de notation chaque tour, mais aucun ne doit être sélectionné au début de votre tour.


Je assimile que tous les radiobuttons n'étaient pas cochés de la même manière qu'une valeur «null» pour une case à cocher Tri-State. Sans l'option «NONE» supplémentaire, il peut être dangereux de par défaut à n'importe quel bouton sans que l'utilisateur le vérifie.



8
votes

Je suis d'accord avec Michael, mais pour l'enregistrement, cela peut être fait.

Une façon de le faire serait d'avoir un bouton radio caché que vous pourriez activer, ce qui ferait alors que tous les visibles soient inactifs. Exemple sale: P>

import gtk

window = gtk.Window()
window.set_default_size(200, 200)

rb1 = gtk.RadioButton()
rb2 = gtk.RadioButton()
rb3 = gtk.RadioButton()

rb2.set_group(rb1)
rb3.set_group(rb2)

rb3.set_active(True)

hbox = gtk.HBox()

hbox.add(rb1)
hbox.add(rb2)
hbox.add(rb3)

button = gtk.Button("Click me")
button.connect("clicked", lambda x: rb3.set_active(True))

hbox.add(button)

window.add(hbox)
window.show_all()

rb3.hide()

gtk.main()


2 commentaires

Au moins chez mon ordinateur, il fonctionne également, si le néant est le premier dans un groupe et tout simplement pas ajouté à aucune case du tout.


Travaillé pour moi, malgré tous les Naysayers. Dans mon interface graphique, j'ai besoin de cela dans les cas où les radiobuttons sont désensibilisés et les anciennes valeurs non pertinentes (c'est une étape de confirmation non limitée avant de charger de nouvelles données).



1
votes

Ma solution, notamment non encouragée, est d'avoir un bouton radio dans le même groupe qui n'est pas affiché à l'écran.

in Glade, vous pouvez "Ajouter un widget en tant que toplevel" dans le menu contextuel du widget Ajouter un bouton. Dans le code, je voudrais imager une imagerie, il suffit d'ajouter le widget à une interface graphique affichée ou de ne pas soi-même.


1 commentaires

Yup, je viens d'ajouter un Radiobutton factice à ma classe contenant et ne l'affiche tout simplement pas n'importe où. Sur la désensibilisation, il est choisi, de sorte que tous les boutons réels (visibles) soient désélectionnés.