Python.use(better,Tkinter)《余録》Text

記事一覧

Python.use(better, Tkinter)
Text《Python3.1》

《著》森こねこ・小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第0版♪1993/11/25

概要

部品 Text の基本的な機能を紹介します。

Tkinter によるオブジェクト指向プログラミングへの扉を開きます。
※ Tcl/Tk で作成した例題を、Tkinter で再構成しました。

〓 事例

次のコードを実行すると、ウィンドウが現われます。

>>> tips1()


skyblue

  • 〔右側〕名前(テキスト)を選択すると、
  • 〔左側〕キャンバスの色が変化します。
def tips1():
    class TIPS(object):
        tag, tag_color = "tag", "yellow"

        def __init__(self, master, canvas, items):
            self.items = items
            self.canvas = canvas
            self.widget = self.create_widget(master)
            self.colors = self.create_colors()

        def create_widget(self, master):
            widget = Text(master, width=30, height=8)
            widget.tag_config(
                tagName   =self.tag,
                background=self.tag_color,
                )
            widget.pack(side=LEFT, fill=BOTH)
            scrollbar = self.create_Scrollbar(master, widget, VERTICAL)
            scrollbar.pack(side=RIGHT, fill=Y)
            return widget

        def create_colors(self):
            sep = ", "; sep_len = len(sep)
            indexes = "1.%d"
            s = []
            i1 = 0
            for e in self.items:
                s.append((i1, e))
                self.widget.insert(END, e+sep)
                i2 = i1 + len(e)
                self.widget.tag_add(self.tag, indexes%i1, indexes%i2)
                self.widget.tag_bind(
                    tagName=self.tag,
                    sequence="",
                    func=self,
                    )
                i1 = i2 + sep_len
            return s

        def create_Scrollbar(self, master, widget, orient):
            position = {            # resource
                HORIZONTAL: "x",
                VERTICAL  : "y",
                }
            xy = position[orient]
            scrollbar = Scrollbar(master, orient=orient)
            scrollbar.config(command=getattr(widget, "%sview"%xy))
            widget["%sscrollcommand"%xy] = scrollbar.set
            return scrollbar
            
        def __call__(self, event):
            s = event.widget.index(index=CURRENT)
            self.canvas.config(bg=self[s])

        def __getitem__(self, index):
            line, column = index.split(".")
            for i, s in self.colors:
                if i <= int(column) < i+len(s):
                    return s
            else:
                return None

    ## ----------------------------------------
    root = Tk()
    root.title("Text")
    root.config(padx=10, pady=4)

    canvas = Canvas(
        root,
        width=100, height=100, relief=RIDGE, borderwidth=5,
        )
    frame = Frame(root)
    
    TIPS(frame, canvas, Xcolors())

    canvas.grid(row=0, column=0)
    frame .grid(row=0, column=1)
    root.mainloop()