HOME | A-1. Widget に画像を張り込む | Python | A-3. Tkinter のデモ スクリプト | 書き込む |
つまり、
簡易日本語エディタ jmemo.py
の 80 行目(読み込み)と 87 行目(書きだし)を参考にしてください。jmemo.py を実行するとこのような Window が生成します。
1. 日本語の Label, Button, Listbox
上で述べた処理を行った、日本語を表示するスクリプトです。
sobaya.py
01: #! /usr/bin/env python
02: # -*- coding: shift_jis -*-
03: """
04: sobayas.py
05:
06: 日本語のテスト, Use Japanese with Tkinter
07:
08: June 28, 2005
09: """
10:
11:
12: import Tkinter as Tk
13: import sys
14:
15: MENU = [u"天丼", u"カツ丼", u"うな重", u"親子丼", u"盛りそば", u"掛けそば", u"鍋焼きうどん",
16: u"月見うどん", u"きつねうどん", u"狸うどん", u"素うどん", u"山菜そば", u"ととろそば",
17: u"鴨せいろ", u"天せいろ"]
18:
19:
20:
21: class ScrolledListbox(Tk.Listbox):
22: """ Listbox with vertical scroll bar """
23:
24: def __init__(self, master, **key):
25: self.frame = Tk.Frame(master)
26: self.yscroll = Tk.Scrollbar (self.frame, orient=Tk.VERTICAL)
27: self.yscroll.pack(side=Tk.RIGHT, fill=Tk.Y, expand=1)
28: key['yscrollcommand']=self.yscroll.set
29: Tk.Listbox.__init__(self, self.frame, **key)
30: self.pack(side=Tk.LEFT, fill=Tk.BOTH, expand=1)
31: self.yscroll.config(command=self.yview)
32:
33: # Copy geometry methods of self.frame
34: for m in (Tk.Pack.__dict__.keys() + Tk.Grid.__dict__.keys() + Tk.Place.__dict__.keys()):
35: m[0] == '_' or m == 'config' or m == 'configure' or \
36: setattr(self, m, getattr(self.frame, m))
37:
38:
39:
40:
41: class Frame(Tk.Frame):
42:
43: def __init__(self, master=None):
44: Tk.Frame.__init__(self, master)
45: self.master.title(u"Tk そば屋")
46: intro = Tk.Label(self, font=('Helvetica', '12'), justify=Tk.LEFT, wraplength='10c', width=40,
47: text = u"いらっしゃい、ご注文は?\n(マウス左ダブルクリックで注文してください)")
48: intro.pack()
49: f = Tk.Frame(self, bd=3, relief=Tk.RIDGE)
50: f.pack(fill=Tk.BOTH, expand=1)
51:
52: self.listbox = ScrolledListbox(f, font=('Helvetica', '10'))
53: self.listbox.grid(row=0, column=0, rowspan=2, padx=5, pady=5, sticky=Tk.N+Tk.S)
54: self.listbox.bind("<Double-Button-1>", self.select_menu)
55: self.listbox.insert(Tk.END, *MENU)
56:
57: self.echo = Tk.StringVar()
58: lecho = Tk.Label(f, textvariable=self.echo, font=('Helvetica', '18', 'bold'), fg='#CC0000', width=20)
59: lecho.grid(row=0, column=1, sticky=Tk.E + Tk.W)
60:
61: b = Tk.Button(f, text=u"まいどあり", font=('Helvetica', '14', 'bold'), fg='#000066', command = sys.exit)
62: b.grid(row=1, column=1)
63:
64: def select_menu(self, event):
65: i = self.listbox.index(Tk.ACTIVE)
66: self.echo.set(MENU[i] + u" 一丁!")
67:
68:
69: ##------------------------------------------------
70:
71: if __name__ == '__main__':
72: f = Frame()
73: f.pack()
74: f.mainloop()
下のような Window が表示されると思います。2. Entry で取得した文字列を日本語で表示する。
ラベルなどと、同様の処理を行えば、Entry から取得した日本語文字列も表示できます。
01: #! /usr/bin/env python
02: # -*- coding: shift_jis -*-
03: """
04: jentry.py
05:
06: japanese entry
07:
08: June 30, 2005
09: """
10:
11:
12: import Tkinter as Tk
13:
14:
15: FONT = ('Helvetica', '12')
16: WIDTH = 30
17:
18: class Frame(Tk.Frame):
19:
20: def __init__(self, master=None):
21: Tk.Frame.__init__(self, master)
22: l_name = Tk.Label(self, font=FONT, text=u"お名前")
23: l_address = Tk.Label(self, font=FONT, text=u"ご住所")
24: self.s1 = Tk.StringVar()
25: self.s2 = Tk.StringVar()
26: self.s3 = Tk.StringVar()
27: e1 = Tk.Entry(self, textvariable = self.s1, width=WIDTH, font=FONT)
28: e2 = Tk.Entry(self, textvariable = self.s2, width=WIDTH, font=FONT)
29: e3 = Tk.Entry(self, textvariable = self.s3, width=WIDTH, font=FONT)
30: self.bind_class("Entry", '<Return>', self.make_echo)
31:
32: self.s = Tk.StringVar()
33: l_echo = Tk.Label(self, font=FONT, textvariable = self.s, anchor=Tk.W, justify=Tk.LEFT)
34:
35: l_name.grid(row=0, column=0, padx=5, pady=2)
36: l_address.grid(row=1, column=0, padx=5, pady=2)
37: e1.grid(row=0, column=1, padx=5, pady=2)
38: e2.grid(row=1, column=1, padx=5, pady=2)
39: e3.grid(row=2, column=1, padx=5, pady=2)
40: l_echo.grid(row=3, column=0, columnspan=2, padx=30, pady=10, sticky=Tk.W + Tk.E)
41:
42:
43: def make_echo(self, event):
44: self.s.set(u'お名前:\t%s\nご住所:\t%s\n\t%s\n' % (self.s1.get(), self.s2.get(), self.s3.get()))
45:
46:
47: ##------------------------------------------------
48:
49: if __name__ == '__main__':
50: f = Frame()
51: f.pack()
52: f.mainloop()
下のような Window が表示されると思います。3. 日本語のファイルのIO
ファイルを読み込むときに、.decode, 書き出すときに .encode メソッドを
使うと日本語が書かれたファイルの IO ができます。
HOME | A-1. Widget に画像を張り込む | Python | A-3. Tkinter のデモ スクリプト | 書き込む |