|
Packit |
1470ea |
|
|
Packit |
1470ea |
<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="treeview_simple_liststore.py" xml:lang="ko">
|
|
Packit |
1470ea |
<info>
|
|
Packit |
1470ea |
<title type="text">간단한 TreeView와 ListStore(Python)</title>
|
|
Packit |
1470ea |
<link type="guide" xref="beginner.py#treeview"/>
|
|
Packit |
1470ea |
<link type="seealso" xref="model-view-controller.py"/>
|
|
Packit |
1470ea |
<link type="next" xref="treeview_treestore.py"/>
|
|
Packit |
1470ea |
<revision version="0.2" date="2012-06-30" status="draft"/>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<credit type="author copyright">
|
|
Packit |
1470ea |
<name>Marta Maria Casetti</name>
|
|
Packit |
1470ea |
<email its:translate="no">mmcasetti@gmail.com</email>
|
|
Packit |
1470ea |
<years>2012</years>
|
|
Packit |
1470ea |
</credit>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<desc>ListStore를 표시하는 TreeView(더 간단한 예제)</desc>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
|
|
Packit |
1470ea |
<mal:name>조성호</mal:name>
|
|
Packit |
1470ea |
<mal:email>shcho@gnome.org</mal:email>
|
|
Packit |
1470ea |
<mal:years>2017</mal:years>
|
|
Packit |
1470ea |
</mal:credit>
|
|
Packit |
1470ea |
</info>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<title>간단한 TreeView와 ListStore</title>
|
|
Packit |
1470ea |
<media type="image" mime="image/png" src="media/treeview_simple_liststore.png"/>
|
|
Packit |
1470ea |
이 TreeView에서는 선택 "changed" 시그널을 연결한 간단한 ListStore를 보여줍니다.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<links type="section"/>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="code">
|
|
Packit |
1470ea |
<title>예제 결과를 만드는 코드</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
from gi.repository import Gtk
|
|
Packit |
1470ea |
from gi.repository import Pango
|
|
Packit |
1470ea |
import sys
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
columns = ["First Name",
|
|
Packit |
1470ea |
"Last Name",
|
|
Packit |
1470ea |
"Phone Number"]
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
phonebook = [["Jurg", "Billeter", "555-0123"],
|
|
Packit |
1470ea |
["Johannes", "Schmid", "555-1234"],
|
|
Packit |
1470ea |
["Julita", "Inca", "555-2345"],
|
|
Packit |
1470ea |
["Javier", "Jardon", "555-3456"],
|
|
Packit |
1470ea |
["Jason", "Clinton", "555-4567"],
|
|
Packit |
1470ea |
["Random J.", "Hacker", "555-5678"]]
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
class MyWindow(Gtk.ApplicationWindow):
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
def __init__(self, app):
|
|
Packit |
1470ea |
Gtk.Window.__init__(self, title="My Phone Book", application=app)
|
|
Packit |
1470ea |
self.set_default_size(250, 100)
|
|
Packit |
1470ea |
self.set_border_width(10)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# the data in the model (three strings for each row, one for each
|
|
Packit |
1470ea |
# column)
|
|
Packit |
1470ea |
listmodel = Gtk.ListStore(str, str, str)
|
|
Packit |
1470ea |
# append the values in the model
|
|
Packit |
1470ea |
for i in range(len(phonebook)):
|
|
Packit |
1470ea |
listmodel.append(phonebook[i])
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# a treeview to see the data stored in the model
|
|
Packit |
1470ea |
view = Gtk.TreeView(model=listmodel)
|
|
Packit |
1470ea |
# for each column
|
|
Packit |
1470ea |
for i, column in enumerate(columns):
|
|
Packit |
1470ea |
# cellrenderer to render the text
|
|
Packit |
1470ea |
cell = Gtk.CellRendererText()
|
|
Packit |
1470ea |
# the text in the first column should be in boldface
|
|
Packit |
1470ea |
if i == 0:
|
|
Packit |
1470ea |
cell.props.weight_set = True
|
|
Packit |
1470ea |
cell.props.weight = Pango.Weight.BOLD
|
|
Packit |
1470ea |
# the column is created
|
|
Packit |
1470ea |
col = Gtk.TreeViewColumn(column, cell, text=i)
|
|
Packit |
1470ea |
# and it is appended to the treeview
|
|
Packit |
1470ea |
view.append_column(col)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# when a row is selected, it emits a signal
|
|
Packit |
1470ea |
view.get_selection().connect("changed", self.on_changed)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# the label we use to show the selection
|
|
Packit |
1470ea |
self.label = Gtk.Label()
|
|
Packit |
1470ea |
self.label.set_text("")
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# a grid to attach the widgets
|
|
Packit |
1470ea |
grid = Gtk.Grid()
|
|
Packit |
1470ea |
grid.attach(view, 0, 0, 1, 1)
|
|
Packit |
1470ea |
grid.attach(self.label, 0, 1, 1, 1)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# attach the grid to the window
|
|
Packit |
1470ea |
self.add(grid)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
def on_changed(self, selection):
|
|
Packit |
1470ea |
# get the model and the iterator that points at the data in the model
|
|
Packit |
1470ea |
(model, iter) = selection.get_selected()
|
|
Packit |
1470ea |
# set the label to a new value depending on the selection
|
|
Packit |
1470ea |
self.label.set_text("\n %s %s %s" %
|
|
Packit |
1470ea |
(model[iter][0], model[iter][1], model[iter][2]))
|
|
Packit |
1470ea |
return True
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
class MyApplication(Gtk.Application):
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
def __init__(self):
|
|
Packit |
1470ea |
Gtk.Application.__init__(self)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
def do_activate(self):
|
|
Packit |
1470ea |
win = MyWindow(self)
|
|
Packit |
1470ea |
win.show_all()
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
def do_startup(self):
|
|
Packit |
1470ea |
Gtk.Application.do_startup(self)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
app = MyApplication()
|
|
Packit |
1470ea |
exit_status = app.run(sys.argv)
|
|
Packit |
1470ea |
sys.exit(exit_status)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="methods">
|
|
Packit |
1470ea |
<title>TreeView 위젯에 쓸만한 메서드</title>
|
|
Packit |
1470ea |
TreeView 위젯은 Model/View/Controller 방식으로 설계했습니다. Model은 데이터를, View는 바뀐 내용 알림을 받은 후의 모델의 내용을, 마지막으로 Controller는 모델의 상태를 바꾸고 뷰에게 바뀐 모델의 상태를 알리는 코드를 담습니다. 자세한 내용과 TreeModel에 대한 쓸만한 메서드 목록을 보시려면 <link xref="model-view-controller.py"/>를 참고하십시오.
|
|
Packit |
1470ea |
44번째 줄에서 "changed" 시그널은 widget.connect(signal, callback function) 함수로 on_changed() 콜백 함수에 연결했습니다. 더 자세한 설명은 <link xref="signals-callbacks.py"/>를 참조하십시오.
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="references">
|
|
Packit |
1470ea |
<title>API 참고서</title>
|
|
Packit |
1470ea |
이 예제는 다음 참고자료가 필요합니다:
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gtk3/unstable/GtkTreeView.html">GtkTreeView</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gtk3/unstable/GtkTreeModel.html">GtkTreeModel</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gtk3/unstable/GtkListStore.html">GtkListStore</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gtk3/unstable/GtkCellRendererText.html">GtkCellRendererText</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gtk3/unstable/GtkTreeViewColumn.html">GtkTreeViewColumn</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://git.gnome.org/browse/pygobject/tree/gi/overrides/Gtk.py">pygobject - GObject 인트로스펙션 파이썬 바인딩</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/pango/stable/pango-Fonts.html">Fonts</link> </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
</page>
|