2017-09-13 14 views
2

私はGUIをTkinterでMVCパターンとして開発しようとしていますが、これは私にとっては新しい方法です。私はウェブ上で多くの例を見てきましたが、それがどのように機能するかを理解することを好みます。だから、私はそれを得るために単純なアプリをプログラミングしているだけです。ModelアクションをTkinter MVCのViewボタンに渡すには?

開始するには、controller.py、view.py、およびmodel.pyというツリーファイルがあります。最初のものは、ビューとモデルの間のコネクタですが、最後のものは決して互いにリンクされません。モデルにはメソッド/関数だけが含まれています。グラフィックインターフェイスを見ると、私はウィジェットを意味します。

Viewクラス(view.py)にコマンドのないボタンがあり、このボタンが実行するアクションがModelsクラス(model.py)にある場合、コントローラクラス(コントローラ.py)このアクションを取得してボタンに配置しますか?

view.pyファイル:

#!/usr/bin/python 
# -*- coding:UTF-8 -*- 

from Tkinter import* 

class View(): 
    def __init__(self, master): 
     self.master = master 
     master.title("MAIN GUI") 
     master.geometry("400x200") 
     l = Label(master, text="TITLE SCREEN") 
     l.pack() 
     b = Button(master, text='Hello') 
     b.pack() 

model.pyファイル:

#!/usr/bin/python 
# -*- coding:UTF-8 -*- 

from Tkinter import* 
from tkMessageBox import* 

class Model(): 
    def __init__(self): 
     pass 
     #Greeting() #I don't know if this should be here. 

    def Greeting(self): 
     print "Hello world" 

    def Alert(self): 
     showinfo ('msg', "Hello world") 

controller.py:

#!/usr/bin/python 
# -*- coding:UTF-8 -*- 

from view import* 
from model import* 

class Controller(): 
    def __init__(self, master): 
     View(root) 
     Model() 
     View.b.config(command=Model.Greeting) 
     #View.b.config(command=self.Action) 

    def Action(self): 
     Model.Greeting() 

if __name__ == "__main__": 
    root = Tk() 
    View(root) 
    root.mainloop() 

答えて

1

ボタンは何のコマンドを持っていない場合は、何も今までになります起こる。 コントローラの機能を呼び出すコマンドが必要です。

コントローラは、モデルとの通信、または別のビューのトリガによって、このコマンドを実行します。

ボタンはコントローラの機能を呼び出すため、それを意識する必要があります。 パラメータとして渡したと仮定し、ボタンをcontroller.ActioncontrollerControllerのインスタンスになるようにトリガーするとします。その後、ボタンをクリックするとActionへの呼び出しになります

class View(): 
    def __init__(self, master, controller): 
     self.master = master 
     self.controller = controller 

     b = Button(master, text='Hello', command=self.controller.Action()) 
     b.pack() 

:ここ

は、あなたのビューは次のようになります方法です。

関連する問題