|
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="textview.py" xml:lang="ko">
|
|
Packit |
1470ea |
<info>
|
|
Packit |
1470ea |
<title type="text">TextView (Python)</title>
|
|
Packit |
1470ea |
<link type="guide" xref="beginner.py#multiline"/>
|
|
Packit |
1470ea |
<link type="seealso" xref="strings.py"/>
|
|
Packit |
1470ea |
<link type="seealso" xref="scrolledwindow.py"/>
|
|
Packit |
1470ea |
<link type="next" xref="dialog.py"/>
|
|
Packit |
1470ea |
<revision version="0.2" date="2012-06-19" status="draft"/>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<credit type="author copyright">
|
|
Packit |
1470ea |
<name>Sebastian Pölsterl</name>
|
|
Packit |
1470ea |
<email its:translate="no">sebp@k-d-w.org</email>
|
|
Packit |
1470ea |
<years>2011</years>
|
|
Packit |
1470ea |
</credit>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<credit type="author copyright editor">
|
|
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>GtkTextBuffer를 나타내는 위젯</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>TextView</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<note style="sidebar">Gtk.TextView 예제입니다.
|
|
Packit |
1470ea |
"enter" 키를 누르면 줄이 바뀝니다.
|
|
Packit |
1470ea |
그러나 긴 문장을 쓸 경우 줄을 바꿀 수 있습니다(문장을 단어 단위로 나누어 줄을 바꿉니다).
|
|
Packit |
1470ea |
기이이이이이이이이이이이이이이이이이이인
|
|
Packit |
1470ea |
(길었다면)
|
|
Packit |
1470ea |
단어가 있다면, 수평 스크롤 표시줄이 나타납니다. </note>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<media type="image" mime="image/png" src="media/textview.png"/>
|
|
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 |
import sys
|
|
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="TextView Example", application=app)
|
|
Packit |
1470ea |
self.set_default_size(300, 450)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# a scrollbar for the child widget (that is going to be the textview)
|
|
Packit |
1470ea |
scrolled_window = Gtk.ScrolledWindow()
|
|
Packit |
1470ea |
scrolled_window.set_border_width(5)
|
|
Packit |
1470ea |
# we scroll only if needed
|
|
Packit |
1470ea |
scrolled_window.set_policy(
|
|
Packit |
1470ea |
Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# a text buffer (stores text)
|
|
Packit |
1470ea |
buffer1 = Gtk.TextBuffer()
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# a textview (displays the buffer)
|
|
Packit |
1470ea |
textview = Gtk.TextView(buffer=buffer1)
|
|
Packit |
1470ea |
# wrap the text, if needed, breaking lines in between words
|
|
Packit |
1470ea |
textview.set_wrap_mode(Gtk.WrapMode.WORD)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
# textview is scrolled
|
|
Packit |
1470ea |
scrolled_window.add(textview)
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
self.add(scrolled_window)
|
|
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>TextView 위젯에 쓸만한 메서드</title>
|
|
Packit |
1470ea |
Gtk.TextView 는 Gtk.TextBuffer 에 저장한 텍스트를 나타냅니다. 그러나, 대부분 텍스트 처리는 텍스트 버퍼의 두 문자간 위치 Gtk.TextIter 로 표현하는 반복자로 끝냅니다. 반복자는 항상 유효한 존재는 아닙니다. 버퍼의 내용에 영향을 주어 버퍼의 내용이 바뀌면 이 부분을 알고 있든 반복자는 무효화 처리됩니다. 이 때문에, 반복자는 버퍼를 수정할 때 위치 정보를 보관할 목적으로 사용할 수 없습니다. 위치 정보를 어딘가에 보관할 때 visible(True) 함수로 눈에 띄게 나타낼 수 있는 Gtk.TextMark 를 사용합니다. 텍스트 버퍼에는 자체적으로 내장한 "insert" 마크(커서 위치)와 "selection_bound"마크가 있습니다.
|
|
Packit |
1470ea |
TextView 위젯의 메서드는 다음과 같습니다:
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item>TextView 위젯은 기본적으로 편집할 수 있습니다. 편집할 수 없게 하려면 set_editable(False) 함수를 사용하십시오 버퍼에 편집할 수 있는 텍스트가 없다면, 마찬가지로 set_cursor_visible(False) 함수를 사용하시는것이 좋습니다. </item>
|
|
Packit |
1470ea |
<item>텍스트 정렬은 set_justification(Gtk.Justification.JUSTIFICATION) 함수로 설정합니다. 여기서 JUSTIFICATION 은 LEFT, RIGHT, CENTER, FILL 값 중 하나가 들어갑니다. </item>
|
|
Packit |
1470ea |
<item>텍스트 줄 바꿈은 set_wrap_mode(Gtk.WrapMode.WRAP) 함수로 설정합니다. 여기서 WRAP 값은 NONE (텍스트 영역이 더 넓어짐), CHAR (커서가 나타날 수 있는 어디든 줄 바꿈), WORD (단어 사이 줄 바꿈), WORD_CHAR (단어 사이에 줄을 바꾸지만 문자를 더 넣을 여력이 안되면 문자 사이를 줄바꿈) 값 중 하나입니다. </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
TextBuffer 위젯의 메서드:
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item>get_insert() 함수에서는 삽입 지점 커서를 나타내는 Gtk.TextMark 를 반환합니다. </item>
|
|
Packit |
1470ea |
<item>get_selection_bound() 함수는 선택 범위를 나타내는 Gtk.TextMark 를 반환합니다. </item>
|
|
Packit |
1470ea |
<item>length 에 양의 정수 또는 -1 을 넣을 수 있는 set_text("some text", length) 함수는 "some text" 텍스트를 처음 length 글자 만큼 버퍼에 내용을 넣습니다. length 값을 생략하거나 -1 로 두면, 텍스트를 전부 넣습니다. 어떤 값이 들어가면 버퍼의 내용을 해체합니다. </item>
|
|
Packit |
1470ea |
<item>iter 에 텍스트 반복자가 들어가고 length 에 양의 정수 또는 -1 을 넣을 수 있는 insert(iter, "some text", length) 함수에는 "some text" 텍스트 중 처음 length 글자를 버퍼의 iter 위치에 삽입합니다. length 값을 생략하거나 -1 로 두면, 텍스트를 전부 넣습니다. </item>
|
|
Packit |
1470ea |
<item>insert_at_cursor("some text", length) 함수는 insert(iter, "some text", length) 함수와 동일한 동작을 취하지만 현재 커서 위치를 iter 로 취합니다. </item>
|
|
Packit |
1470ea |
<item>iter 는 Gtk.TextIter 이고, left_gravity 값은 부울린 값인 create_mark("mark_name", iter, left_gravity) 함수는 Gtk.TextMark 를 iter 위치에 만듭니다. "mark_name" 을 None 으로 설정하면, 익명으로 표시합니다. 그렇지 않으면 get_mark() 함수를 활용할 때 지정 이름으로 표시 항목을 가져올 수 있습니다. 마크가 왼쪽 정렬 상태고 마크 현재 위치에 텍스트를 넣으면, 마크는 새로 넣은 텍스트의 왼편으로 갑니다. left_gravity 매개변수 값을 생략하면 기본값은 False 로 들어갑니다. </item>
|
|
Packit |
1470ea |
<item>버퍼에 임의의 텍스트를 특정 형식으로 지정하려면, 형식 정보를 유지하는 태그를 지정해야하며, 다음과 같이 create_tag("tag name", property) 함수와 apply_tag(tag, start_iter, end_iter) 함수로 태그를 텍스트 영역에 적용해야합니다:
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
tag = textbuffer.create_tag("orange_bg", background="orange")
|
|
Packit |
1470ea |
textbuffer.apply_tag(tag, start_iter, end_iter)
|
|
Packit |
1470ea |
다음은 텍스트에 적용하는 일반 모양새 일부입니다:
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item>배경 색상("background" 속성) </item>
|
|
Packit |
1470ea |
<item>전경 색상("foreground" 속성) </item>
|
|
Packit |
1470ea |
<item>밑줄("underline" 속성) </item>
|
|
Packit |
1470ea |
<item>굵게("weight" 속성) </item>
|
|
Packit |
1470ea |
<item>기울임("style" 속성) </item>
|
|
Packit |
1470ea |
<item>취소선("strikethrough" 속성) </item>
|
|
Packit |
1470ea |
<item>양쪽배분("justification" 속성) </item>
|
|
Packit |
1470ea |
<item>크기("size"와 "size-points" 속성) </item>
|
|
Packit |
1470ea |
<item>텍스트 줄바꿈("wrap-mode" 속성) </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
remove_tag() 함수로 태그 일부를 삭제하거나 remove_all_tags() 함수를 호출하여 주어진 영역의 모든 태그를 삭제할 수 있습니다. </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
TextIter 위젯 메서드
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item>forward_search(needle, flags, limit) 는 needle 을 앞방향으로 검색합니다. Gtk.TextIter 에서 지정한 한계값에 도달하면 검색을 계속하지 않습니다. flags 는 0 (결과 일치 내용이 정확해야함), Gtk.TextSearchFlags.VISIBLE_ONLY (보이지 않는 글자가 needle에 있을 수도 있음); Gtk.TextSearchFlags.TEXT_ONLY (일치 범위에 있는 내용에 픽셀 버퍼 또는 하위 위젯의 조합으로 이루어짐); Gtk.TextSearchFlags.CASE_INSENSITIVE (대소문자 관계 없이 일치하면 됨)값 중 하나로 지정하거나 비트-OR 연산자 | 로 지정할 수 있습니다. 메서드에서는 시작 지점을 가리키는 Gtk.TextIter 와 일치 결과를 찾은 지점 다음의 첫번째 문자를 튜플 형태로 반환합니다. 만약 일치 결과가 없으면 None 을 반환합니다. </item>
|
|
Packit |
1470ea |
<item>backward_search(needle, flags, limit) 함수는 forward_search() 와 동일하게 동작하지만 뒷 방향으로 검색합니다. </item>
|
|
Packit |
1470ea |
</list>
|
|
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/GtkTextView.html">GtkTextView</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gtk3/unstable/GtkTextBuffer.html">GtkTextBuffer</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gtk3/unstable/GtkTextTag.html">GtkTextTag</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gtk3/unstable/GtkScrolledWindow.html">GtkScrolledWindow</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gtk3/unstable/gtk3-Standard-Enumerations.html">표준 서수형 값 목록</link> </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
</page>
|