main.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #!`/usr/bin/whereis python3`
  2. import wow
  3. import tkinter as tk
  4. import tkinter.filedialog
  5. import sys
  6. from PIL import ImageTk
  7. class WOWFileViewer:
  8. def __init__(self, master, wowfile):
  9. self.currentLayer = 0
  10. self.master = master
  11. self.wowfile = wowfile
  12. master.title("WOW file viewer")
  13. self.layer_count = wowfile.get_layercount()
  14. self.layer = wowfile.get_layer(self.currentLayer)
  15. self.label = tk.Label(master, text="Layer: {num} / {tot}".format(num=self.layer.number, tot=self.layer_count))
  16. self.label.grid(row=1, columnspan=4)
  17. self.img = ImageTk.PhotoImage(self.layer.image)
  18. self.layer_img = tk.Label(master, image=self.img)
  19. self.layer_img.grid(row=2, column=1, columnspan=3)
  20. tickinterval = self.layer_count/10
  21. self.layer_select = tk.Scale(master, from_=1, to=self.layer_count,
  22. command=self.sliderUpdate, orient=tk.VERTICAL,
  23. resolution=1, length=400, tickinterval=tickinterval)
  24. self.layer_select.grid(row=2, column=4)
  25. self.thick_var = tk.StringVar()
  26. self.thick_var.set(str(self.layer.thickness * 1000))
  27. self.thick_lbl = tk.Label(master, text="Layer thickness (µm): ")
  28. self.thick_lbl.grid(row=3, column=1, sticky=tk.E)
  29. self.thick_ent = tk.Entry(master, textvariable=self.thick_var)
  30. self.thick_ent.grid(row=3, column=2, sticky=tk.W)
  31. self.exp_var = tk.StringVar()
  32. self.exp_var.set(str(self.layer.exposition))
  33. self.exp_lbl = tk.Label(master, text="Layer exposure level (0-255): ")
  34. self.exp_lbl.grid(row=4, column=1, sticky=tk.E)
  35. self.exp_ent = tk.Entry(master, textvariable=self.exp_var)
  36. self.exp_ent.grid(row=4, column=2, sticky=tk.W)
  37. self.spdu_var = tk.StringVar()
  38. self.spdu_var.set(str(self.layer.speed_up))
  39. self.spdu_lbl = tk.Label(master, text="Speed up (mm/min): ")
  40. self.spdu_lbl.grid(row=3, column=3, sticky=tk.E)
  41. self.spdu_ent = tk.Entry(master, textvariable=self.spdu_var)
  42. self.spdu_ent.grid(row=3, column=4, sticky=tk.W)
  43. self.spdd_var = tk.StringVar()
  44. self.spdd_var.set(str(self.layer.speed_down))
  45. self.spdd_lbl = tk.Label(master, text="Speed down (mm/min): ")
  46. self.spdd_lbl.grid(row=4, column=3, sticky=tk.E)
  47. self.spdd_ent = tk.Entry(master, textvariable=self.spdd_var)
  48. self.spdd_ent.grid(row=4, column=4, sticky=tk.W)
  49. self.expt_var = tk.StringVar()
  50. self.expt_var.set(str(self.layer.exposition_time))
  51. self.expt_lbl = tk.Label(master, text="Layer exposure time (in sec): ")
  52. self.expt_lbl.grid(row=5, column=1, sticky=tk.E)
  53. self.expt_ent = tk.Entry(master, textvariable=self.expt_var)
  54. self.expt_ent.grid(row=5, column=2, sticky=tk.W)
  55. self.printtime_var = tk.StringVar()
  56. self.printtime_var.set(str(wowfile.get_printtime(human_readable=True)))
  57. self.printtime_lbl = tk.Label(master, text="Estimated print time: ")
  58. self.printtime_lbl.grid(row=6, column=1, sticky=tk.E)
  59. self.printtime_ent = tk.Label(master, textvariable=self.printtime_var)
  60. self.printtime_ent.grid(row=6, column=2, sticky=tk.W)
  61. self.close_button2 = tk.Button(master, text=" Exit ", command=master.quit)
  62. self.close_button2.grid(row=6, column=4)
  63. def sliderUpdate(self, pos):
  64. self.layerChange(int(pos))
  65. def layerUp(self):
  66. if self.currentLayer < self.wowfile.get_layercount():
  67. self.currentLayer += 1
  68. self.layerChange(self.currentLayer)
  69. def layerDown(self):
  70. if self.currentLayer > 0:
  71. self.currentLayer -= 1
  72. self.layerChange(self.currentLayer)
  73. def layerChange(self, layer):
  74. self.layer = self.wowfile.get_layer(layer - 1)
  75. self.img = ImageTk.PhotoImage(self.layer.image)
  76. self.layer_img.configure(image=self.img)
  77. self.label.configure(text="Layer: {num} / {tot}".format(num=self.layer.number, tot=self.layer_count))
  78. self.thick_var.set(str(self.layer.thickness * 1000))
  79. self.exp_var.set(str(self.layer.exposition))
  80. self.expt_var.set(str(self.layer.exposition_time))
  81. self.spdu_var.set(str(self.layer.speed_up))
  82. self.spdd_var.set(str(self.layer.speed_down))
  83. def main():
  84. root = tk.Tk()
  85. root.title("WOW file viewer")
  86. lbl = tk.Label(root, text="Please Wait...")
  87. lbl.grid(row=1, column=1)
  88. filename = tkinter.filedialog.askopenfilename(filetypes=(("WOW print file", "*.wow"),("All files", "*.*")))
  89. if filename is "":
  90. sys.exit(0)
  91. lbl.configure(text="")
  92. wowfile = wow.WowFile(filename)
  93. lbl = None
  94. my_gui = WOWFileViewer(root, wowfile)
  95. root.mainloop()
  96. if __name__ == "__main__":
  97. main()