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):
- def __init__(self, master, *args, **kwargs):
- tk.Frame.__init__(self, master, *args, **kwargs)
- self.master = master
- self.master.title("Графики ГПСЧ")
- self.gens = [
- gen.lcg(2**32, 1664525, 1013904223, 0),
- gen.mid_square(36149212),
- gen.mid_multi(123456),
- gen.mix_sum(1234567890) ]
- self.names = [
- 'Срединные квадраты',
- 'Срединные произведения',
- 'Метод перемешивания',
- 'Линейно конгруэнтный' ]
- self.CURRENT = 0
- self.N = 500
- self.text_input = tk.StringVar()
- self.createPlots();
- self.createTextInput();
- self.createButtons();
- self.set_data()
- def createPlots(self):
- fig, self.ax = plt.subplots(2,1,sharey=True, tight_layout=True)
- self.canvas = FigureCanvasTkAgg(fig, master=root)
- self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
- 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()
- 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.insert(tk.END, str(self.N))
- text.bind('<Return>', self.callback)
- text.focus_set()
- text.pack(side=tk.LEFT, padx=1, pady=5)
- frame.pack(side=tk.BOTTOM, 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_data(set_gen)
- def set_data(self, method = None):
- if method != None:
- self.CURRENT = method
- self.ax[0].clear()
- self.ax[0].set_title('random()')
- self.ax[0].scatter(range(self.N),[random.random() for i in range(self.N)],s=1)
- self.ax[1].clear()
- 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)],s=1)
- 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