Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter
- from matplotlib.backends.backend_tkagg import (
- FigureCanvasTkAgg, NavigationToolbar2Tk)
- # Implement the default Matplotlib key bindings.
- from matplotlib.backend_bases import key_press_handler
- from matplotlib.figure import Figure
- import matplotlib.pyplot as plt
- import numpy as np
- import random
- def lcg(modulus, a, c, seed):
- """Linear congruential generator"""
- while True:
- seed = (a * seed + c) % modulus
- yield seed / modulus
- lcg_gen = lcg(2**32, 1664525, 1013904223, 0)
- root = tkinter.Tk()
- root.wm_title("Embedding in Tk")
- # fig = Figure(figsize=(5, 4), dpi=100)
- # t = np.arange(0, 3, .01)
- # fig.add_subplot(111).plot(t, 2 * np.sin(2 * np.pi * t))
- fig, ax = plt.subplots(2,2,sharey=True)
- # plt.subplots_adjust(bottom=0.1)
- # plt.suptitle('ГПСЧ', size=18)
- fig.canvas.set_window_title('Графики ГПСЧ')
- n = 1000
- ax[0,0].hist([random.random() for i in range(n)],20)
- ax[0,1].hist([next(lcg_gen) for i in range(n)],20)
- ax[0,0].set_title('random()')
- ax[0,1].title.set_text('Линейно конгруэнтный')
- canvas = FigureCanvasTkAgg(fig, master=root) # A tk.DrawingArea.
- # canvas.draw()
- canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)
- # toolbar = NavigationToolbar2Tk(canvas, root)
- # toolbar.update()
- # canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)
- def on_key_press(event):
- print("you pressed {}".format(event.key))
- key_press_handler(event, canvas, toolbar)
- canvas.mpl_connect("key_press_event", on_key_press)
- message = tkinter.StringVar()
- def _input(event = None):
- try:
- n = int(message.get())
- except ValueError:
- return
- if n < 0:
- return
- ax[0,0].clear()
- ax[0,1].clear()
- ax[0,0].set_title('random()')
- ax[0,1].title.set_text('Линейно конгруэнтный')
- ax[0,0].hist([random.random() for i in range(n)],20)
- ax[0,1].hist([next(lcg_gen) for i in range(n)],20)
- # plt.draw()
- canvas.draw()
- # root.quit() # stops mainloop
- # root.destroy() # this is necessary on Windows to prevent
- # Fatal Python Error: PyEval_RestoreThread: NULL tstate
- f_input = tkinter.Frame()
- label = tkinter.Label(f_input,text='Длина')
- text = tkinter.Entry(f_input,textvariable=message)
- button = tkinter.Button(f_input,text="OK", command=_input)
- button.config(width=4)
- text.insert(tkinter.END, str(n))
- text.bind('<Return>', _input)
- f_input.pack(side=tkinter.BOTTOM, pady=5)
- label.pack(side=tkinter.LEFT, padx=10, pady=5)
- text.pack(side=tkinter.LEFT, padx=1, pady=5)
- button.pack(side=tkinter.LEFT, padx=10, pady=5)
- text.focus_set()
- tkinter.mainloop()
- # If you put root.destroy() here, it will cause an error if the window is
- # closed with the window manager.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement