【Python】Tkinterを使った雛形(MVCモデル)
はじめに
最近はPythonのTkinterを使ってGUIアプリケーションを作ることが楽しい日々です。
そして、ただプログラムを組むのではなく、可動性を高めるために、MVCモデルでプログラムを構築しようとしています。ある程度、MVCモデルでの実装で最初の形が定まってきたので、ここに記そうと思います。
環境
- Windows 10 home
- Python 3.7.1
MVCモデルによる雛形
Tkinter.py
import tkinter as tk
class Model():
def __init__(self):
self.width=self.height=300
class View():
def __init__(self,master,model):
self.master = master
self.model = model
class Controller():
def __init__(self,master,model,view):
self.master = master
self.model = model
self.view = view
class Application(tk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack()
self.model = Model()
master.geometry(str(self.model.width)+"x"+str(self.model.height))
master.title("雛形")
self.view = View(master,self.model)
self.controller = Controller(master,self.model,self.view)
def main():
win = tk.Tk()
app = Application(master=win)
app.mainloop()
if __name__ == "__main__":
main()
実行
Tkinter.py
import tkinter as tk
class Model():
def __init__(self):
self.width=self.height=300
class View():
def __init__(self,master,model):
self.master = master
self.model = model
class Controller():
def __init__(self,master,model,view):
self.master = master
self.model = model
self.view = view
class Application(tk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack()
self.model = Model()
master.geometry(str(self.model.width)+"x"+str(self.model.height))
master.title("雛形")
self.view = View(master,self.model)
self.controller = Controller(master,self.model,self.view)
def main():
win = tk.Tk()
app = Application(master=win)
app.mainloop()
if __name__ == "__main__":
main()
実行
このような画面が出れば、成功です。
実装例
上記の雛形を拡張した例を下記に記します。
スペースキーを押すと三角形の図形が右斜め下に動くものです。
mvcTest.py
import tkinter as tk
class Model():
def __init__(self):
self.width=self.height=300
def moveModel(self,canvas,id):
canvas.move(id,5,5)
class View():
def __init__(self,master,model):
self.master = master
self.model = model
self.canvas = tk.Canvas(self.master,width=self.model.width,height=self.model.height)
self.canvas.pack()
self.canvas.create_polygon(10,10,10,60,50,35,tag="id1")
class Controller():
def __init__(self,master,model,view):
self.master = master
self.model = model
self.view = view
self.master.bind("<space>",self.moveController)
def moveController(self,event):
self.model.moveModel(self.view.canvas,"id1")
class Application(tk.Frame):
def __init__(self,master):
super().__init__(master)
self.pack()
self.model = Model()
master.geometry(str(self.model.width)+"x"+str(self.model.height))
master.title("mvcTest")
self.view = View(master,self.model)
self.controller = Controller(master,self.model,self.view)
def main():
win = tk.Tk()
app = Application(master=win)
app.mainloop()
if __name__ == "__main__":
main()
終わりに
まだ私も勉強中なので、この形が完璧なMVCモデルかどうかは保障できません。
参考程度に使ってください。
ここまでこの記事を読んでいただき、ありがとうございました。
応用例
- 【Python】Tkinterによる100行で作るGUIアプリ「ルーレット」
- 【Python】ミニ研究テーマ「学習用テトリスの開発」
- 【Python】Tkinterによる120行で作るGUIアプリ「RSA暗号クイズ」
その他書き方
Author And Source
この問題について(【Python】Tkinterを使った雛形(MVCモデル)), 我々は、より多くの情報をここで見つけました https://qiita.com/michimichix521/items/8687962247cae41625f7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .