Skip to content

Instantly share code, notes, and snippets.

@dogterbox
Created April 20, 2019 19:07
Show Gist options
  • Save dogterbox/fc05970e9cb6b627f5274136c5652d6b to your computer and use it in GitHub Desktop.
Save dogterbox/fc05970e9cb6b627f5274136c5652d6b to your computer and use it in GitHub Desktop.
python MVC with tkinter
import tkinter as Tk
from models import Model
from views import View
class Controller():
def __init__(self):
self.root = Tk.Tk()
self.model = Model()
# Pass to view links on root frame and controller object
self.view = View(self.root, self)
self.root.title("MVC example")
self.root.geometry('300x200')
# self.root.deiconify()
self.root.mainloop()
def add10(self, event):
self.action(10)
def add100(self, event):
self.action(100)
def action(self, addnum):
# Pass data to view
# self.view.viewPanel.entry.insert(0, self.model.do())
num_input = self.view.viewPanel.v_entry.get()
try:
result = self.model.addnum(int(num_input), int(addnum))
except ValueError:
result = '¯\_(ツ)_/¯'
self.view.viewPanel.v_num.set(result)
#!/usr/bin/env python3.6
# http://maximusin9.01sh.ru/2018/02/basic-mvc-example-for-tkinter
from controller import Controller
if __name__ == '__main__':
c = Controller()
class Model():
def __init__(self):
pass
def addnum(self, num1, num2):
return num1 + num2
import tkinter as Tk
class View():
def __init__(self, master, controller):
self.controller = controller
self.frame = Tk.Frame(master)
self.frame.pack()
self.viewPanel = ViewPanel(master, controller)
class ViewPanel():
def __init__(self, root, controller):
self.controller = controller
# frame 1
self.framePanel = Tk.Frame(root)
self.framePanel.pack()
self.label = Tk.Label(self.framePanel, text="Enter integer, click to add num")
self.label.pack()
self.v_num = Tk.StringVar()
self.num = Tk.Label(self.framePanel, textvariable=self.v_num)
self.num.pack()
self.v_entry = Tk.StringVar()
self.entry = Tk.Entry(self.framePanel, textvariable=self.v_entry)
self.entry.pack()
# frame 2
self.framePanel2 = Tk.Frame(root)
self.framePanel2.pack()
self.btn = Tk.Button(self.framePanel2, text="10")
self.btn.pack(side='left')
# Event handlers passes events to controller
self.btn.bind("<Button>", controller.add10)
self.btn2 = Tk.Button(self.framePanel2, text="100")
self.btn2.pack(side='left')
# Event handlers passes events to controller
self.btn2.bind("<Button>", controller.add100)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment