J'essaye de faire un gui avec Glade 3 (gtk) et ruby mais ne peux pas comprendre comment peupler réellement une zone de liste déroulante dynamiquement avec par exemple une liste de chaînes. J'obtiens le fichier xml .glade après avoir fait visuellement mon interface graphique dans Glade, et j'utilise ruby-glade-create-template pour générer mon fichier .rb mais je n'ai aucune idée d'où aller à partir d'ici. Je ne trouve aucun guide sur la façon d'utiliser ruby avec Glade 3 et toute aide serait appréciée. Merci!Comment utiliser/remplir une zone de liste déroulante avec Ruby/Glade 3
Répondre
def initialize_combobox_script_select()
#get combobox widget from glade file
@combobox_script_select = @glade.get_widget("combobox_script_select")
@combobox_script_select.set_active(0) #this makes <select a script> the default element in the combobox
@script_list = ["helloworld", "byeworld"]
@script_list.each{|script| @combobox_script_select.append_text("#{script}")} #populate the combobox with the list of scripts
end
Ceci est un exemple de code pour initialiser un combobox, que je l'ai utilisé pour remplir avec des noms de script .
Pourquoi avez-vous besoin de générer un fichier .rb? La génération de code est Frowned Upon ™. Alors chargez-vous le fichier glade avec une instance Gtk::Builder? Une fois que vous avez l'objet Builder, vous appelez la méthode get_object pour obtenir des widgets spécifiques.
Voici un très bon tutoriel sur glade 3, il ne couvre pas ruby mais python est assez proche. Il est un peu vieillot donc quelques bugs mentionnés il ont été corrigés si vous utilisez une version récente de Glade 3.
Si vous avez utilisé visualruby, vous pouvez créer un combobox comme ceci:
combo = VR::SimpleComboBoxEntry("Selected", "Option1", "option2", "Option3")
@builder["vbox1"].add(combo)
Pour une raison quelconque, Glade ne fonctionne pas pour comboboxes simples. Lorsque vous sélectionnez le type de texte simple, il ne sauvegarde pas correctement dans le fichier xml. Donc, ce que vous devez faire est de placer une VBox ou HBox avec 1 cellule dans votre formulaire Glade où vous voulez que la boîte combo disparaisse, et ajoutez la boîte ci-dessus à la VBox. Dans l'exemple ci-dessus, @builder est une instance de Gtk :: Builder.
Il y a d'autres exemples à: