1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
<?xml version="1.0" encoding="utf-8"?>
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" xmlns:xi="http://www.w3.org/2001/XInclude" type="guide" style="task" id="combobox_multicolumn.py" xml:lang="sv">
<info>
<title type="text">ComboBox (Python)</title>
<link type="guide" xref="beginner.py#menu-combo-toolbar"/>
<link type="next" xref="treeview_advanced_liststore.py"/>
<revision version="0.1" date="2012-06-03" status="draft"/>
<credit type="author copyright">
<name>Marta Maria Casetti</name>
<email its:translate="no">mmcasetti@gmail.com</email>
<years>2012</years>
</credit>
<desc>En komponent som används för att välja från en lista objekt</desc>
<mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
<mal:name>Sebastian Rasmussen</mal:name>
<mal:email>sebras@gmail.com</mal:email>
<mal:years>2019</mal:years>
</mal:credit>
<mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
<mal:name>Anders Jonsson</mal:name>
<mal:email>anders.jonsson@norsjovallen.se</mal:email>
<mal:years>2021</mal:years>
</mal:credit>
</info>
<title>ComboBox (två kolumner)</title>
<media type="image" mime="image/png" src="media/combobox_multicolumn.png"/>
<p>Denna ComboBox skriver ditt val till terminalen då du ändrar det.</p>
<links type="section"/>
<section id="code">
<title>Kod som använts för att generera detta exempel</title>
<code mime="text/x-python" style="numbered">from gi.repository import Gtk
import sys
actions = [["Select", None],
["New", Gtk.STOCK_NEW],
["Open", Gtk.STOCK_OPEN],
["Save", Gtk.STOCK_SAVE]]
class MyWindow(Gtk.ApplicationWindow):
def __init__(self, app):
Gtk.Window.__init__(self, title="Welcome to GNOME", application=app)
self.set_default_size(200, -1)
self.set_border_width(10)
# the data in the model, of type string on two columns
listmodel = Gtk.ListStore(str, str)
# append the data
for i in range(len(actions)):
listmodel.append(actions[i])
# a combobox to see the data stored in the model
combobox = Gtk.ComboBox(model=listmodel)
# cellrenderers to render the data
renderer_pixbuf = Gtk.CellRendererPixbuf()
renderer_text = Gtk.CellRendererText()
# we pack the cell into the beginning of the combobox, allocating
# no more space than needed;
# first the image, then the text;
# note that it does not matter in which order they are in the model,
# the visualization is decided by the order of the cellrenderers
combobox.pack_start(renderer_pixbuf, False)
combobox.pack_start(renderer_text, False)
# associate a property of the cellrenderer to a column in the model
# used by the combobox
combobox.add_attribute(renderer_text, "text", 0)
combobox.add_attribute(renderer_pixbuf, "stock_id", 1)
# the first row is the active one at the beginning
combobox.set_active(0)
# connect the signal emitted when a row is selected to the callback
# function
combobox.connect("changed", self.on_changed)
# add the combobox to the window
self.add(combobox)
def on_changed(self, combo):
# if the row selected is not the first one, write on the terminal
# the value of the first column in the model
if combo.get_active() != 0:
print("You chose " + str(actions[combo.get_active()][0]) + "\n")
return True
class MyApplication(Gtk.Application):
def __init__(self):
Gtk.Application.__init__(self)
def do_activate(self):
win = MyWindow(self)
win.show_all()
def do_startup(self):
Gtk.Application.do_startup(self)
app = MyApplication()
exit_status = app.run(sys.argv)
sys.exit(exit_status)
</code>
</section>
<section id="methods">
<title>Användbara metoder för en ComboBox-komponent</title>
<p>The ComboBox widget is designed around a <em>Model/View/Controller</em> design: the <em>Model</em> stores the data; the <em>View</em> gets change notifications and displays the content of the model; the <em>Controller</em>, finally, changes the state of the model and notifies the view of these changes. For more information and for a list of useful methods for ComboBox see <link xref="model-view-controller.py"/>.</p>
<p>På rad 45 ansluts signalen <code>"changed"</code> till återanropsfunktionen <code>on_changed()</code> med <code><var>komponent</var>.connect(<var>signal</var>, <var>återanropsfunktion</var>)</code>. Se <link xref="signals-callbacks.py"/> för en utförligare förklaring.</p>
</section>
<section id="references">
<title>API-referenser</title>
<p>I detta exempel använde vi följande:</p>
<list>
<item><p><link href="http://developer.gnome.org/gtk3/unstable/GtkComboBox.html">GtkComboBox</link></p></item>
<item><p><link href="http://developer.gnome.org/gtk3/unstable/GtkListStore.html">GtkListStore</link></p></item>
<item><p><link href="http://developer.gnome.org/gtk3/unstable/GtkCellRendererText.html">GtkCellRendererText</link></p></item>
<item><p><link href="http://developer.gnome.org/gtk3/unstable/GtkCellRendererPixbuf.html">GtkCellRendererPixbuf</link></p></item>
<item><p><link href="http://developer.gnome.org/gtk3/unstable/gtk3-Stock-Items.html">Standardobjekt</link></p></item>
<item><p><link href="https://gitlab.gnome.org/GNOME/pygobject/blob/master/gi/overrides/Gtk.py">pygobject - Python-bindningar för GObject Introspection</link></p></item>
</list>
</section>
</page>
|