環境設定
プログラム作成
tkinter
練習02
|
Pythontkinter 練習02実際的な GUIPythonWareの「An Introduction to Tkinter」をテキストにして,tkinterをつかったGUIの練習を行います.英文ですが,かなり詳しく書かれています. 目次はじめにPythonのtkinterの練習01のページを執筆中に,たまたま,「An Introduction to Tkinter」を見つけました.ついでに,ここに載っているプログラムも実行してみようと思い練習02のページをつくることにしました. GUIの練習Hello, tkinter ラベルプログラムおなじみの Hello world を表示させるプログラムです. このプログラムのソースは,次のようになります. 001 #!/usr/bin/python3 002 003 import tkinter as tk 004 005 #=============================== 006 # main function 007 #=============================== 008 if __name__ == '__main__': 009 010 root = tk.Tk() 011 w = tk.Label(root, text="Hello, world!") 012 w.pack() 013 014 root.mainloop() 解説このプログラムの内容は,以下の通りです.
Hello, Again ボタンプログラム001 #!/usr/bin/python3 002 003 import tkinter as tk 004 005 #================================================= 006 # definition of class 007 #================================================= 008 class App: 009 010 def __init__(self, master): 011 012 frame = tk.Frame(master) 013 frame.pack() 014 015 self.button = tk.Button(frame, text="QUIT", fg="red", command=frame.quit) 016 self.button.pack(side="left") 017 018 self.hi_there = tk.Button(frame, text="Hello", command=self.say_hi) 019 self.hi_there.pack(side="left") 020 021 def say_hi(self): 022 print("hi there, everyone!") 023 024 #================================================= 025 # main function 026 #================================================= 027 if __name__ == '__main__': 028 root = tk.Tk() 029 app = App(root) 030 root.mainloop() 解説Events and Bindings クリック座標プログラム001 #!/usr/bin/python3 002 003 import tkinter as tk 004 005 def callback(event): 006 print("clicked at", event.x, event.y) 007 008 #================================================= 009 # main function 010 #================================================= 011 if __name__ == '__main__': 012 root = tk.Tk() 013 frame = tk.Frame(root, width=100, height=100) 014 frame.bind("<Button-1>", callback) 015 frame.pack() 016 root.mainloop() 解説Protocol 終了メッセージボックスプログラム001 #!/usr/bin/python3 002 003 import tkinter as tk 004 import tkinter.messagebox as mb 005 006 def callback(): 007 if mb.askokcancel("Quit", "Do you really wish to quit?"): 008 root.destroy() 009 010 #================================================= 011 # main function 012 #================================================= 013 if __name__ == '__main__': 014 root = tk.Tk() 015 root.protocol("WM_DELETE_WINDOW", callback) 016 017 root.mainloop() 解説Menus メインメニュープログラム001 #!/usr/bin/python3 002 003 import tkinter as tk 004 005 def callback(): 006 print("called the callback!") 007 008 #================================================= 009 # main function 010 #================================================= 011 if __name__ == '__main__': 012 013 root = tk.Tk() 014 015 # create a menu 016 menu = tk.Menu(root) 017 root.config(menu=menu) 018 019 filemenu = tk.Menu(menu) 020 menu.add_cascade(label="File", menu=filemenu) 021 filemenu.add_command(label="New", command=callback) 022 filemenu.add_command(label="Open...", command=callback) 023 filemenu.add_separator() 024 filemenu.add_command(label="Exit", command=callback) 025 026 helpmenu = tk.Menu(menu) 027 menu.add_cascade(label="Help", menu=helpmenu) 028 helpmenu.add_command(label="About...", command=callback) 029 030 root.mainloop() 解説Toolbarsプログラム001 #!/usr/bin/python3 002 003 import tkinter as tk 004 005 def callback(): 006 print("called the callback!") 007 008 #================================================= 009 # main function 010 #================================================= 011 if __name__ == '__main__': 012 root = tk.Tk() 013 # create a toolbar 014 toolbar = tk.Frame(root) 015 016 b = tk.Button(toolbar, text="new", width=6, command=callback) 017 b.pack(side="left", padx=2, pady=2) 018 019 b = tk.Button(toolbar, text="open", width=6, command=callback) 020 b.pack(side="left", padx=2, pady=2) 021 022 toolbar.pack(side="top", fill=tk.X) 023 024 root.mainloop() 解説Status Barsプログラム001 #!/usr/bin/python3 002 003 import tkinter as tk 004 import time 005 006 #================================================= 007 # definition of class 008 #================================================= 009 class StatusBar(tk.Frame): 010 011 def __init__(self, master): 012 tk.Frame.__init__(self, master) 013 self.main = tk.Label(self, bd=1, relief="sunken", anchor="n",\ 014 height=10, width=20, text="status bar test") 015 self.main.pack(fill="both") 016 self.label = tk.Label(self, bd=1, relief="sunken", anchor="w") 017 self.label.pack(fill="x") 018 019 def set(self, format, *args): 020 self.label.config(text=format % args) 021 self.label.update_idletasks() 022 023 def clear(self): 024 self.label.config(text="") 025 self.label.update_idletasks() 026 027 #================================================= 028 # main function 029 #================================================= 030 if __name__ == '__main__': 031 root = tk.Tk() 032 status = StatusBar(root) 033 status.pack(side="bottom", fill="x") 034 for var in range(0, 101): 035 status.set("status\t%d percent",var) 036 time.sleep(1) 037 root.mainloop() 解説Message Boxesプログラム001 #!/usr/bin/python3 002 003 import tkinter as tk 004 import tkinter.messagebox as mb 005 006 filename = "hoge" 007 try: 008 fp = open(filename) 009 except: 010 mb.showwarning( 011 "Open file", 012 "Cannot open this file\n(%s)" % filename 013 ) 014 Data Entry(string)プログラム001 #!/usr/bin/python3 002 003 import tkinter as tk 004 import tkinter.simpledialog as sd 005 006 class main_window(tk.Frame): 007 def __init__(self, master): 008 tk.Frame.__init__(self, master) 009 self.label = tk.Label(master,text="There is no data.") 010 self.label.pack() 011 012 self.button = tk.Button(master, text="Input String", fg="red", 013 command=self.askstr) 014 self.button.pack(side="left") 015 016 def set(self, str): 017 self.label.config(text=str) 018 019 def askstr(self): 020 data=sd.askstring("test askstring", "input", initialvalue="hoge") 021 self.set(data) 022 023 #================================================= 024 # main function 025 #================================================= 026 if __name__ == '__main__': 027 root = tk.Tk() 028 mw = main_window(root) 029 root.mainloop(); 解説Data Entry(integer)プログラム001 #!/usr/bin/python3 002 003 import tkinter as tk 004 import tkinter.simpledialog as sd 005 import math 006 007 #================================================= 008 # difinition class 009 #================================================= 010 class main_window(tk.Frame): 011 def __init__(self, parent): 012 super(main_window, self).__init__(parent) 013 parent.title("Fibonacci number") 014 parent.minsize(200,50) 015 self.label = tk.Label(parent,text="Fibonacci") 016 self.label.pack() 017 018 #-------------- sin button ---------- 019 self.buttons = tk.Button(parent, text="Integer", fg="red", 020 command=self.askint) 021 self.buttons.pack() 022 023 def fibonacci(self, n): 024 if n==0: 025 return 0 026 if n==1: 027 return 1 028 return (self.fibonacci(n-2)+self.fibonacci(n-1)) 029 030 def set(self, st): 031 self.label.config(text=st) 032 033 def askint(self): 034 n = sd.askinteger("Input integer", "Fibonacci n",) 035 fn = self.fibonacci(n) 036 self.set(fn) 037 038 #================================================= 039 # main function 040 #================================================= 041 if __name__ == '__main__': 042 root = tk.Tk() 043 mw = main_window(root) 044 root.mainloop(); Data Entry(float)プログラム001 #!/usr/bin/python3 002 003 import tkinter as tk 004 import tkinter.simpledialog as sd 005 import math 006 007 #================================================= 008 # difinition class 009 #================================================= 010 class main_window(tk.Frame): 011 def __init__(self, parent): 012 super(main_window, self).__init__(parent) 013 self.label = tk.Label(parent,text="Trigonometric function.") 014 self.label.pack() 015 #-------------- sin button ---------- 016 self.buttons = tk.Button(parent, text="sin(x)", fg="red", 017 command=lambda:self.askstr("sin")) 018 self.buttons.pack(side="left") 019 #-------------- cos button ---------- 020 self.buttonc = tk.Button(parent, text="cos(x)", fg="red", 021 command=lambda:self.askstr("cos")) 022 self.buttonc.pack(side="left") 023 024 def set(self, st): 025 self.label.config(text=st) 026 027 def askstr(self, f): 028 theta=sd.askfloat("test askinteger", "deg",) 029 if f=="sin": 030 data=str(math.sin(math.radians(theta))) 031 if f=="cos": 032 data=str(math.cos(math.radians(theta))) 033 self.set(data) 034 035 #================================================= 036 # main function 037 #================================================= 038 if __name__ == '__main__': 039 root = tk.Tk() 040 mw = main_window(root) 041 root.mainloop(); 解説ページ作成情報参考資料
更新履歴
|