farry

tkinter-buttons-radios-plot.py

Aug 23rd, 2019
287
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.78 KB | None | 0 0
  1. #!/usr/bin/env python3
  2.  
  3. # test button & radio button generation
  4. # test continuous plotting using tkinter timer
  5.  
  6. import tkinter as Tk
  7. from math import pi, sin
  8.  
  9. width=600; height=400
  10. phase=0
  11.  
  12. root = Tk.Tk()
  13. upperframe = Tk.Frame(root)
  14. upperframe.pack()
  15. buttonbar = Tk.Frame(root)
  16. buttonbar.pack()
  17. radiobar = Tk.Frame(upperframe)
  18. radiobar.pack(side="left", anchor="n")
  19. graph = Tk.Canvas(upperframe, width=width, height=height + 2)
  20. graph.pack(side="left")
  21. abar = Tk.Frame(radiobar, bd=1, relief="raised")
  22. abar.pack(ipady=5, fill="both")
  23. fbar = Tk.Frame(radiobar, bd=1, relief="raised")
  24. fbar.pack(ipady=5, fill="both")
  25.  
  26. def showgraph(*args):
  27.     global act, phase
  28.     amp = (avar.get() + 2) / 4.0
  29.     freq = fvar.get() + 1
  30.     act = args[0] if args else act
  31.     if act == "Stop":
  32.         return
  33.     graph.delete("all")
  34.     x = range(width)
  35.     phase = (phase - 2) % width
  36.     wav = [sin(2 * pi * (freq * n + phase) / width) for n in x]
  37.     y = [(w * amp + 1) * height / 2 for w in wav]
  38.     graph.create_line(list(zip(x,y)), width=2)
  39.     if act == "Repeat":
  40.         root.after(20,showgraph)
  41.  
  42. butnames = ["Single", "Repeat", "Stop"]
  43. for bname in butnames:
  44.   butcall = lambda act=bname: showgraph(act)
  45.   Tk.Button(buttonbar, text=bname, command=butcall).pack(side="left")
  46.  
  47. avar = Tk.IntVar(value=1)
  48. aname = ["low", "med", "high"]
  49. Tk.Label(abar, text="Amp").pack(pady=5)
  50. for n in range(len(aname)):
  51.   Tk.Radiobutton(abar, variable=avar, value=n, text=aname[n]).pack(anchor="w")
  52.   # If notification of change required, attach a "command=" callback
  53.  
  54. fvar = Tk.IntVar(value=1)
  55. fname = ["low", "med", "high"]
  56. Tk.Label(fbar, text="Freq").pack(pady=5)
  57. for n in range(len(fname)):
  58.   Tk.Radiobutton(fbar, variable=fvar, value=n, text=fname[n]).pack(anchor="w")
  59.  
  60. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment