Advertisement
cmiN

gui parport

Aug 31st, 2012
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.45 KB | None | 0 0
  1. #! /usr/bin/env python
  2. #
  3. # gpp: gui support for parport
  4.  
  5.  
  6. try:
  7.     from Tkinter import *
  8. except ImportError:
  9.     print "Please install python-tk"
  10. from tkFileDialog import askopenfilename
  11. from tkMessageBox import showinfo
  12. from subprocess import call
  13.  
  14.  
  15. DBIT = 8 # data register bit length
  16. CBIT = 4 # control register bit length
  17.  
  18.  
  19. class GUI(Frame):
  20.  
  21.     def __init__(self, master=None, margin=10):
  22.         Frame.__init__(self, master)
  23.         self.master.title("gparport")
  24.         self.grid(padx=margin, pady=margin)
  25.         self.widgets()
  26.  
  27.     def widgets(self):
  28.         # Data Register text
  29.         self.dataLabel = Label(self, text="Data Register: ")
  30.         self.dataLabel.grid(row=0, column=0, columnspan=DBIT, sticky=W)
  31.         self.dataVar = StringVar(self, "0")
  32.         self.dataDisplay = Label(self, textvariable=self.dataVar,
  33.                                  fg="darkgreen")
  34.         self.dataDisplay.grid(row=0, column=3)
  35.         # Data Register checkboxes
  36.         self.dataCheck = list()
  37.         for nr in xrange(DBIT):
  38.             var = IntVar()
  39.             newBox = Checkbutton(self, text=str(DBIT - nr - 1), variable=var,
  40.                                  onvalue=1, offvalue=0, command=self.data_c)
  41.             newBox.grid(row=1, column=nr)
  42.             self.dataCheck.insert(0, var)
  43.  
  44.         # Control Register text
  45.         self.controlLabel = Label(self, text="Control Register: ")
  46.         self.controlLabel.grid(row=2, column=0, columnspan=CBIT, sticky=W)
  47.         self.controlVar = StringVar(self, "0")
  48.         self.controlDisplay = Label(self, textvariable=self.controlVar,
  49.                                     fg="darkgreen")
  50.         self.controlDisplay.grid(row=2, column=3)
  51.         # Control Register checkboxes
  52.         self.controlCheck = list()
  53.         for nr in xrange(CBIT):
  54.             var = IntVar()
  55.             newBox = Checkbutton(self, text=str(CBIT - nr - 1), variable=var,
  56.                                  onvalue=1, offvalue=0, command=self.control_c)
  57.             newBox.grid(row=3, column=nr)
  58.             self.controlCheck.insert(0, var)
  59.  
  60.         # Start
  61.         self.epath = "" # binary path
  62.         self.startButton = Button(self, text="Start", command=self.process)
  63.         self.startButton.grid(row=3, column=4, columnspan=DBIT - CBIT,
  64.                               sticky=W+E)
  65.  
  66.     def data_c(self):
  67.         # Compute Data Register integer
  68.         bitstring = ""
  69.         for i in xrange(DBIT):
  70.             bit = self.dataCheck[i].get()
  71.             bitstring = str(bit) + bitstring
  72.         self.dataVar.set(str(int(bitstring, 2)))
  73.  
  74.     def control_c(self):
  75.         # Compute Control Register integer
  76.         bitstring = ""
  77.         for i in xrange(CBIT):
  78.             bit = self.controlCheck[i].get()
  79.             bitstring = str(bit) + bitstring
  80.         self.controlVar.set(str(int(bitstring, 2)))
  81.  
  82.     def process(self):
  83.         if not self.epath:
  84.             # define path
  85.             fileTypes = [("All Files", "*")]
  86.             self.epath = askopenfilename(parent=self, title="Open",
  87.                                          filetypes=fileTypes)
  88.         if not self.epath:
  89.             return # path not set
  90.         callArgs = [self.epath, self.dataVar.get(), self.controlVar.get()]
  91.         rc = call(callArgs)
  92.         # show some information
  93.         #showinfo("Info", "Executed: %s %s %s\nReturned: %d" %
  94.         #         tuple(callArgs + [rc]))
  95.  
  96.  
  97. if __name__ == "__main__":
  98.     GUI().mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement