Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- import matplotlib
- matplotlib.use('TkAgg')
- from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
- from matplotlib.figure import Figure
- import matplotlib.pyplot as plt
- import random
- import gen
- class GenApp(tk.Frame):
- GENS = [
- gen.lcg(2**32, 1664525, 1013904223, 0),
- gen.mid_square(36149212),
- gen.mid_multi(123456),
- gen.mix_sum(1234567890) ]
- NAMES = [
- 'Срединные квадраты',
- 'Срединные произведения',
- 'Метод перемешивания',
- 'Линейно конгруэнтный' ]
- CURRENT = 0
- N = 500
- STYLE = dict(marker = 'o', s = 20, alpha = 0.8)
- def __init__(self, master, *args, **kwargs):
- tk.Frame.__init__(self, master, *args, **kwargs)
- self.master = master
- master.title("Графики ГПСЧ")
- self.text_input = tk.StringVar()
- self.text_input.set(str(self.N))
- self.createPlots();
- self.createTextInput();
- self.createButtons();
- self.set_method()
- def createPlots(self):
- self.fig = Figure()
- self.fig.patch.set_visible(False)
- self.ax = self.fig.subplots(2,1,sharey=True, gridspec_kw={'hspace':0.4})
- for side in ['top','right', 'bottom','left']:
- self.ax[0].spines[side].set_color('#ccc')
- self.ax[1].spines[side].set_color('#ccc')
- self.ax[0].spines['top'].set_visible(False)
- self.ax[1].spines['top'].set_visible(False)
- self.canvas = FigureCanvasTkAgg(self.fig, master=self.master)
- self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)
- def createButtons(self):
- frame = tk.Frame()
- frame.pack(side=tk.BOTTOM, pady=5)
- for i,name in enumerate(self.NAMES):
- tk.Button(frame,text=self.NAMES[i], width=22, command=lambda i=i: self.callback(set_gen = i)).grid(row=i//2, column=i%2)
- def createTextInput(self):
- frame = tk.Frame()
- frame.pack(side=tk.BOTTOM, pady=5)
- tk.Label(frame,text='Длина').pack(side=tk.LEFT, padx=10, pady=5)
- tk.Button(frame,text="OK", command=self.callback, width=4).pack(side=tk.RIGHT, padx=10, pady=5)
- text = tk.Entry(frame,textvariable=self.text_input)
- text.bind('<Return>', self.callback)
- text.focus_set()
- text.pack(side=tk.LEFT, padx=1, pady=5)
- def callback(self, event = None, set_gen = None):
- try:
- self.N = int(self.text_input.get())
- except ValueError:
- return
- if self.N < 0:
- return
- if set_gen != None:
- self.CURRENT = int(set_gen)
- self.set_method(set_gen)
- def set_method(self, method = None):
- if method != None:
- self.CURRENT = method
- self.ax[0].clear()
- self.ax[0].set_xlim(0,self.N)
- self.ax[0].set_title('random()')
- self.ax[0].scatter(range(self.N),[random.random() for i in range(self.N)],**self.STYLE)
- self.ax[1].clear()
- self.ax[1].set_xlim(0,self.N)
- self.ax[1].set_title(self.NAMES[self.CURRENT])
- self.ax[1].scatter(range(self.N),[next(self.GENS[self.CURRENT]) for i in range(self.N)],**self.STYLE)
- self.canvas.draw()
- if __name__ == '__main__':
- root = tk.Tk()
- GenApp(root).pack(side="top", fill="both", expand=True)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement