class FrOptions(LabelFrame):
    def __init__(self, title, txt, dicoprofils):
        LabelFrame.__init__(self, text=title)
        self.listing_profils(dicoprofils)

        # Dropdowm list of available profiles
        self.ddprofils = Combobox(self,
                                  values = dicoprofils.keys(),
                                  width = 35,
                                  height = len(dicoprofils.keys())*20)
        self.ddprofils.current(1)   # set the dropdown list to first element

        # export options
        caz_doc = Checkbutton(self, text = u'HTML / Word (.doc/.docx)',
                                    variable = self.master.opt_doc)
        caz_xls = Checkbutton(self, text = u'Excel 2003 (.xls)',
                                    variable = self.master.opt_xls)
        caz_xml = Checkbutton(self, text = u'XML (ISO 19139)',
                                    variable = self.master.opt_xml)

        # Basic buttons
        self.action = StringVar()
        self.action.set(txt.get('gui_choprofil'))
        self.val = Button(self, textvariable = self.action,
                                relief= 'raised',
                                command = self.bell)
        can = Button(self, text = 'Cancel (quit)',
                                relief= 'groove',
                                command = self.master.destroy)
        # Widgets placement
        self.ddprofils.bind('<<ComboboxSelected>>', self.alter_val)
        self.ddprofils.grid(row = 1, column = 0, columnspan = 3, sticky = N+S+W+E, padx = 2, pady = 5)
        caz_doc.grid(row = 2, column = 0, sticky = N+S+W, padx = 2, pady = 1)
        caz_xls.grid(row = 3, column = 0, sticky = N+S+W, padx = 2, pady = 1)
        caz_xml.grid(row = 4, column = 0, sticky = N+S+W, padx = 2, pady = 1)
        self.val.grid(row = 5, column = 0, columnspan = 2,
                            sticky = N+S+W+E, padx = 2, pady = 5)
        can.grid(row = 5, column = 2, sticky = N+S+W+E, padx = 2, pady = 5)

    def listing_profils(self, dictprofils):
        u""" List existing profilesin folder \data\profils """
        for i in glob(r'../data/profils/*.xml'):
            dictprofils[path.splitext(path.basename(i))[0]] = i
##        if new > 0:
##            listing_lang()
##            load_textes(deroul_lang.get())
##            deroul_profils.setlist(sorted(dico_profils.keys()))
##            fen_choix.update()
        # End of function
        return dictprofils

    def alter_val(self, inutile):
        u""" Switch the label of the validation button contained in basics class
        in the case that a new profile is going to be created"""
        if self.ddprofils.get() == self.master.blabla.get('gui_nouvprofil'):
            self.action.set(self.master.blabla.get('gui_crprofil'))
        else:
            self.action.set(self.master.blabla.get('gui_choprofil'))
        # End of functionFin de fonction
        return self.action
Beispiel #2
0
 def _add_choice(self, frame, index, name, choices, default, option):
     self.function[-1] = lambda v: [option, v]
     label = Label(frame, text=name)
     label.grid(row=index, column=0, sticky="W", padx=10)
     field = Combobox(frame, values=choices, state="readonly")
     field.set(default)
     field.grid(row=index, column=1, sticky="WE")
     self.variables[-1] = field
Beispiel #3
0
class SendGCode(LabelFrame):
	def __init__(self, root, prtr, settings, log, *arg):
		LabelFrame.__init__(self, root, *arg, text="Send gcode")
		self.app = root
		self.printer = prtr
		self.settings = settings
		self.log = log

		self.entry = Entry(self, width=50)
		self.entry.grid(row=1, column=1, columnspan=3, sticky=N+E+W)
		
		self.bSend = Button(self, text="Send", width=4, command=self.doSend, state=DISABLED)
		self.bSend.grid(row=1, column=4, padx=2)
		
		self.entry.delete(0, END)
		
		self.entry.bind('<Return>', self.hitEnter)
		self.gcv = StringVar(self)
		
		gclist = gcoderef.gcKeys()
		self.gcv.set(gclist[0])

		l = Label(self, text="G Code Reference:", justify=LEFT)
		l.grid(row=2, column=1, columnspan=2, sticky=W)

		self.gcm = Combobox(self, textvariable=self.gcv)
		self.gcm['values'] = gclist
		self.gcm.grid(row=2, column=3, padx=2)
		
		self.gcm.bind('<<ComboboxSelected>>', self.gcodeSel)
		
		#self.bInfo = Button(self, text="Info", width=9, command=self.doInfo)
		#self.bInfo.grid(row=2, column=4, padx=2)
		
	#def doInfo(self):
	def gcodeSel(self, *arg):
		verb = self.gcv.get()
		self.log.logMsg("%s: %s" % (verb, gcoderef.gcText(verb)))
		
	def activate(self, flag):
		if flag:
			self.bSend.config(state=NORMAL)
		else:
			self.bSend.config(state=DISABLED)
			
	def hitEnter(self, e):
		self.doSend()
		
	def doSend(self): 
		cmd = self.entry.get()
		verb = cmd.split()[0]
		
		if self.app.printerAvailable(cmd=verb):
			self.log.logMsg("Sending: %s" % cmd)
			self.printer.send_now(cmd)
 def __init__(self, parentFrm):
     #Create main frame
     self.cmdFrm = Frame(parentFrm, borderwidth = 5, relief=RAISED)
     self.cmdFrm.grid(column = 0, row = 0)
     
     #Add rules thread controls
     tmpLbl = Label(self.cmdFrm, text="Rules Thread")
     tmpLbl.grid(column = 0, row = 0)
     TkCmdFrm.comboVar.append(StringVar())
     TkCmdFrm.comboVar[TkCmdFrm.RULES_THREAD_IDX].set("Run")
     TkCmdFrm.threadRun.append(True)
     TkCmdFrm.toggleState.append(False)
     TkCmdFrm.threadSendStep.append(False)
     tmpCB = Combobox(self.cmdFrm, textvariable=TkCmdFrm.comboVar[TkCmdFrm.RULES_THREAD_IDX], width=11, state="readonly")
     tmpCB["values"] = ("Run", "Single Step")
     tmpCB.grid(column = 0, row = 1, padx=8, pady=8)
     TkCmdFrm.comboVar[TkCmdFrm.RULES_THREAD_IDX].trace("w", lambda name, index, op, tmp=TkCmdFrm.RULES_THREAD_IDX: self.comboboxcallback(tmp))
     tmpBtn = Btn(self.cmdFrm, text="Run", command=lambda tmp=TkCmdFrm.RULES_THREAD_IDX: self.toggle(tmp))
     tmpBtn.grid(column = 0, row = 2, padx=8, pady=8)
     TkCmdFrm.toggleBtn.append(tmpBtn)
     
     #Add comms thread controls
     tmpLbl = Label(self.cmdFrm, text="Comms Thread")
     tmpLbl.grid(column = 1, row = 0)
     TkCmdFrm.comboVar.append(StringVar())
     TkCmdFrm.comboVar[TkCmdFrm.COMMS_THREAD_IDX].set("Run")
     TkCmdFrm.threadRun.append(True)
     TkCmdFrm.toggleState.append(False)
     TkCmdFrm.threadSendStep.append(False)
     tmpCB = Combobox(self.cmdFrm, textvariable=TkCmdFrm.comboVar[TkCmdFrm.COMMS_THREAD_IDX], width=11, state="readonly")
     tmpCB["values"] = ("Run", "Single Step")
     tmpCB.grid(column = 1, row = 1, padx=8, pady=8)
     TkCmdFrm.comboVar[TkCmdFrm.COMMS_THREAD_IDX].trace("w", lambda name, index, op, tmp=TkCmdFrm.COMMS_THREAD_IDX: self.comboboxcallback(tmp))
     tmpBtn = Btn(self.cmdFrm, text="Run", command=lambda tmp=TkCmdFrm.COMMS_THREAD_IDX: self.toggle(tmp))
     tmpBtn.grid(column = 1, row = 2, padx=8, pady=8)
     TkCmdFrm.toggleBtn.append(tmpBtn)
     
     #Add rules state status
     tmpLbl = Label(self.cmdFrm, text="Rules State:")
     tmpLbl.grid(column = 2, row = 1)
     TkCmdFrm.rulesStateVar = StringVar()
     TkCmdFrm.rulesStateVar.set("No State")
     tmpLbl = Label(self.cmdFrm, textvariable=TkCmdFrm.rulesStateVar, relief=SUNKEN, width=20, anchor=CENTER)
     tmpLbl.grid(column = 3, row = 1, padx=8, pady=8)
     
     #Add comms state status
     tmpLbl = Label(self.cmdFrm, text="Comms State:")
     tmpLbl.grid(column = 2, row = 2)
     TkCmdFrm.commsStateVar = StringVar()
     TkCmdFrm.commsStateVar.set("No State")
     tmpLbl = Label(self.cmdFrm, textvariable=TkCmdFrm.commsStateVar, relief=SUNKEN, width=20, anchor=CENTER)
     tmpLbl.grid(column = 3, row = 2, padx=8, pady=8)
Beispiel #5
0
    def add_param_fields(self, frame, rownum, object_map):
        #create the fields
        key_option_val  = StringVar(frame)
        key_option_val.set(self.keywords[0])
        key_option_menu = Combobox(frame, textvariable=key_option_val, state='readonly')
        key_option_menu['values'] = self.keywords
        key_option_menu.grid(row=0, column=0, sticky=W, pady=10, padx=10)

        val_text   = StringVar(frame)
        val_entry  = Entry(frame, textvariable=val_text)
        val_entry.grid(row=0, column=1, pady=10, padx=10, sticky=W)
        
        object_map.append((key_option_val, val_text))
Beispiel #6
0
    def initUI(self):
      
        self.parent.title("TRAM")
        self.style = Style()
        self.style.theme_use("default")

        self.pack(fill=BOTH, expand=1)

        #Model Text
        self.t = Text(self, borderwidth=3, relief="sunken")
        self.t.config(font=("consolas", 12), undo=True, wrap='word')
        self.t.grid(row=0, column=0, padx=2, pady=2, sticky=(N, W, E, S))
        
        
        
        #Search Panel
        searchPanel = LabelFrame(self, text="Find your model")
        searchPanel.grid(row=0, column=1, padx=2, pady=2, sticky=N) 
        
        Label(searchPanel, text="Model name").grid(row=0, column=0, padx=2, pady=2, sticky=W)
        
        searchQueryEntry = Entry(searchPanel, textvariable=self.searchQuery)
        searchQueryEntry.grid(row=0, column=1, padx=2, pady=2, sticky=W)
        
        Label(searchPanel, text="Transformation").grid(row=1, column=0, padx=2, pady=2, sticky=W)
        preferredTransformation = StringVar()
        box = Combobox(searchPanel, textvariable=preferredTransformation, state='readonly')
        box['values'] = ('Any...', 'Object Change', 'Object Extension', 'Specialization', 'Functionality Extension', 'System Extension', 'Soft Simplification', 'Hard Simplification')
        box.current(0)
        box.grid(row=1, column=1, padx=2, pady=2, sticky=W)
        
        findButton = Button(searchPanel, text="Find", command = self.__findModels)
        findButton.grid(row=2, column=1, padx=2, pady=2, sticky=E)
        
        #Listbox with recommendations
        recommendationPanel = LabelFrame(self, text="Recommended models (transformations)")
        recommendationPanel.grid(row=0, column=1, padx=2, pady=2, sticky=(W,E,S))
        self.l = Listbox(recommendationPanel)
        self.l.pack(fill=BOTH, expand=1)
        
        #Button frame
        transformButtonPanel = Frame(recommendationPanel)
        transformButtonPanel.pack(fill=BOTH, expand=1)
        
        viewButton = Button(transformButtonPanel, text="View", command = self.__loadSelectedModel)
        viewButton.grid(row=1, column=0, padx=2, pady=2)
        
        transformButton = Button(transformButtonPanel, text="Transform", command = self.__transformModel)
        transformButton.grid(row=1, column=2, padx=2, pady=2)
    def createBitFrame(self, bit):
        solCardBitFrm = Frame(self.solCardFrm, borderwidth = 5, relief=RAISED)
        self.bitFrms.append(solCardBitFrm)
        solCardBitFrm.grid(column = rs232Intf.NUM_SOL_PER_BRD - bit - 1, row = 0)
        tmpLbl = Label(solCardBitFrm, text="%s" % GameData.SolBitNames.SOL_BRD_BIT_NAMES[self.brdNum][bit])
        tmpLbl.grid(column = 0, row = 0, columnspan = 2)
        
        #Read config and set btnCfg
        cmdOffset = rs232Intf.CFG_BYTES_PER_SOL * bit
        holdOffset = cmdOffset + rs232Intf.DUTY_CYCLE_OFFSET
        if (GameData.SolBitNames.SOL_BRD_CFG[self.brdNum][cmdOffset] == rs232Intf.CFG_SOL_AUTO_CLR) or \
               (ord(GameData.SolBitNames.SOL_BRD_CFG[self.brdNum][holdOffset]) != 0):
            self.btnCfgBitfield |= (1 << bit)
        
        #Combobox menu for button presses
        self.indBitOptMenu.append(StringVar())
        if (self.btnCfgBitfield & (1 << bit)):
            self.indBitOptMenu[bit].set("Toggle")
        else:
            self.indBitOptMenu[bit].set("Pulse")
        tmpCB = Combobox(solCardBitFrm, textvariable=self.indBitOptMenu[bit], width=6, state="readonly")
        tmpCB["values"] = ("Pulse", "Toggle")
        tmpCB.grid(column = 0, row = 1, columnspan = 2)
        self.indBitOptMenu[bit].trace("w", lambda name, index, op, tmp=bit: self.comboboxcallback(tmp))
        
        #Button code
        if (self.btnCfgBitfield & (1 << bit)):
            #Toggle button so use the old style so button can stay pressed
            tmpBtn = Btn(solCardBitFrm, text="SimSwitch", command=lambda tmp=bit: self.toggle(tmp))
            tmpBtn.grid(column = 0, row = 2, columnspan = 2, padx=8, pady=8)
        else:
            #Pulse button so use the new style
            tmpBtn = Button(solCardBitFrm, text="SimSwitch", command=lambda tmp=bit: self.toggle(tmp))
            tmpBtn.grid(column = 0, row = 2, columnspan = 2, padx=4, pady=12)
        self.toggleBtn.append(tmpBtn)
        self.toggleState.append(False)
        
        tmpLbl = Label(solCardBitFrm, text="Value")
        tmpLbl.grid(column = 0, row = 3)
        self.indBitStatLbl.append(StringVar())
        self.indBitStatLbl[bit].set("0")
        tmpLbl = Label(solCardBitFrm, textvariable=self.indBitStatLbl[bit], relief=SUNKEN)
        tmpLbl.grid(column = 1, row = 3)

        #Button for pulsing solenoid
        tmpBtn = Button(solCardBitFrm, text="PulseSol", command=lambda tmp=bit: self.pulsesol(tmp))
        tmpBtn.grid(column = 0, row = 4, columnspan = 2, padx=4, pady=12)
Beispiel #8
0
class LevelsWindow(Tk):
    def __init__(self, menu):
        Tk.__init__(self)
        
        self.title("Pick a level")
        
        icon = PhotoImage(file=os.getcwd() + '/res/logo/logo.gif')
        self.tk.call("wm", "iconphoto", self._w, icon)
        
        self.eval('tk::PlaceWindow %s center' % self.winfo_pathname(self.winfo_id()))
        
        self.levels = [file[:-4] for file in listdir("res/levels")]
        self.protocol("WM_DELETE_WINDOW", self.shutdownTTK)
        
        if not self.levels:  # No levels
            self.withdraw()
            tkMessageBox.showwarning("Error", 'There doesn\'t seem to be any levels saved. Create one pressing the "Design Level" button!')
            self.shutdownTTK()
            
        else:
            self.menu = menu
            
            self.value = StringVar()
            self.levels_list = Combobox(self, textvariable=self.value, state='readonly')
            
            self.levels_list['values'] = self.levels
            self.levels_list.current(0)
            self.levels_list.grid(column=0, row=0)
            
            self.button = Button(self, text="Begin Level", command=self.begin_level)
            self.button.grid(column=0, row=1)
            self.mainloop()
    
            
            
    def begin_level(self):
        level = self.levels_list.get()
        self.shutdownTTK()
        self.menu.call_to("GameWindow", level)
    
    
    def shutdownTTK(self):
        # For some unholy reason, TTK won't shut down when we destroy the window
        # so we have to explicitly kill it.
        self.eval('::ttk::CancelRepeat')
        self.destroy()
Beispiel #9
0
class SelectGame(tkSimpleDialog.Dialog, object):
    """Server settings window class."""

    def __init__(self, *args, **kwargs):
        """Initiates SelectGame instance with additional attributes.

        :param args: positional arguments - positional arguments passed to parent __init__ method
        :param kwargs: keyword arguments - keyword arguments passed to parent __init__ method
        """
        self.select_game, self.num_players, self.num_turns = None, None, None
        super(SelectGame, self).__init__(*args, **kwargs)

    def body(self, master):
        """Creates select game window.

        :param master: instance - master widget instance
        :return: Entry instance
        """
        self.resizable(False, False)
        Label(master, text='Type in new game title or select existing one').grid(row=0, columnspan=2)
        Label(master, text='Select game:').grid(row=1, sticky='W')
        Label(master, text='Number of players:').grid(row=2, sticky='W')
        Label(master, text='Game duration:').grid(row=3, sticky='W')
        self.select_game = Combobox(master)
        self.select_game.bind('<Button-1>', self.refresh_games)
        self.select_game.grid(row=1, column=1, sticky='W')
        self.num_players = Entry(master)
        self.num_players.insert(END, self.parent.num_players if self.parent.num_players else '')
        self.num_players.grid(row=2, column=1, sticky='W')
        self.num_turns = Entry(master)
        self.num_turns.insert(END, self.parent.num_turns if self.parent.num_turns else '')
        self.num_turns.grid(row=3, column=1, sticky='W')
        return self.select_game

    def apply(self):
        """Assigns entered values to parent game and num_players attributes."""
        self.parent.game = self.select_game.get() if self.select_game.get() != '' else None
        if self.parent.game not in self.parent.available_games:
            self.parent.num_players = int(self.num_players.get()) if self.num_players.get().isdigit() else None
            self.parent.num_turns = int(self.num_turns.get()) if self.num_turns.get().isdigit() else None

    def refresh_games(self, _):
        """Refreshes games list."""
        self.select_game.configure(values=self.parent.available_games)
Beispiel #10
0
    def __init__(self, parent, parenttab, name, section, paramprefix):
        EditInput.__init__(self, parent, parenttab, name)
        self._section = section
        self._paramprefix = paramprefix
        
        fontlist = list(tkFont.families())
        fontlist.sort()
        self._bvb = tki.BooleanVar()
        self._bvi = tki.BooleanVar()
        self._bvs = tki.BooleanVar()
        self._bvu = tki.BooleanVar()
        
        l = tki.Label(self, text = lang[lng.txtFontsize])
        l.grid(row = 0, column = 0, padx = 5, pady = 2, sticky = tki.W)
        
        tcmd = (self.register(self._ehOnValidateEntry), '%d', '%P')
        e = tki.Entry(self, validate = 'key', validatecommand = tcmd, width = _sizechars)
        self._esize = e
        e.grid(row = 1, column = 0, padx = 5, pady = 2, sticky = tki.W)

        l = tki.Label(self, text = lang[lng.txtFontName])
        l.grid(row = 2, column = 0, padx = 5, pady = 2, sticky = tki.W)
        
        cb = Combobox(self, values = fontlist)
        self._cbfontname = cb
        cb.grid(row = 3, column = 0, padx = 5, pady = 2, sticky = tki.W)
        cb.bind('<<ComboboxSelected>>', self._setDirty)
        cb.current(0)

        cb = tki.Checkbutton(self, text = lang[lng.txtBold], onvalue = True, offvalue = False, variable = self._bvb, command = self._setDirty)
        self._cbb = cb
        cb.grid(row = 0, column = 1, padx = 5, pady = 2, sticky = tki.W)
        
        cb = tki.Checkbutton(self, text = lang[lng.txtItalics], onvalue = True, offvalue = False, variable = self._bvi, command = self._setDirty)
        self._cbi = cb
        cb.grid(row = 1, column = 1, padx = 5, pady = 2, sticky = tki.W)

        cb = tki.Checkbutton(self, text = lang[lng.txtStrikethrough], onvalue = True, offvalue = False, variable = self._bvs, command = self._setDirty)
        self._cbs = cb
        cb.grid(row = 2, column = 1, padx = 5, pady = 2, sticky = tki.W)

        cb = tki.Checkbutton(self, text = lang[lng.txtUnderline], onvalue = True, offvalue = False, variable = self._bvu, command = self._setDirty)
        self._cbu = cb
        cb.grid(row = 3, column = 1, padx = 5, pady = 2, sticky = tki.W)
Beispiel #11
0
    def create_ingredient_fields(self, frame, rownum):
        if rownum not in self.ingredients_info['ingredients'][1]:
            self.ingredients_info['ingredients'][1][rownum] = [None, None]

        ing_frame = LabelFrame(frame, text="Ingredient %s" % (rownum + 1))
        ing_frame.grid(row=rownum, column=0, padx=10, pady=10, sticky=N+S+W+E)
        ing_frame.grid_rowconfigure(0, weight=1)
        ing_frame.grid_columnconfigure(0, weight=1)
        ing_frame.grid_columnconfigure(1, weight=10)

        space_label = Label(ing_frame, text="")
        space_label.grid(row=0, column=0, pady=5, sticky=W)

        name_label = Label(ing_frame, text="Ingredient Name")
        name_label.grid(row=1, column=0, columnspan=2, padx=10, pady=2, sticky=W)
        name_value = StringVar()
        if rownum in self.ingredients_info['ingredients'][0]:
            name_value.set(self.ingredients_info['ingredients'][0][rownum][0])
        name_box = Entry(ing_frame, textvariable=name_value)
        name_box.grid(row=2, column=0, columnspan=2, padx=10, pady=2, sticky=W)

        param_label = Label(ing_frame, text="Ingredient Parameters")
        param_label.grid(row=3, column=0, columnspan=2, padx=10, pady=2, sticky=W)

        key_option_val  = StringVar(ing_frame)
        key_option_val.set(self.keywords[0][0])
        key_option_menu = Combobox(ing_frame, textvariable=key_option_val, state='readonly')
        key_option_menu['values'] = [key for key, value in self.keywords]
        key_option_menu.grid(row=4, column=0, sticky=W, pady=10, padx=10)
        add_key_btn = Button(ing_frame, text="+")
        add_key_btn.grid(row=4, column=1, padx=10, pady=10, sticky=W)
        self.key_boxes[rownum] = key_option_val

        param_box = Text(ing_frame, height=5, width=80)
        if rownum in self.ingredients_info['ingredients'][0]:
            param_box.insert('1.0', self.ingredients_info['ingredients'][0][rownum][1])
        param_box.grid(row=5, column=0, columnspan=2, padx=10, pady=2, sticky=W)


        space_label = Label(ing_frame, text="")
        space_label.grid(row=5, column=0, pady=5, sticky=W)
        add_key_btn.configure(command=lambda:self.add_param_text(param_box, key_option_val))
        self.ingredients_info['ingredients'][1][rownum] = [name_value, param_box]
 def createBitFrame(self, bit):
     inpCardBitFrm = Frame(self.inpCardFrm, borderwidth = 5, relief=RAISED)
     self.bitFrms.append(inpCardBitFrm)
     if (bit < TkInpBrd.BITS_IN_ROW):
         inpCardBitFrm.grid(column = TkInpBrd.BITS_IN_ROW - bit - 1, row = 0)
     else:
         inpCardBitFrm.grid(column = rs232Intf.NUM_INP_PER_BRD - bit - 1, row = 1)
     tmpLbl = Label(inpCardBitFrm, text="%s" % GameData.InpBitNames.INP_BRD_BIT_NAMES[self.brdNum][bit])
     tmpLbl.grid(column = 0, row = 0, columnspan = 2)
     
     #Read config and set btnCfg
     if (GameData.InpBitNames.INP_BRD_CFG[self.brdNum][bit] == rs232Intf.CFG_INP_STATE):
         self.btnCfgBitfield |= (1 << bit)
     
     #Combobox menu for button presses
     self.indBitOptMenu.append(StringVar())
     if (self.btnCfgBitfield & (1 << bit)):
         self.indBitOptMenu[bit].set("Toggle")
     else:
         self.indBitOptMenu[bit].set("Pulse")
     tmpCB = Combobox(inpCardBitFrm, textvariable=self.indBitOptMenu[bit], width=6, state="readonly")
     tmpCB["values"] = ("Pulse", "Toggle")
     tmpCB.grid(column = 0, row = 1, columnspan = 2)
     self.indBitOptMenu[bit].trace("w", lambda name, index, op, tmp=bit: self.comboboxcallback(tmp))
     
     #Button code
     if (self.btnCfgBitfield & (1 << bit)):
         #Toggle button so use the old style so button can stay pressed
         tmpBtn = Btn(inpCardBitFrm, text="SimSwitch", command=lambda tmp=bit: self.toggle(tmp))
         tmpBtn.grid(column = 0, row = 2, columnspan = 2, padx=8, pady=8)
     else:
         #Pulse button so use the new style
         tmpBtn = Button(inpCardBitFrm, text="SimSwitch", command=lambda tmp=bit: self.toggle(tmp))
         tmpBtn.grid(column = 0, row = 2, columnspan = 2, padx=4, pady=12)
     self.toggleBtn.append(tmpBtn)
     self.toggleState.append(False)
     tmpLbl = Label(inpCardBitFrm, text="Value")
     tmpLbl.grid(column = 0, row = 3)
     self.indBitStatLbl.append(StringVar())
     self.indBitStatLbl[bit].set("0")
     tmpLbl = Label(inpCardBitFrm, textvariable=self.indBitStatLbl[bit], relief=SUNKEN)
     tmpLbl.grid(column = 1, row = 3)
Beispiel #13
0
	def __init__(self,parent):
		Toplevel.__init__(self,parent)
		self.title("Статистика")	
		self.transient(parent)
		self.parent = parent

	#fields for parameters of search-----------------------------------------------------------------------------------
		paramframe = Frame(self,relief=GROOVE,width=200,bd=1)
		paramframe.pack(side=LEFT,fill=BOTH)

		Label(paramframe, text="Что вывести",width=20,height=2).grid(row=0,column=0,columnspan=2)
		what = Combobox(paramframe,state='readonly',values = [u"Расходы",u"Доходы",u"Всё"],height=5)
		what.set(u"Расходы")
		what.grid(row=1,column=0,columnspan=2)
		self.what = what		
		
		Label(paramframe, text="За период",height=2).grid(row=2,column=0,columnspan=2)
		when = Combobox(paramframe,state='readonly',values=[u"Сегодня",u"3 дня",u"5 дней",u"Неделю",u"3 недели",u"Месяц",u"Всё время"],height=5)
		when.set(u"Сегодня")
		when.grid(row=3,column=0,columnspan=2)
		self.when = when
		
		Label(paramframe,text="Упорядочить по",height=2).grid(row=4,column=0,columnspan=2)
		orderby = Combobox(paramframe,state='readonly',values=[u"Дата",u"Cумма",u"Категория"],height=3)
		orderby.set(u"Дата")
		orderby.grid(row=5,column=0,columnspan=2)
		
		self.orderby = orderby		

		Button(paramframe,text="Вывести",command=(lambda: self.getStatistics())).grid(row=6,column=0,columnspan=2)		

		Label(paramframe,text="Итого: ",height=20).grid(row=7,column=0)
		self.summarylbl = Label(paramframe,text='0.0',height=20)
		self.summarylbl.grid(row=7,column=1)


	#end ------------------------------------------------------------------------------------------------------------------
		
	#table -------------------------------------------------------------------------------------------------------------
		
		self.viewframe = Frame(self,relief=GROOVE,width=200,bd=1)
		self.viewframe.pack(side=RIGHT,fill=BOTH,expand=YES)

	#end ------------------------------------------------------------------------------------------------------------------

		self.geometry("%dx%d+%d+%d" % (1000,500,225,125))
		self.wait_window(self)
Beispiel #14
0
var = IntVar()

ventana.title = ('Nuevo Apartado')

fecha = Label(ventana, text=Fecha)
fecha.grid(row=1, column=1)

nombre = Label(ventana, text='Nombre')
Nombre = Entry(ventana, textvariable=Nombre)
nombre.grid(row=2, column=1)
Nombre.grid(row=3, column=1)

escuela = Label(ventana, text='Selecciona la escuela')
Escuela = Combobox(ventana)
escuela.grid(row=4, column=1)
Escuela.grid(row=5, column=1)
Escuela["values"] = [
    "5 de Febrero Mat", "5 de Febrero Vesp", "Francisco Lozornio",
    "Ma. Elena Zapata"
]

Pedido = Label(ventana, text='Pedido')
Pedido.grid(row=7, column=1)
Precio = Label(ventana, text='Precio')
Precio.grid(row=7, column=2)
Talla = Label(ventana, text='Talla')
Talla.grid(row=7, column=3)
Cantidad = Label(ventana, text='Cantidad')
Cantidad.grid(row=7, column=4)
Estatus = Label(ventana, text='Estatus')
Estatus.grid(row=7, column=5)
Beispiel #15
0
class App:
    def __init__(self,master):
        #User Interface
        #TODO: Add progressbar so people know when the program is working
        root.title('Transit Survey Desire Lines')
        root.iconbitmap(default='busicon.ico')
        
        self.titleText=Label(master,text="OKI Transit On-board Survey Processor").grid(row=0,column=0,columnspan=4)
        self.licenseText=Label(master,text="Licensed 2012 GPL v3").grid(row=1,column=0,columnspan=4)
        self.websiteText=Label(master,text="www.oki.org").grid(row=2,column=0,columnspan=4)
        
        self.workspaceLabel=Label(master,text="GIS Workspace:").grid(row=3,column=0)
        self.workspaceText=Text(master,height=1,width=50)
        self.workspaceText.grid(row=3,column=1)
        self.workspaceBrowse=Button(master,text="Browse MDB",command=self.loadTemplate).grid(row=3,column=2)
        self.workspaceFGDB=Button(master,text="Browse GDB",command=self.loadFolder).grid(row=3,column=3)
        
        self.tableLabel=Label(master,text="Table:").grid(row=4,column=0)
        self.tableLB=Combobox(master,values=["None yet"])
        self.tableLB.bind('<<ComboboxSelected>>',self.getFieldsFromTable)
        self.tableLB.grid(row=4,column=1)
        self.idLabel=Label(master,text="Survey IDs:").grid(row=4,column=2)
        self.idCombo=Combobox(master,values=["None yet"])
        self.idCombo.grid(row=4,column=3)
        
        self.modeToLabel=Label(master,text="Mode To:").grid(row=5,column=0)
        self.modeToCombo=Combobox(master,values=["None yet"])
        self.modeToCombo.grid(row=5,column=1)
        self.modeFrLabel=Label(master,text="Mode From:").grid(row=5, column=2)
        self.modeFrCombo=Combobox(master,values=["None yet"])
        self.modeFrCombo.grid(row=5,column=3)
        
        self.oxLabel=Label(master,text="Origin X Field:").grid(row=6, column=0)
        self.oxCombo=Combobox(master,values=["None yet"])
        self.oxCombo.grid(row=6, column=1)
        self.oyLabel=Label(master,text="Origin Y Field:").grid(row=6, column=2)
        self.oyCombo=Combobox(master,values=["None yet"])
        self.oyCombo.grid(row=6,column=3)
        
        self.bxLabel=Label(master,text="Board X Field:").grid(row=7, column=0)
        self.bxCombo=Combobox(master,values=["None yet"])
        self.bxCombo.grid(row=7, column=1)
        self.byLabel=Label(master,text="Board Y Field:").grid(row=7, column=2)
        self.byCombo=Combobox(master,values=["None yet"])
        self.byCombo.grid(row=7,column=3)
        
        self.axLabel=Label(master,text="Alight X Field:").grid(row=8, column=0)
        self.axCombo=Combobox(master,values=["None yet"])
        self.axCombo.grid(row=8, column=1)
        self.ayLabel=Label(master,text="Alight Y Field:").grid(row=8, column=2)
        self.ayCombo=Combobox(master,values=["None yet"])
        self.ayCombo.grid(row=8,column=3)
        
        self.dxLabel=Label(master,text="Dest X Field:").grid(row=9, column=0)
        self.dxCombo=Combobox(master,values=["None yet"])
        self.dxCombo.grid(row=9, column=1)
        self.dyLabel=Label(master,text="Dest Y Field:").grid(row=9, column=2)
        self.dyCombo=Combobox(master,values=["None yet"])
        self.dyCombo.grid(row=9,column=3)
        
        self.breakerLabel=Label(master,text="The below are for graphing and are not needed for Desirelines").grid(row=10,column=0,columnspan=4)
        
        self.surveyBusLabel=Label(master,text="Survey Bus:").grid(row=11,column=0)
        self.surveyBusCombo=Combobox(master,values=["None yet"])
        self.surveyBusCombo.grid(row=11,column=1)
        self.firstBusLabel=Label(master,text="First Bus:").grid(row=11,column=2)
        self.firstBusCombo=Combobox(master,values=["None yet"])
        self.firstBusCombo.grid(row=11,column=3)
        
        self.goButton=Button(master,text="Create Desirelines!",command=self.buildDL).grid(row=12,column=0)
        self.quitButton=Button(master,text="Quit",command=master.quit).grid(row=12,column=1)
        self.graphOB=Button(master,text="Graph OB",command=self.graphOB).grid(row=12,column=2)
        self.graphAD=Button(master,text="Graph AD",command=self.graphAD).grid(row=12,column=3)
        
        self.addQCVarsButton=Button(master,text="Add QC Variables",command=self.QCVars).grid(row=13,column=0)
        self.CupholderButton=Button(master,text="Cupholder!",command=self.cupholder).grid(row=13,column=3)
        
    def loadTemplate(self):
        #Loads a personal geodatabase file
        filename=tkFileDialog.askopenfilename(filetypes=(("Personal Geodatabases","*.mdb")))
        if(filename):
            try:
                self.workspaceText.insert(END,filename)
                env.workspace=filename
                
            except Exception as e:
                tkMessageBox.showerror("Failed to read file",e.message)
                return
                
    def loadFolder(self):
        #Loads a file geodatabase (looks like a folder to Windows Explorer, etc.)
        foldername=tkFileDialog.askdirectory()
        if(foldername):
            try:
                self.workspaceText.insert(END,foldername)
                env.workspace=foldername
                self.getTablesFromGdb()
            except Exception as e:
                tkMessageBox.showerror("Failed to read folder",e.message)
                return
                
    def getTablesFromGdb(self):
        #Gets a table list from the geodatabase and fills the table combobox
        self.tableList=arcpy.ListTables()
        tl=()
        for table in self.tableList:
            tl=tl+(table,)
        self.tableLB['values']=tl
        
    def getFieldsFromTable(self,something):
        #Gets the fields from the selected table and loads all (relevant) comboboxes
        featClass=self.tableLB.get()
        try:
            fl=()
            if(featClass and featClass!=-1):
                fields=arcpy.ListFields(featClass)
                for field in fields:
                    fl=fl+(field.name,)
                self.oxCombo['values']=fl
                self.oyCombo['values']=fl
                self.bxCombo['values']=fl
                self.byCombo['values']=fl
                self.axCombo['values']=fl
                self.ayCombo['values']=fl
                self.dxCombo['values']=fl
                self.dyCombo['values']=fl
                self.idCombo['values']=fl
                self.modeToCombo['values']=fl
                self.modeFrCombo['values']=fl
                self.surveyBusCombo['values']=fl
                self.firstBusCombo['values']=fl
                
        except:
            return

    def buildDL(self):
        #this is the main process to build the desire lines
        try:
            #Check Inputs
            if self.idCombo.get() and self.modeToCombo.get() and self.modeFrCombo.get() and self.oxCombo.get() and self.oyCombo.get() and self.bxCombo.get() and self.byCombo.get() and self.axCombo.get() and self.ayCombo.get() and self.dxCombo.get() and self.dyCombo.get():
                SurveyIDField=self.idCombo.get()
                ModeToField=self.modeToCombo.get()
                ModeFrField=self.modeFrCombo.get()
                OXField=self.oxCombo.get()
                OYField=self.oyCombo.get()
                BXField=self.bxCombo.get()
                BYField=self.byCombo.get()
                AXField=self.axCombo.get()
                AYField=self.ayCombo.get()
                DXField=self.dxCombo.get()
                DYField=self.dyCombo.get()
                
                #Origin ~> Boarding 
                OutputFC="OBDesireLines"
                arcpy.CreateFeatureclass_management(env.workspace,OutputFC,"POLYLINE")
                arcpy.AddField_management(OutputFC,"SurveyID","LONG")
                arcpy.AddField_management(OutputFC,"ModeTo","LONG")
                arcpy.AddField_management(OutputFC,"ModeFrom","LONG")
                arcpy.AddField_management(OutputFC,"DistanceSL","DOUBLE")
                rows=arcpy.SearchCursor(self.tableLB.get())
                insRows=arcpy.InsertCursor(OutputFC)
                x=1
                for row in rows:
                    if(x % 100 == 0):
                        print "Working on ",x
                    insRow=insRows.newRow()
                    insRow.SurveyID=row.getValue(SurveyIDField)
                    insRow.ModeTo=row.getValue(ModeToField)
                    insRow.ModeFrom=row.getValue(ModeFrField)
                    lineArray=arcpy.Array()
                    pnt1=arcpy.Point()
                    pnt2=arcpy.Point()
                    if(row.getValue(OXField) and row.getValue(OYField) and row.getValue(BXField) and row.getValue(BYField)):
                        pnt1.X=row.getValue(OXField)
                        pnt1.Y=row.getValue(OYField)
                        lineArray.add(pnt1)
                        pnt2.X=row.getValue(BXField)
                        pnt2.Y=row.getValue(BYField)
                        lineArray.add(pnt2)
                        insRow.shape=lineArray
                        insRow.DistanceSL=math.sqrt(math.pow(pnt2.X-pnt1.X,2)+math.pow(pnt2.Y-pnt1.Y,2))
                    
                    insRows.insertRow(insRow)
                    x+=1
                    
                #Alight ~> Destination
                OutputFC="ADDesireLines"
                arcpy.CreateFeatureclass_management(env.workspace,OutputFC,"POLYLINE")
                arcpy.AddField_management(OutputFC,"SurveyID","LONG")
                arcpy.AddField_management(OutputFC,"ModeTo","LONG")
                arcpy.AddField_management(OutputFC,"ModeFrom","LONG")
                arcpy.AddField_management(OutputFC,"DistanceSL","DOUBLE")
                rows=arcpy.SearchCursor(self.tableLB.get())
                insRows=arcpy.InsertCursor(OutputFC)
                x=1
                for row in rows:
                    if(x % 100 == 0):
                        print "Working on ",x
                    insRow=insRows.newRow()
                    insRow.SurveyID=row.getValue(SurveyIDField)
                    insRow.ModeTo=row.getValue(ModeToField)
                    insRow.ModeFrom=row.getValue(ModeFrField)
                    lineArray=arcpy.Array()
                    pnt1=arcpy.Point()
                    pnt2=arcpy.Point()
                    if(row.getValue(AXField) and row.getValue(AYField) and row.getValue(DXField) and row.getValue(DYField)):
                        pnt1.X=row.getValue(AXField)
                        pnt1.Y=row.getValue(AYField)
                        lineArray.add(pnt1)
                        pnt2.X=row.getValue(DXField)
                        pnt2.Y=row.getValue(DYField)
                        lineArray.add(pnt2)
                        insRow.shape=lineArray
                        insRow.DistanceSL=math.sqrt(math.pow(pnt2.X-pnt1.X,2)+math.pow(pnt2.Y-pnt1.Y,2))
                    
                    insRows.insertRow(insRow)
                    x+=1
                    
                #TODO: add something about progress
            else:
                tkMessageBox.showerror("Error Creating Featureclass","You need to select a field for ALL input boxes!")
        except Exception as e:
            tkMessageBox.showerror("Error Creating Featureclass",e.message)
            
    def graphOB(self):
        #Graphs Origin-Boarding Locations
        try:
            #Check Inputs
            if 1==1: 
                #self.modeToCombo.get() and self.oxCombo.get() and self.oyCombo.get() and self.bxCombo.get() and self.byCombo.get() and self.surveyBusCombo.get() and self.firstBusCombo.get():
                ###Not needed
                #SurveyIDField=self.idCombo.get()
                #ModeFrField=self.modeFrCombo.get()
                #AXField=self.axCombo.get()
                #AYField=self.ayCombo.get()
                #DXField=self.dxCombo.get()
                #DYField=self.dyCombo.get()
                
                ## Debugging
                ##ModeToField=self.modeToCombo.get()
                ModeToField="OGET"
                ##OXField=self.oxCombo.get()
                OXField="OXCORD"
                ##OYField=self.oyCombo.get()
                OYField="OYCORD"
                ##BXField=self.bxCombo.get()
                BXField="BX"
                ##BYField=self.byCombo.get()
                BYField="BY_"
                ##sBusField=self.surveyBusCombo.get()
                sBusField="RTCODE"
                ##fBusField=self.firstBusCombo.get()
                fBusField="BUS1"
                #read all this stuff into an array
                rows=arcpy.SearchCursor(self.tableLB.get())
                x=1
                rowData=[]
                for row in rows:
                    if(x % 100 == 0):
                        print "Reading on ",x
                    if(row.getValue(sBusField)==row.getValue(fBusField)):
                        if(row.getValue(OXField)>0 and row.getValue(BXField)>0 and row.getValue(OYField)>0 and row.getValue(BYField)>0):
                            iRow=[row.getValue(ModeToField),math.sqrt(math.pow(row.getValue(OXField)-row.getValue(BXField),2)+math.pow(row.getValue(OYField)-row.getValue(BYField),2))/5280]
                            rowData.append(iRow)
                newRowData=self.sortList(rowData)
                #Graph creation
                iWalk=0
                iBike=0
                iDrive=0
                graphItemsWalk=[]
                graphItemsBike=[]
                graphItemsDrive=[]
                    
                for item in newRowData:
                    if(item[0]==1):
                        graphItemsWalk.append((iWalk,item[1]))
                        iWalk+=1
                    elif(item[0]==2):
                        graphItemsBike.append((iBike,item[1]))
                        iBike+=1
                    else:
                        graphItemsDrive.append((iDrive,item[1]))
                        iDrive+=1
                if(iWalk==0):
                    graphItemsWalk.append((0,0))
                if(iBike==0):
                    graphItemsBike.append((0,0))
                if(iDrive==0):
                    graphItemsDrive.append((0,0))
                        
                graphItems=[]
                giWalk=[]
                giBike=[]
                giDrive=[]
                
                for item in graphItemsWalk:
                    giWalk.append((item[0]*100/iWalk,item[1]))
                for item in graphItemsBike:
                    giBike.append((item[0]*100/iBike,item[1]))
                for item in graphItemsDrive:
                    giDrive.append((item[0]*100/iDrive,item[1]))

                graphItems.append(giWalk)
                graphItems.append(giBike)
                graphItems.append(giDrive)
                cairoplot.scatter_plot('C:\\GraphO2B.SVG',data=graphItems,width=600,height=400,border=20,axis=True,grid=True,series_colors=[(1,0,0),(0,1,0),(0,0,1)],y_title='Miles')
                cairoplot.scatter_plot('C:\\GraphO2B_Walk.SVG',data=graphItemsWalk,width=600,height=400,border=20,axis=True,grid=True,series_colors=[(1,0,0)],y_title='Miles')
                cairoplot.scatter_plot('C:\\GraphO2B_Bike.SVG',data=graphItemsBike,width=600,height=400,border=20,axis=True,grid=True,series_colors=[(1,0,0)],y_title='Miles')
                cairoplot.scatter_plot('C:\\GraphO2B_Drive.SVG',data=graphItemsDrive,width=600,height=400,border=20,axis=True,grid=True,series_colors=[(1,0,0)],y_title='Miles')
                
                
                print "Completed for now"

        except Exception as e:
            tkMessageBox.showerror("Problem somewhere",e.message)
    
    def graphAD(self):
         #Graphs Origin-Boarding Locations
        try:
            #Check Inputs
            if 1==1: 
                #self.modeFromCombo.get() and self.oxCombo.get() and self.oyCombo.get() and self.bxCombo.get() and self.byCombo.get() and self.surveyBusCombo.get() and self.firstBusCombo.get():
                ###Not needed
                #SurveyIDField=self.idCombo.get()
                #ModeFrField=self.modeFrCombo.get()
                #AXField=self.axCombo.get()
                #AYField=self.ayCombo.get()
                #DXField=self.dxCombo.get()
                #DYField=self.dyCombo.get()
                
                ## Debugging
                ##ModeToField=self.modeToCombo.get()
                ModeFromField="DGET"
                ##DXField=self.oxCombo.get()
                DXField="DXCORD"
                ##OYField=self.oyCombo.get()
                DYField="DYCORD"
                ##BXField=self.bxCombo.get()
                AXField="AX"
                ##BYField=self.byCombo.get()
                AYField="AY"
                ##sBusField=self.surveyBusCombo.get()
                sBusField="RTCODE"
                ##fBusField=self.firstBusCombo.get()
                fBusField="BUS1"
                #read all this stuff into an array
                rows=arcpy.SearchCursor(self.tableLB.get())
                x=1
                rowData=[]
                for row in rows:
                    if(row.getValue("BUS4")):
                        lastBus=row.getValue("BUS4")
                    elif(row.getValue("BUS3")):
                        lastBus=row.getValue("BUS3")
                    elif(row.getValue("BUS2")):
                        lastBus=row.getValue("BUS2")
                    else:
                        lastBus=row.getValue("BUS1")
                    if(x % 100 == 0):
                        print "Reading on ",x
                    if(row.getValue(sBusField)==lastBus):
                        if(row.getValue(DXField)>0 and row.getValue(AXField)>0 and row.getValue(DYField)>0 and row.getValue(AYField)>0):
                            iRow=[row.getValue(ModeFromField),math.sqrt(math.pow(row.getValue(DXField)-row.getValue(AXField),2)+math.pow(row.getValue(DYField)-row.getValue(AYField),2))/5280]
                            rowData.append(iRow)

                    
                        
                newRowData=self.sortList(rowData)
                #Graph creation
                iWalk=0
                iBike=0
                iDrive=0
                graphItemsWalk=[]
                graphItemsBike=[]
                graphItemsDrive=[]
                    
                for item in newRowData:
                    if(item[0]==1):
                        graphItemsWalk.append((iWalk,item[1]))
                        iWalk+=1
                    elif(item[0]==2):
                        graphItemsBike.append((iBike,item[1]))
                        iBike+=1
                    else:
                        graphItemsDrive.append((iDrive,item[1]))
                        iDrive+=1
                        
                if(iWalk==0):
                    graphItemsWalk.append((0,0))
                    iWalk=1
                if(iBike==0):
                    graphItemsBike.append((0,0))
                    iBike=1
                if(iDrive==0):
                    graphItemsDrive.append((0,0))
                    iDrive=1
                graphItems=[]
                giWalk=[]
                giBike=[]
                giDrive=[]
                
                for item in graphItemsWalk:
                    giWalk.append((item[0]*100/iWalk,item[1]))
                for item in graphItemsBike:
                    giBike.append((item[0]*100/iBike,item[1]))
                for item in graphItemsDrive:
                    giDrive.append((item[0]*100/iDrive,item[1]))

                graphItems.append(giWalk)
                graphItems.append(giBike)
                graphItems.append(giDrive)

                cairoplot.scatter_plot('C:\\GraphA2D.SVG',data=graphItems,width=600,height=400,border=20,axis=True,grid=True,series_colors=[(1,0,0),(0,1,0),(0,0,1)],y_title='Miles')
                cairoplot.scatter_plot('C:\\GraphA2D_Walk.SVG',data=graphItemsWalk,width=600,height=400,border=20,axis=True,grid=True,series_colors=[(1,0,0)],y_title='Miles')
                cairoplot.scatter_plot('C:\\GraphA2D_Bike.SVG',data=graphItemsBike,width=600,height=400,border=20,axis=True,grid=True,series_colors=[(1,0,0)],y_title='Miles')
                cairoplot.scatter_plot('C:\\GraphA2D_Drive.SVG',data=graphItemsDrive,width=600,height=400,border=20,axis=True,grid=True,series_colors=[(1,0,0)],y_title='Miles')
                
                print "Completed for now"
        except Exception as e:
            tkMessageBox.showerror("Problem somewhere",e.message)
                
    def sortList(self,list):
        recs=len(list)
        outputlist=[]
        currentlowest=[]
        while len(outputlist)<recs:
            for item in list:
                if(currentlowest==[]):
                    currentlowest=item
                for itemcompare in list:
                    if(itemcompare[1]>item[1]):
                        item=itemcompare
                #At this point, item should be the smallest distance in list
                outputlist.append(item)
                list.remove(item)
        return outputlist
        
    def QCVars(self):
        if(tkMessageBox.askyesno("Modify Table","This WILL modify the input table.  Continue?") and self.tableLB.get()):
            print "This battlestation will be fully operational"
            #check for and delete QC fields
            inputFeatClass=self.tableLB.get()
            fieldList=arcpy.ListFields(inputFeatClass,"QC_*")
            for field in fieldList:
                arcpy.DeleteField_management(inputFeatClass,field.name)
            arcpy.AddField_management(inputFeatClass,"QC_WalkToDistance","DOUBLE")
            arcpy.AddField_management(inputFeatClass,"QC_BikeToDistance","DOUBLE")
            arcpy.AddField_management(inputFeatClass,"QC_DriveToDistance","DOUBLE")
            arcpy.AddField_management(inputFeatClass,"QC_WalkFromDistance","DOUBLE")
            arcpy.AddField_management(inputFeatClass,"QC_BikeFromDistance","DOUBLE")
            arcpy.AddField_management(inputFeatClass,"QC_DriveFromDistance","DOUBLE")
            arcpy.AddField_management(inputFeatClass,"QC_DriveToLocalRoute","SHORT")
            arcpy.AddField_management(inputFeatClass,"QC_BoardWrongState","SHORT")
            arcpy.AddField_management(inputFeatClass,"QC_AlightWrongState","SHORT")
            
            #Field Definitions
            #if(self.modeToCombo.get() and self.oxCombo.get() and self.oyCombo.get() and self.bxCombo.get() and self.byCombo.get() and self.surveyBusCombo.get() and self.firstBusCombo.get():
            ###Not needed
            #SurveyIDField=self.idCombo.get()
            #ModeFrField=self.modeFrCombo.get()
            #AXField=self.axCombo.get()
            #AYField=self.ayCombo.get()
            #DXField=self.dxCombo.get()
            #DYField=self.dyCombo.get()
            
            ## Debugging
            ##ModeToField=self.modeToCombo.get()
            ModeToField="OGET"
            ##OXField=self.oxCombo.get()
            OXField="OXCORD"
            ##OYField=self.oyCombo.get()
            OYField="OYCORD"
            ##BXField=self.bxCombo.get()
            BXField="BX"
            ##BYField=self.byCombo.get()
            BYField="BY_"
            ##sBusField=self.surveyBusCombo.get()
            sBusField="RTCODE"
            ##fBusField=self.firstBusCombo.get()
            fBusField="BUS1"
            #read all this stuff into an array
            
            ModeFromField="DGET"
            ##DXField=self.oxCombo.get()
            DXField="DXCORD"
            ##OYField=self.oyCombo.get()
            DYField="DYCORD"
            ##BXField=self.bxCombo.get()
            AXField="AX"
            ##BYField=self.byCombo.get()
            AYField="AY"
            ##sBusField=self.surveyBusCombo.get()
            
            rows=arcpy.UpdateCursor(self.tableLB.get())
            x=1
            rowData=[]
            for row in rows:
                if(x % 100 == 0):
                    print "Reading on ",x
                    
                #ToDistance    
                if(row.getValue(sBusField)==row.getValue(fBusField)):
                    if(row.getValue(OXField)>0 and row.getValue(BXField)>0 and row.getValue(OYField)>0 and row.getValue(BYField)>0):
                        dist=math.sqrt(math.pow(row.getValue(OXField)-row.getValue(BXField),2)+math.pow(row.getValue(OYField)-row.getValue(BYField),2))/5280
                        if(row.getValue(ModeToField)==1):
                            row.setValue("QC_WalkToDistance",dist)
                        elif(row.getValue(ModeToField)==2):
                            row.setValue("QC_BikeToDistance",dist)
                        else:
                            row.setValue("QC_DriveToDistance",dist)
                    else:
                        row.setValue("QC_WalkToDistance",-1)
                        row.setValue("QC_BikeToDistance",-1)
                        row.setValue("QC_DriveToDistance",-1)
                
                #FromDistance
                if(row.getValue("BUS4")):
                    lastBus=row.getValue("BUS4")
                elif(row.getValue("BUS3")):
                    lastBus=row.getValue("BUS3")
                elif(row.getValue("BUS2")):
                    lastBus=row.getValue("BUS2")
                else:
                    lastBus=row.getValue("BUS1")
                    
                if(row.getValue(sBusField)==lastBus):
                    if(row.getValue(DXField)>0 and row.getValue(AXField)>0 and row.getValue(DYField)>0 and row.getValue(AYField)>0):
                        dist=math.sqrt(math.pow(row.getValue(DXField)-row.getValue(AXField),2)+math.pow(row.getValue(DYField)-row.getValue(AYField),2))/5280
                        if(row.getValue(ModeFromField)==1):
                            row.setValue("QC_WalkFromDistance",dist)
                        elif(row.getValue(ModeFromField)==2):
                            row.setValue("QC_BikeFromDistance",dist)
                        else:
                            row.setValue("QC_DriveFromDistance",dist)
                    else:
                        row.setValue("QC_WalkFromDistance",-1)
                        row.setValue("QC_BikeFromDistance",-1)
                        row.setValue("QC_DriveFromDistance",-1)
                

                rows.updateRow(row)
                            
            
            
            print "DBG: Complete for now"
            
            
            
        elif(self.tableLB.get()==''):
            tkMessageBox.showerror("Problem","You must select a table to proceed")
        else:
            print "Your lack of faith is disturbing"
        
    def cupholder(self):
        tkMessageBox.showinfo("Cupholder","Lord Vadar finds your computer's lack of a cupholder disturbing.")
        ctypes.windll.WINMM.mciSendStringW(u"set cdaudio door open",None,0,None)
Beispiel #16
0
entry_subject.insert(END, 'test')
protocol_type = ["Four Class Recorder", "Six Class Recorder", "Hand Recorder"]
label_protocol = Label(frame_protocol, text="Training Protocol: ")
combo_protocol = Combobox(frame_protocol,
                          values=protocol_type,
                          state='readlonly')
combo_protocol.current(0)
button_protocol = Button(frame_protocol,
                         text="Start Protocol",
                         command=run_protocol)

frame_protocol.grid(row=0, sticky='NSEW')
label_subject.grid(row=0, column=0, sticky='E')
entry_subject.grid(row=0, column=1, sticky='WE')
label_protocol.grid(row=1, column=0, sticky='E')
combo_protocol.grid(row=1, column=1, sticky='WE')
button_protocol.grid(row=2, column=1, sticky='WE')

frame_device = LabelFrame(main_tab, text="Device", relief=GROOVE)
device_type = ["Screen Output", "Device"]
label_deviceType = Label(frame_device, text="Device Type: ")
combo_deviceType = Combobox(frame_device,
                            values=device_type,
                            state='readlonly')
combo_deviceType.current(0)
label_IP = Label(frame_device, text="Device IP: ")
entry_IP = Entry(frame_device)
entry_IP.insert(END, '127.0.0.1')
button_device = Button(frame_device,
                       text="Connect Device",
                       command=connect_device)
Beispiel #17
0
                      variable=g)
gendero.grid(row=6, column=1)

Label(top, text="ACADEMIC QUALIFICATION", font="helv36").grid(row=7,
                                                              columnspan=4,
                                                              rowspan=3)

Label(top, text="HIGH SCHOOL").grid(row=10, column=2, rowspan=2)

yearof10pass = Spinbox(top, from_=1950, to=2016, width=4)
yearof10pass.grid(row=12, column=0)

Label(top, text="Year of Passing").grid(row=13, column=0)

board_10 = Combobox(top, values="CBSE UP_BOARD ICSE")
board_10.grid(row=12, column=1)

Label(top, text="Board").grid(row=13, column=1)

perc10 = Spinbox(top, from_=1, width=2, to=99)
perc10.grid(row=12, column=2)

Label(top, text="Percentage").grid(row=13, column=2)

school10_name = Entry(top)

school10_name.grid(row=12, column=3)

Label(top, text="School Name").grid(row=13, column=3)

Label(top, text="INTERMEDIATE").grid(row=14, column=2, rowspan=2)
Beispiel #18
0
wind.wm_title("Descuento de unidades")
wind.minsize(width=300, height=200)

lblART = Label(wind, text="Cantidad de unidades").grid(row=0)
txtART = Entry(wind, width=6)
txtART.grid(row=0, column=1)

lblVA = Label(wind, text="Valor de la unidad").grid(row=1)
txtVA = Entry(wind, width=9)
txtVA.grid(row=1, column=1)

lblCRD = Label(wind, text="Tiene tarjeta de afiliacion?").grid(row=2)

cmbCRD = Combobox(wind, width=3)
cmbCRD['values'] = ('Si', 'No')
cmbCRD.grid(row=2, column=1)

cmbREF = Combobox(wind)
cmbREF["values"] = ("Ref. Igual", "Ref.Dift")
cmbREF.grid(row=3, column=1)


def descuento():

    if re.match("^[0-9]+$", txtVA.get()):
        va = int(txtVA.get())

        art = float(txtART.get())
        va = float(txtVA.get())

        if art>=3 and \
class wine_DB_manager:  #Class for wrapping TKinter widgets
    def __init__(self, master):  #Initilize the attributes of the class

        master.minsize(width=600, height=700)  #Set window size and title
        master.title("Member and Store Manager")

        master.grid_columnconfigure(
            0, weight=1
        )  #Configure first and last columns for centering columns 1-5
        master.grid_columnconfigure(6, weight=1)
        master.grid_rowconfigure(
            12, weight=1
        )  #Configure last row for filling left over space at the bottom

        self.imp_store_label = Label(
            master, text="Import Store Information (.CSV)"
        )  #Initilize lable, entry, and buttons for importing stores
        self.imp_store_entry = Entry(master, width=70)
        self.imp_store_browse_button = Button(
            master,
            text="Browse",
            command=lambda: self.browse_for_CSV("store"))
        self.imp_store_import_button = Button(
            master,
            text="Import",
            command=lambda: self.import_to_DB(self.imp_store_entry.get(),
                                              "store"))

        self.imp_member_label = Label(
            master, text="Import Member Information (.CSV)"
        )  #Initilize lable, entry, and buttons for importing members
        self.imp_member_entry = Entry(master, width=70)
        self.imp_member_browse_button = Button(
            master,
            text="Browse",
            command=lambda: self.browse_for_CSV("member"))
        self.imp_member_import_button = Button(
            master,
            text="Import",
            command=lambda: self.import_to_DB(self.imp_member_entry.get(),
                                              "member"))

        self.horz_divider = Frame(
            master, height=1, width=500, bg="black"
        )  #Initilize a frame shaped as a horizonal line as a divider

        self.view_all_members_button = Button(
            master,
            text="View All Members",
            width=17,
            command=lambda: self.select_all_members()
        )  #Initilize button for selecting all members and displaying them in tree

        self.zip_label = Label(
            master, text="Zip Code"
        )  #Initilize lable, entry, combobox, and buttons for
        self.zip_entry = Entry(
            master,
            width=10)  #finding who paid dues by zip code and month paid
        self.month_label = Label(master, text="Month")
        self.month_combobox = Combobox(master, width=10)
        self.month_combobox['values'] = ('January', 'February', 'March',
                                         'April', 'May', 'June', 'July',
                                         'August', 'September', 'October',
                                         'November', 'December')
        self.find_users_that_paid = Button(
            master,
            text="Current Paid Users",
            width=20,
            command=lambda: self.select_paid_dues_month(
                self.zip_entry.get(), self.month_combobox.current()))

        self.state_label = Label(
            master,
            text="State")  #Initilize lable, entry, combobox, and buttons for
        self.state_combobox = Combobox(
            master,
            width=3)  #finding users who have joined the club since a date
        self.state_combobox['values'] = ('MD', 'NC', 'PA', 'VA', 'WV'
                                         )  #and belong to a specific state
        self.date_label = Label(master, text="Date (YYYY-MM-DD)")
        self.date_entry = Entry(master, width=10)
        self.find_users_that_joined = Button(
            master,
            text="Users Joined Since",
            width=20,
            command=lambda: self.select_users_joined_since(
                self.state_combobox.get(), self.date_entry.get()))

        self.users_that_love_total_wine = Button(
            master,
            text="Users that Love Total Wine",
            width=20,
            command=lambda: self.select_users_love_Tot_Wine(
            ))  #Initilize button for finding users that love Total Wines

        self.users_favorite_stores = Button(
            master,
            text="User's Favorite Stores",
            width=20,
            command=lambda: self.select_users_fav_stores()
        )  #Initilize button for finding users, their favorite stores, and store locations

        self.table_tree = Treeview(
            master, selectmode="extended")  #Initilize tree for data viewing
        self.table_tree["columns"] = (
            "one", "two", "three", "four", "five", "six", "seven", "eight",
            "nine", "ten", "eleven")  #Provide max column count and identifiers
        for columns in self.table_tree[
                "columns"]:  #For loop to add all columns
            self.table_tree.column(columns, width=70, anchor=W)
        self.table_tree['show'] = 'headings'  #Remove empty identity column

        self.vert_scroll_bar = Scrollbar(
            orient="vertical",
            command=self.table_tree.yview)  #Initilize scroll bar
        self.table_tree.configure(yscrollcommand=self.vert_scroll_bar.set
                                  )  #Add scroll bar to table_tree

        self.imp_store_label.grid(
            sticky="W", row=1, column=1, padx=10,
            pady=(20, 0))  #Grid positioning for all initialized attributes
        self.imp_store_entry.grid(sticky="W",
                                  row=2,
                                  column=1,
                                  columnspan=3,
                                  padx=10)
        self.imp_store_browse_button.grid(row=2, column=4, padx=10)
        self.imp_store_import_button.grid(row=2, column=5)

        self.imp_member_label.grid(sticky="W", row=3, column=1, padx=10)
        self.imp_member_entry.grid(sticky="W",
                                   row=4,
                                   column=1,
                                   columnspan=3,
                                   padx=10)
        self.imp_member_browse_button.grid(row=4, column=4, padx=10)
        self.imp_member_import_button.grid(row=4, column=5)

        self.horz_divider.grid(row=5, column=0, columnspan=7, pady=20)

        self.view_all_members_button.grid(row=6, column=1, columnspan=5)

        self.zip_label.grid(sticky="W", row=7, column=1, pady=(15, 0))
        self.zip_entry.grid(sticky="W", row=8, column=1, pady=5)
        self.month_label.grid(sticky="W",
                              row=7,
                              column=1,
                              padx=(100, 0),
                              pady=(15, 0))
        self.month_combobox.grid(sticky="W",
                                 row=8,
                                 column=1,
                                 padx=(100, 0),
                                 pady=5)
        self.find_users_that_paid.grid(sticky="W",
                                       row=9,
                                       column=1,
                                       columnspan=3,
                                       pady=5)

        self.state_label.grid(sticky="W", row=7, column=4, pady=(15, 0))
        self.state_combobox.grid(sticky="W", row=8, column=4, pady=5)
        self.date_label.grid(sticky="W",
                             row=7,
                             column=4,
                             columnspan=3,
                             padx=(85, 0),
                             pady=(15, 0))
        self.date_entry.grid(sticky="W",
                             row=8,
                             column=4,
                             columnspan=2,
                             padx=(85, 0),
                             pady=5)
        self.find_users_that_joined.grid(sticky="W",
                                         row=9,
                                         column=4,
                                         columnspan=2,
                                         pady=5)

        self.users_that_love_total_wine.grid(sticky="W",
                                             row=10,
                                             column=1,
                                             columnspan=3,
                                             pady=(15, 0))

        self.users_favorite_stores.grid(sticky="W",
                                        row=10,
                                        column=4,
                                        columnspan=2,
                                        pady=(15, 0))

        self.table_tree.grid(sticky="NWES",
                             row=11,
                             column=0,
                             columnspan=7,
                             rowspan=2,
                             pady=10,
                             padx=(10, 0))
        self.vert_scroll_bar.grid(sticky="NWES",
                                  row=11,
                                  column=7,
                                  rowspan=2,
                                  pady=10,
                                  padx=(0, 10))

    def browse_for_CSV(
        self, CSV_type
    ):  #Class method for browse buttons. Used for passing file path to TKinter entries

        file = tkFileDialog.askopenfile(
            parent=root, mode='rb',
            title='Choose a file')  #Opens browse for file window

        if (file != None):  #If file exists read into data and close file

            data = file.read()
            file.close()

            if (
                    CSV_type == "store"
            ):  #In order to resuse code, this method works for both buttons
                self.imp_store_entry.delete(
                    0, END)  #through using a passed button identity variable
                self.imp_store_entry.insert(0, os.path.abspath(file.name))

            else:
                self.imp_member_entry.delete(0, END)  #Empties entry widget
                self.imp_member_entry.insert(
                    0, os.path.abspath(file.name)
                )  #Inserts file path into entry widget using os.path import
        else:  #Catches no file selected possibility
            tkMessageBox.showinfo("Error", "No File Selected")

        return None

    def create_DB_connection(
        self
    ):  #Class method for opening a database connection to the pythonsqlite.db file

        try:
            DB_file = "SQLite_db\pythonsqlite.db"
            conn = sqlite3.connect(DB_file)
            return conn

        except Error as e:  #Catches non-connectivity errors
            print(e)

        return None

    def import_to_DB(
        self, file_path, CSV_type
    ):  #Class method for import buttons. Used to open csv files from path string
        #in entry widgets. Then opens db connection to import data to db
        try:
            self.CSV_file = open(file_path, "r")  #Opens CSV file in read mode
        except IOError as e:  #Catches file not found error
            tkMessageBox.showinfo("Error", "File Not Found")
            return

        CSV_reader = csv.reader(
            self.CSV_file
        )  #Reads CSV file into CSV_reader using csv.reader import
        conn = self.create_DB_connection()  #Calls for DB connection to open

        cur = conn.cursor()

        if (
                CSV_type == "store"
        ):  #In order to resuse code, this method works for both buttons by passed type.
            if (next(CSV_reader)[0][0:8] !=
                    "Store id"):  #Checks CSV for proper store headings
                tkMessageBox.showinfo(
                    "CSV Type Error",
                    "Please Import a CSV file formated for store data.")
                self.CSV_file.close(
                )  #If not proper headings close file and display message
                return
            else:  #Create table Stores
                cur.execute(
                    '''CREATE TABLE IF NOT EXISTS Stores (                                                                                 
                                store_id INTEGER PRIMARY KEY, 
                                store_name VARCHAR, 
                                location VARCHAR)''')

                for row in CSV_reader:  #Insert new values for each row in CSV
                    cur.execute(
                        '''INSERT OR IGNORE INTO Stores (                                                                                  
                                    store_id, 
                                    store_name, 
                                    location) 
                                    VALUES (?, ?, ?)''', row)
                tkMessageBox.showinfo(
                    "Success!",
                    "Successfully Updated the Database")  #Display confirmation
                self.imp_store_entry.delete(0, END)  #Clear import entry

        else:
            if (next(CSV_reader)[0][0:6] !=
                    "Member"):  #Checks CSV for proper member headings
                tkMessageBox.showinfo(
                    "CSV Type Error",
                    "Please Import a CSV file formated for member data.")
                self.CSV_file.close(
                )  #If not proper headings close file and display message
                return
            else:  #Create table Members
                cur.execute('''CREATE TABLE IF NOT EXISTS Members (     
                                member_id INTEGER PRIMARY KEY, 
                                last_name VARCHAR, 
                                first_name VARCHAR, 
                                street VARCHAR, 
                                city VARCHAR, 
                                state VARCHAR, 
                                zip VARCHAR, 
                                phone VARCHAR, 
                                favorite_store INTEGER, 
                                date_joined DATE, 
                                dues_paid DATE, 
                                FOREIGN KEY(favorite_store) 
                                REFERENCES Stores(store_id))''')

                for row in CSV_reader:  #Insert new values for each row in CSV
                    cur.execute(
                        '''INSERT OR IGNORE INTO Members (
                                        member_id, 
                                        last_name, 
                                        first_name, 
                                        street, 
                                        city , 
                                        state, 
                                        zip, 
                                        phone, 
                                        favorite_store, 
                                        date_joined, 
                                        dues_paid) 
                                        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
                        row)
                tkMessageBox.showinfo("Success!",
                                      "Successfully Updated the Database")
                self.imp_member_entry.delete(0, END)

        self.CSV_file.close()  #Close CSV file
        conn.commit()  #Commit DB changes
        conn.close()  #Close DB Connection

        return None

    def generate_member_column_names(
            self
    ):  #Class utility method for adding member column headers to tree

        all_member_column_names = ("Member ID", "Last Name", "First Name",
                                   "Street", "City", "State", "Zip Code",
                                   "Phone", "Favorite Store", "Date Joined",
                                   "Dues Paid")

        for index, columns in enumerate(self.table_tree["columns"]
                                        ):  #For loop to add all column headers
            self.table_tree.heading(columns,
                                    text=all_member_column_names[index])

        return None

    def select_all_members(
        self
    ):  #Class method for View All Members Buttons and outputs new data to tree

        cur = self.create_DB_connection().cursor(
        )  #Calls for DB connection to open
        cur.execute("SELECT * FROM Members ORDER BY last_name ASC"
                    )  #SQL Statement to SELECT all members and their data.

        rows = cur.fetchall()  #Fetches data into rows

        self.table_tree.delete(*self.table_tree.get_children()
                               )  #Deletes old data in tree if present

        self.generate_member_column_names(
        )  #Call utility to generate column member headers

        for index, row in enumerate(
                rows):  #Inserts sql data into tree rows for viewing
            self.table_tree.insert('', index, values=(row))

        self.create_DB_connection().close()  #Close DB Connection
        return None

    def select_paid_dues_month(
        self, zip, month
    ):  #Class method for Current Paid User Button and outputs new data to tree

        month = month + 1  #Add 1 to month index count since it range is 0-11 and months are 1-12
        if (month < 10):
            self.month_string = "0" + str(month)

        cur = self.create_DB_connection().cursor(
        )  #Calls for DB connection to open

        if (month not in range(1, 12)):  #If no month selected display message
            tkMessageBox.showinfo("Error", "No Month Selected")
            return

        if (len(zip) != 5):  #If zip not 5 digits display message
            tkMessageBox.showinfo("Error", "Enter a Zip Code")
            return

        try:
            cur.execute("SELECT * FROM Members WHERE zip = " + zip +
                        " AND strftime('%m',dues_paid) = '" +
                        self.month_string +
                        "'")  #If zip is numeric execute Select Statement
        except Error as e:  #Catches error if zip not numeric
            tkMessageBox.showinfo("Error", "Enter a Zip Code")
            return

        rows = cur.fetchall()

        self.table_tree.delete(*self.table_tree.get_children()
                               )  #Deletes old data in tree if present

        self.generate_member_column_names(
        )  #Call utility to generate column member headers

        for index, row in enumerate(
                rows):  #Inserts sql data into tree rows for viewing
            self.table_tree.insert('', index, values=(row))

        self.create_DB_connection().close()  #Close DB Connection
        return None

    def select_users_joined_since(
        self, state, the_date
    ):  #Class method for Current Paid User Button and outputs new data to tree

        cur = self.create_DB_connection().cursor(
        )  #Calls for DB connection to open

        if state == "":  #if no state selected display message
            tkMessageBox.showinfo("Error", "No State Selected")
            return

        try:  #Checks date format YYYY-MM-DD
            datetime.datetime.strptime(the_date, '%Y-%m-%d')
        except ValueError:  #Catches invalid date format
            tkMessageBox.showinfo(
                "Error", "Incorrect data format, should be YYYY-MM-DD")
            return

        cur.execute(
            "SELECT * FROM Members WHERE state = '" + state +
            "' AND date_joined > '" + the_date + "'"
        )  #Execute Select members Where state and date are what user selected.

        rows = cur.fetchall()

        self.table_tree.delete(*self.table_tree.get_children()
                               )  #Deletes old data in tree if present

        self.generate_member_column_names(
        )  #Call utility to generate column member headers

        for index, row in enumerate(
                rows):  #Inserts sql data into tree rows for viewing
            self.table_tree.insert('', index, values=(row))

        self.create_DB_connection().close()  #Close DB Connection
        return None

    def select_users_love_Tot_Wine(
        self
    ):  #Class method for Users That Love Tot Wine and outputs new data to tree

        cur = self.create_DB_connection().cursor(
        )  #Calls for DB connection to open
        #Execute Select Where, and Join on foreign key values.
        cur.execute('''SELECT Members.last_name,
                            Members.first_name, 
                            Stores.store_name 
                            FROM Members 
                            JOIN Stores 
                            ON Members.favorite_store = Stores.store_id 
                            WHERE favorite_store = '3' ''')

        rows = cur.fetchall()

        self.table_tree.delete(*self.table_tree.get_children()
                               )  #Deletes old data in tree if present

        all_member_column_names = ("Last Name", "First Name", "Favorite Store",
                                   "", "", "", "", "", "", "", "")

        for index, columns in enumerate(
                self.table_tree["columns"]
        ):  #Generate *custom* column member headers
            self.table_tree.heading(columns,
                                    text=all_member_column_names[index])

        for index, row in enumerate(
                rows):  #Inserts sql data into tree rows for viewing
            self.table_tree.insert('', index, values=(row))

        self.create_DB_connection().close()  #Close DB Connection
        return None

    def select_users_fav_stores(
        self
    ):  #Class method for Users Favorite Stores and outputs new data to tree

        cur = self.create_DB_connection().cursor(
        )  #Calls for DB connection to open
        #Execute Select Where, and Join on foreign key values.
        cur.execute('''SELECT Members.last_name,
                    Members.first_name, 
                    Stores.store_name, 
                    Stores.location
                    FROM Members 
                    JOIN Stores 
                    ON Members.favorite_store = Stores.store_id ''')

        rows = cur.fetchall()

        self.table_tree.delete(*self.table_tree.get_children()
                               )  #Deletes old data in tree if present

        all_member_column_names = ("Last Name", "First Name", "Favorite Store",
                                   "Location", "", "", "", "", "", "", "")

        for index, columns in enumerate(
                self.table_tree["columns"]
        ):  #Generate *custom* column member headers
            self.table_tree.heading(columns,
                                    text=all_member_column_names[index])

        for index, row in enumerate(
                rows):  #Inserts sql data into tree rows for viewing
            self.table_tree.insert('', index, values=(row))

        self.create_DB_connection().close()  #Close DB Connection
        return None
Beispiel #20
0
class Window(Frame):
    def __init__(self, parent, window_type):
        Frame.__init__(self, parent, msg=None)

        self.parent = parent
        if window_type == "main":
            self.initUI_main()
        if window_type == "err":
            self.initUI_err()

    def initUI_main(self):
        self.parent.title("Personal Helper")
        self.pack(fill=BOTH, expand=True)

        self.columnconfigure(0, weight=1)
        self.columnconfigure(7, weight=1)
        self.columnconfigure(5, pad=10)
        self.columnconfigure(3, pad=10)
        self.columnconfigure(1, weight=3)
        self.rowconfigure(0, weight=0)
        self.rowconfigure(5, weight=1)
        self.rowconfigure(5, pad=7)
        self.rowconfigure(6, pad=6)

        lbl = Label(self, text="Windows")
        lbl.grid(sticky=W + N, pady=4, padx=5)

        check_box = {"work": IntVar(), "boost": IntVar()}

        check1 = Checkbutton(self,
                             text="work-Mode",
                             variable=check_box["work"])
        check1.grid(row=7, column=0)

        check2 = Checkbutton(self,
                             text="boost games",
                             variable=check_box["boost"])
        check2.grid(row=7, column=1)

        ### old version, may be used again later
        area = Treeview(self)
        area['show'] = 'headings'
        area["columns"] = ("one", "two", "three", "four")
        area.column("one", width=10)
        area.column("two", width=10)
        area.column("three", width=10)
        area.column("four", width=10)
        area.heading("one", text="process name")
        area.heading("two", text="Priority")
        area.heading("three", text="PID")
        area.heading("four", text="Usage")
        ###about this part
        #area.grid(row=1, column=0, columnspan=2, rowspan=4, padx=5, sticky=E + W + S + N)
        #######

        #comboboxes and relevant buttons

        self.block_drop = Combobox(self, postcommand=self.update_blocked)
        self.block_drop['values'] = working_bans
        self.block_drop.current(0)
        self.block_drop.grid(row=1, column=1, pady=1)
        self.entry = Entry(self)
        self.entry.insert(0, "enter to block")
        self.entry.grid(row=1, column=4)

        block_btn_remv = Button(self,
                                text="Remove",
                                command=lambda: remove_from_list(
                                    working_bans, self.block_drop.get()))
        block_btn_remv.grid(row=1, column=2)

        block_btn_add = Button(
            self,
            text="Add",
            command=lambda: add_to_list(working_bans, self.entry.get(), self.
                                        entry, defults["block"]))
        block_btn_add.grid(row=1, column=3)

        ############
        #boosted combo
        self.boost_drop = Combobox(self, postcommand=self.update_boosted)
        self.boost_drop['values'] = boosted
        self.boost_drop.current(0)
        self.boost_drop.grid(row=2, column=1, pady=1)
        self.entry2 = Entry(self)
        self.entry2.insert(0, "enter to buff priority")
        self.entry2.grid(row=2, column=4, pady=4)

        boost_btn_remv = Button(
            self,
            text="Remove",
            command=lambda: remove_from_list(boosted, self.boost_drop.get()))
        boost_btn_remv.grid(row=2, column=2)

        boost_btn_add = Button(
            self,
            text="Add",
            command=lambda: add_to_list(boosted, self.entry2.get(), self.
                                        entry2, defults["boost"]))
        boost_btn_add.grid(row=2, column=3)

        #########################################

        #degraded combo
        self.deg_drop = Combobox(self, postcommand=self.update_degraded)
        self.deg_drop['values'] = degraded
        self.deg_drop.current(0)
        self.deg_drop.grid(row=3, column=1, pady=1)
        self.entry3 = Entry(self)
        self.entry3.insert(0, "enter to lower priority")
        self.entry3.grid(row=3, column=4, pady=4)

        deg_btn_remv = Button(
            self,
            text="Remove",
            command=lambda: remove_from_list(degraded, self.deg_drop.get()))
        deg_btn_remv.grid(row=3, column=2)

        deg_btn_add = Button(
            self,
            text="Add",
            command=lambda: add_to_list(degraded, self.entry3.get(), self.
                                        entry3, defults["degrade"]))
        deg_btn_add.grid(row=3, column=3)

        ####
        #music combo

        self.music_drop = Combobox(self, postcommand=self.update_music)
        self.music_drop['values'] = music_list.keys()
        self.music_drop.current(0)
        self.music_drop.grid(row=4, column=1, pady=1)
        self.entry4 = Entry(self)
        self.entry4.insert(0, "enter url")
        self.entry4.grid(row=4, column=5)
        self.entry5 = Entry(self)
        self.entry5.insert(0, "enter song's name")
        self.entry5.grid(row=4, column=4)

        music_btn_remv = Button(self,
                                text="Remove",
                                command=lambda: remove_from_list(
                                    music_list, self.music_drop.get()))
        music_btn_remv.grid(row=4, column=2)

        music_btn_add = Button(
            self,
            text="Add",
            command=lambda: add_music(music_list, self.entry5.get(
            ), self.entry4.get(), self.entry5, defults["music"]))
        music_btn_add.grid(row=4, column=3)

        abtn = Button(self, text="Activate", command=scan_computer_programs)
        abtn.grid(row=1, column=5, sticky=E)

        sbtn = Button(self, text="Stop", command=lambda: stop_running())
        sbtn.grid(row=2, column=5, pady=6, sticky=E)

        cbtn = Button(self, text="Close", command=quit)
        cbtn.grid(row=3, column=5, pady=4, sticky=E)

        hbtn = Button(self, text="Save", command=save_lists)
        hbtn.grid(row=6, column=0, sticky=W)

        tsbtn = Button(self,
                       text="TaskManager",
                       command=lambda: os.system("TaskManager\pyProcMon.py"))
        tsbtn.grid(row=3, column=5, sticky=E)

        obtn = Button(
            self,
            text="start",
            command=lambda: call_running(area, threads["procs"], check_box))
        obtn.grid(row=6, column=5, sticky=E)

    def initUI_err(self):
        self.parent.title("Personal Helper")
        self.pack(fill=BOTH, expand=True)

    def update_boosted(self):
        self.boost_drop['values'] = boosted
        try:
            self.boost_drop.current(0)
        except:
            self.boost_drop.set("empty")

    def update_blocked(self):
        self.block_drop['values'] = working_bans
        try:
            self.block_drop.current(0)
        except:
            self.block_drop.set("empty")

    def update_degraded(self):
        self.deg_drop['values'] = degraded
        try:
            self.block_drop.current(0)
        except:
            self.block_drop.set("empty")

    def update_music(self):
        self.music_drop['values'] = music_list.keys()
        try:
            self.block_drop.current(0)
        except:
            self.block_drop.set("empty")
Beispiel #21
0
class LoggerDialog(Toplevel):
    def __init__(self, master, customers, payments, refresh):
        Toplevel.__init__(self,master)

        self.root = master
        self.refresh = refresh

        self.title("Check In")
        self.iconname = "Check In"

        self.name = StringVar() # variable for customer
        self.customers = customers # customers object
        self.payments = payments
        self.names = []
        self.workout = StringVar()
        self.workouts = []
        self.workouts_form = []
        self.date = StringVar()
        self.date.set(strftime("%m/%d/%Y"))
        self.refresh_time = 15 # in minutes
        self.output = '' # for the output label at the bottom
        self.schedule = Schedule()

        self.logger = Logger() #throws IOError if file is open

        inf = Frame(self)
        inf.pack(padx=10,pady=10,side='top')
        Label(inf, text="Name:").grid(row=0,column=0,sticky=E,ipady=2,pady=2,padx=10)
        Label(inf, text='Date:').grid(row=1,column=0,sticky=E,ipady=2,pady=2,padx=10)
        Label(inf, text="Workout:").grid(row=2,column=0,sticky=E,ipady=2,pady=2,padx=10)

        self.name_cb = Combobox(inf, textvariable=self.name, width=30,
                                values=self.names)
        self.name_cb.grid(row=0,column=1,sticky=W,columnspan=2)
        self.date_ent = Entry(inf, textvariable=self.date)
        self.date_ent.grid(row=1,column=1,sticky=W)
        self.date_ent.bind('<FocusOut>', self.update_workouts)
        Button(inf,text='Edit', command=self.enable_date_ent).grid(row=1,column=2,sticky=E)
        self.workout_cb = Combobox(inf, textvariable=self.workout, width=30,
                                   values=self.workouts_form,state='readonly')
        self.workout_cb.grid(row=2,column=1,sticky=W,columnspan=2)

        self.log_btn=Button(inf,text="Log Workout",command=self.log,width=12)
        self.log_btn.grid(row=3,column=1,columnspan=2,pady=4,sticky='ew')
        
        stf = Frame(self)
        stf.pack(padx=10,pady=10,fill='x',side='top')
        self.scrolled_text = ScrolledText(stf,height=15,width=50,wrap='word',state='disabled')
        self.scrolled_text.pack(expand=True,fill='both')

        self.update_workouts()
        self.update_names()

        self.bind('<Return>',self.log)
        self.name_cb.focus_set()  # set the focus here when created

        #disable the date field
        self.disable_date_ent()

        #start time caller
        self.time_caller()

    def output_text(self,outstr):
        self.scrolled_text['state'] = 'normal'
        self.scrolled_text.insert('end',outstr)
        self.scrolled_text.see('end')
        self.scrolled_text['state'] = 'disabled'

    def log(self, e=None):
        #check to see if name is blank
        logged = False
        if self.name.get() == '':
            self.output_text("! - Please select your name.\n")
        elif self.workout.get() not in self.workouts_form:
            self.output_text("! - Select valid workout.\n")
        elif self.name.get() not in self.names: # new customer
            self.new_customer_error()
        else: # log the workout
            name = self.name.get().split(' ',2)
            (line, r) = self.customers.find(name[2],name[0],name[1])
            name_str = str(self.name.get())
            date = datetime.strptime(str(self.date.get()),'%m/%d/%Y')

            if not line:
                self.output_text("!! - No record: " + self.name.get() + ".\n")

            while (not logged):
                try:
                    self.logger.log(self.workouts[self.workout_cb.current()][0],
                                    self.workouts[self.workout_cb.current()][1],
                                    name_str, day=date)
                    logged = True
                except IOError:
                    showerror("Error writting to file", "Please close " + self.logger.filename + " and press OK.")


            if logged:
                self.output_text(self.name.get() + " - " + line[3] + "\n")
                logged_payment = False
                while(not logged_payment):
                    try:
                        if line[3] == 'Monthly':
                            payment_due = self.payments.next_payment_due(name_str)
                            if payment_due < datetime.today():
                                self.output_text("$ - Please pay your monthly dues.\n")
                            else:
                                self.output_text("$ - Next payment due: " + payment_due.strftime("%B %d, %Y\n"))
                        elif line[3] == 'Punch Card':
                            punch = self.payments.punch(name_str)
                            if punch == 0:
                                self.output_text("$ - Last punch on card, please purchase another.\n")
                            elif not punch:
                                self.output_text("$ - Please purchase another punch card.\n")
                            else:
                                self.output_text("$ - You have " + str(punch) + " remaining workouts on your card.\n")
                        elif line[3] == 'Drop In':
                            self.payments.drop_in(name_str, date)
                            self.output_text("$ - Drop In payment logged.\n")
                        logged_payment = True
                    except IOError:
                        # this is bad, you logged a workout and you failed to log payment
                        showerror("Error writting to file", "Please close " + self.payments.filename + " and press OK.")
                    else:
                        #exception not raised
                        try: #accessing log file here
                            workout_count = str(workouts_this_month(name_str,self.logger.filename,date.strftime("%B"))) 
                            self.output_text("Workouts you've completed this month: " + workout_count + "\n")
                        except IOError:
                            showerror("Error reading from file", "Please close " + self.logger.filename + " and press OK.")

                self.refresh()
            
    def new_customer_error(self):
        self.ncd = NewCustomerDialog(self,self.customers,self.refresh)
        if askquestion(title="New Customer?",
            message="Add new customer: " + self.name.get(),
            parent = self) == 'yes':

            temp = self.name.get().split(' ')
            self.ncd.fname.set(temp[0])
            if len(temp) == 2:
                self.ncd.lname.set(temp[1])
            elif len(temp) == 3:
                self.ncd.mname.set(temp[1])
                self.ncd.lname.set(temp[2])
            elif len(temp) > 3:
                self.ncd.mname.set(temp[1])
                self.ncd.lname.set(' '.join(temp[2:4]))

            self.ncd.show()

        if self.ncd.new_customer_name:
            self.add_name(self.ncd.new_customer_name)
            self.output_text("+ - " + self.ncd.new_customer_name + " added.\n")

    def disable_date_ent(self, e=None):
        self.date_ent['state'] = 'disabled'

    def enable_date_ent(self, e=None):
        self.date_ent['state'] = 'normal'
        
    def time_caller(self):
        #updates every 15 min automatically
        msec = self.refresh_time * 6000

        self.update_time_now() #update time to current time
        self.set_workout_now()
        self.update_workouts() #update the workouts
        
        self.after(msec, self.time_caller) #call again

    def update_time_now(self):
        self.enable_date_ent()
        self.date.set(strftime("%m/%d/%Y"))

    def set_workout_now(self):
        #set workout field
        if len(self.workouts) == 0:
            self.disable_date_ent()
            return #no workouts
        index = 0
        now = datetime.today()
        for i, workout in enumerate(self.workouts):
            test = datetime.combine(date.today(),workout[0])
            if now < (test - timedelta(minutes=15)):
                index = i
                break
        self.workout_cb.current(index)
        self.disable_date_ent()
            
    def update_workouts(self, e=None):
        try:
            self.populate_workouts()
            self.workout_cb['values'] = self.workouts_form
        except ValueError:
            self.workout.set(' Enter Valid Date ')
        if len(self.workouts) > 0 and e:
            self.workout_cb.current(0)
            
    def populate_workouts(self):
        today = datetime.strptime(str(self.date.get()), "%m/%d/%Y") #get date
        dow = self.schedule.weekday_to_str(today.weekday()) #get dow string

        self.workouts = self.schedule.get_wkday(dow)
        self.workouts_form = []
        for w in self.workouts:
            self.workouts_form.append(w[0].strftime("%H:%M") + ' - ' + w[1])
        if len(self.workouts) == 0:
            self.workout.set(' No workouts today ')

    def update_names(self):
        self.populate_names()
        if len(self.names) == 0: self.names = ['']
        self.name_cb['values'] = self.names
        self.name_cb.set(' ')

    def add_name(self, name):
        self.names.append(name)
        split_names = [x.split(' ') for x in self.names]
        split_names.sort(key = lambda x: ' '.join([x[2],x[0],x[1]]))
        self.names = [' '.join(x) for x in split_names]
        self.name_cb['values'] = self.names
        self.name.set(name)
        
    def populate_names(self):
        try:
            clist = self.customers.get_list()
        except IOError:
            self.output_text("! - " + self.customers.filename + " open in another application.\n")
            return
        clist.sort(key = lambda x: ', '.join(x[0:3]).lower())
        self.names = []
        for line in clist:
            self.names.append(' '.join([line[1],line[2],line[0]]))

    def find_line(self, name):
        [fname, mname, lname] = name.split(' ')
        try:
            return self.customers.find(lname, fname, mname)
        except IOError:
            self.output_text("! - " + self.customers.filename + " open in another application.\n")
            return None
Beispiel #22
0
mframe = Checkbutton(root, text="M-Frame", command=None, variable=m)
mframe.grid(row=1,column=3)
spin = Checkbutton(root, text="Spinning Discs", command=None, variable=s)
spin.grid(row=2,column=3)
pink = Checkbutton(root, text="Display M (pink ball)", command=None, variable=p)
pink.grid(row=3,column=3)
vector = Checkbutton(root, text="Display center of mass vector", command=None, variable=v)
vector.grid(row=4,column=3)

na_cb = Checkbutton(root, text="No animation", command=None, variable=no_anim)
na_cb.grid(row=5,column=1)


mu_box = Combobox(root, state="readonly")
mu_box['values'] = tuple(str(i) for i in arange(0,5,0.1))
mu_box.grid(row=1, column=1)
mu_box.current(10)

wmu_box = Combobox(root, state="readonly")
wmu_box['values'] = tuple(str(i) for i in arange(0,5,0.1))
wmu_box.grid(row=2, column=1)
wmu_box.current(1)

amp_box = Combobox(root, state="readonly")
amp_box['values'] = tuple(str(i) for i in arange(0.25,5,0.25))
amp_box.grid(row=3, column=1)
amp_box.current(1)

N_box = Combobox(root, state="readonly")
N_box['values'] = tuple(str(i) for i in arange(1,60,1))
N_box.grid(row=4, column=1)
class Application(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.root = master
        self.root.title('get_app_version (v1.0.0,qing.guo)')
        self.root.geometry('700x410')
        self.root.resizable(0, 0)  # 禁止调整窗口大小
        self.root.protocol("WM_DELETE_WINDOW", self.close)
        self.root.iconbitmap(get_path('get_app.ico'))

    def creatWidgets(self):
        frame_left = Frame(self.root, width=380, height=410, bg='#C1CDCD')
        frame_right = Frame(self.root, width=320, height=410, bg='#C1CDCD')

        frame_left.grid_propagate(0)
        frame_right.propagate(0)
        frame_right.grid_propagate(0)

        frame_left.grid(row=0, column=0)
        frame_right.grid(row=0, column=1)

        self.v1 = StringVar()
        self.v2 = StringVar()
        self.v3 = StringVar()
        self.v4 = StringVar()
        self.v5 = StringVar()
        self.v4.set(get_app.result_path)

        web_list = [u'应用宝', u'...', u'...']

        Label(frame_left, text=u"选择网站类型:", bg='#C1CDCD').grid(row=0,
                                                              column=0,
                                                              pady=20,
                                                              padx=5)
        self.cb1 = Combobox(frame_left,
                            width=30,
                            textvariable=self.v1,
                            values=web_list)
        self.cb1.grid(row=0, column=1, ipady=1, padx=5, sticky=W)
        self.cb1.current(0)

        Label(frame_left, text=u"设置基准日期 :", bg='#C1CDCD').grid(row=1,
                                                               column=0,
                                                               pady=30,
                                                               padx=5)
        Entry(frame_left, width=33, textvariable=self.v2).grid(row=1,
                                                               column=1,
                                                               padx=2,
                                                               pady=30,
                                                               ipady=2,
                                                               sticky=W)

        Button(frame_left,
               text=u"选择配置文件 :",
               command=self.open_file1,
               bg='#C1CDCD').grid(row=2, column=0, pady=30, padx=5)
        Entry(frame_left, width=33, textvariable=self.v3).grid(row=2,
                                                               column=1,
                                                               padx=2,
                                                               pady=30,
                                                               ipady=2,
                                                               sticky=W)

        self.b1 = Button(frame_left,
                         text=u"开始获取",
                         command=self.start_test,
                         bg='#C1CDCD')
        self.b1.grid(row=3, column=0, padx=25, pady=30)

        self.b2 = Button(frame_left,
                         text=u"停止获取",
                         command=self.end_test,
                         bg='#C1CDCD')
        self.b2.grid(row=3, column=1, padx=25, pady=30)

        Button(frame_left, text=u"查看结果", command=self.open_file2,
               bg='#C1CDCD').grid(row=4, column=0, padx=3, pady=15)
        Entry(frame_left, width=34, textvariable=self.v4).grid(row=4,
                                                               column=1,
                                                               ipady=1,
                                                               padx=3,
                                                               pady=15)

        self.v2.set(get_app.current_date)

        #Scrollbar
        scrollbar = Scrollbar(frame_right, bg='#C1CDCD')
        scrollbar.pack(side=RIGHT, fill=Y)
        self.text_msglist = Text(frame_right,
                                 yscrollcommand=scrollbar.set,
                                 bg='#C1CDCD')
        self.text_msglist.pack(side=RIGHT, fill=BOTH)
        scrollbar['command'] = self.text_msglist.yview
        self.text_msglist.tag_config('green', foreground='#008B00')
        self.text_msglist.tag_config('blue', foreground='#0000FF')
        self.text_msglist.tag_config('red', foreground='#FF3030')
        self.text_msglist.tag_config('purple', foreground='#CD00CD')
        text_message1 = u"1.选择数据APK来源网站,目前支持应用宝\n"
        self.text_msglist.insert(END, text_message1, 'green')
        text_message2 = u"2.设置基准日期,检测应用在基准日期之后的更新情况,格式示例: 2017-05-12\n"
        self.text_msglist.insert(END, text_message2, 'green')
        text_message3 = u"3.选择配置文件路径,不同网站配置文件可能不同\n"
        self.text_msglist.insert(END, text_message3, 'green')

    def start_test(self):

        get_app.Get_App.set_flag('True')
        web_type = self.v1.get()
        base_date = self.v2.get()
        config_path = self.v3.get()

        if base_date == '' or base_date.isspace():
            self.text_msglist.insert(END, 'please input base date\n', 'red')
            self.b1.config(state=NORMAL)
            return -1
        if config_path == '' or config_path.isspace():
            self.text_msglist.insert(END, 'please choose config path\n', 'red')
            self.b1.config(state=NORMAL)
            return -1

        self.b1.config(state=DISABLED)
        self.b2.config(state=NORMAL)
        thread1 = get_app.Get_App('get_app', app, web_type, base_date,
                                  config_path)
        thread1.setDaemon(True)
        thread1.start()

    def end_test(self):
        self.b1.config(state=NORMAL)
        get_app.Get_App.set_flag('False')
        self.b2.config(state=DISABLED)
        self.text_msglist.insert(END, 'click end test button,end_test\n',
                                 'blue')

    def open_file1(self):
        filename = tkFileDialog.askopenfilename(initialdir=get_app.log_path)
        print filename
        if filename == '':
            return 0
        self.v3.set(filename)

    def open_file2(self):
        filename = tkFileDialog.askopenfilename(initialdir=get_app.result_path)
        if filename == '':
            return 0
        os.startfile(filename)

    def close(self):

        if get_app.flag:
            result = tkMessageBox.askokcancel(title=u"警告",
                                              message=u"测试还未完成,确定要退出程序?")
        else:
            result = tkMessageBox.askokcancel(title=u"退出", message=u"确定退出程序?")
        if result:
            self.root.quit()
            self.root.destroy()
Beispiel #24
0
    radiobutton0.pack(side=LEFT)
    
    radiobutton1 = Radiobutton(column, variable = variable, value="value1", text="Selection 1")
    radiobutton0.fieldname = "radiobutton"
    radiobutton1.pack(side=LEFT)
    
    Label(form, text="Text area:").grid(row=6,column=0, sticky=E, pady=(8,0))

    text = Text(form, height=5)
    text.fieldname = "text"
    text.grid(row=7,column=1, sticky =E+W)

    Label(form, text="Listbox:").grid(row=8,column=0, sticky=E, pady=(8,0))

    listbox = Listbox(form)
    listbox.fieldname = "listbox"
    listbox.grid(row=9,column=1, sticky=W)

    for item in ["one", "two", "three", "four"]:
        listbox.insert("end", item)

    Label(form, text="Combobox:").grid(row=10,column=0, sticky=E, pady=(8,0))

    combobox = Combobox(form, values = ('X', 'Y', 'Z'), width=5)
    combobox.fieldname = "combobox"
    combobox.grid(row=11,column=1, sticky=W)

    Submit_Button(form, text="Submit").grid(row=12,column=1,sticky =E)
    
    root.mainloop()
class SerialTerm(Tk):
    def __init__(self, serial_queue, serial_thread):
        Tk.__init__(self)
        self.title("Foss SerialTerminal for Multi")
        self.serial_queue = serial_queue
        self.serial_thread  = serial_thread

        menu_bar = Menu(self)

        file_menu = Menu(menu_bar, tearoff=0)
        file_menu.add_command(label="Save as...")
        file_menu.add_command(label="Exit", command=self.quit)
        menu_bar.add_cascade(label="File", menu=file_menu)

        self.parser_menu = Menu(menu_bar, tearoff=0)
        self.serial_parser_enabled = IntVar()
        self.serial_parser_enabled.set(1)
        self.parser_menu.add_checkbutton(
            label="Serial parser enabled",
            variable=self.serial_parser_enabled
        )
        self.parser_menu.add_command(label="Edit parser rules", command=self.open_conditionals_editor)
        menu_bar.add_cascade(label="Parser", menu=self.parser_menu)


        self.config(menu=menu_bar)
        main_frame = Frame(self)
        output_frame = Frame(main_frame)
        input_frame = Frame(main_frame)

        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=1)
        main_frame.grid(column=0, row=0, padx=3, pady=3, sticky=(N, W, E, S))
        main_frame.grid_columnconfigure(0, weight=1)
        main_frame.grid_rowconfigure(0, weight=1)



        output_text_vertical_scrollbar = Scrollbar(output_frame, orient=VERTICAL)
        output_text_horizontal_scrollbar = Scrollbar(output_frame, orient=HORIZONTAL)
        self.output_text = Text(
            output_frame,
            wrap=NONE,
            xscrollcommand=output_text_horizontal_scrollbar.set,
            yscrollcommand=output_text_vertical_scrollbar.set
        )
        self.output_text.configure(bg="white", state="disabled")
        self.output_text.grid(column=0, row=0, sticky=(N, S, E, W))
        output_text_vertical_scrollbar.grid(column=1, row=0, sticky=(N, S))
        output_text_vertical_scrollbar.config(command=self.output_text.yview)
        output_text_horizontal_scrollbar.grid(column=0, row=1, sticky=(E, W))
        output_text_horizontal_scrollbar.config(command=self.output_text.xview)

        output_frame.grid(column=0, row=0, sticky=(N, S, E, W))
        output_frame.grid_columnconfigure(0, weight=1)
        output_frame.grid_rowconfigure(0, weight=1)


        self.input_string = StringVar()
        input_entry = Entry(input_frame, textvariable=self.input_string)
        input_entry.grid(column=0, row=0, sticky=(E, W))

        line_end_selection_items = ["CR&NL", "NL", "CR", "None"]
        self.line_end_selection = Combobox(
            input_frame,
            values=line_end_selection_items,
            state="readonly",
            width=len(max(line_end_selection_items, key=len))
        )
        self.line_end_selection.current(newindex=0)
        self.line_end_selection.grid(column=1, row=0)

        serial_port_names = ["Port"]
        serial_port_names.extend([s.name for s in serial.tools.list_ports.comports()])
        self.port_name_selection = Combobox(
            input_frame,
            values = serial_port_names,
            state="readonly",
            width=len(max(serial_port_names, key=len))
        )
        self.port_name_selection.current(newindex=0)
        self.port_name_selection_index = 0
        self.port_name_selection.grid(column=2, row=0)


        baudrates = [
            "300 baud",
            "1200 baud",
            "2400 baud",
            "4800 baud",
            "9600 baud",
            "19200 baud",
            "38400 baud",
            "57600 baud",
            "74880 baud",
            "115200 baud",
            "230400 baud",
            "250000 baud"
        ]

        self.baudrate_selection = Combobox(
            input_frame,
            values = baudrates,
            state="readonly",
            width=len(max(baudrates, key=len))
        )
        self.baudrate_selection.current(newindex=9)
        self.baudrate_selection.grid(column=3, row=0)

        input_frame.grid(column=0, row=1, sticky=(E, W))
        input_frame.grid_columnconfigure(0, weight=1)

        self.port_name_selection.bind("<<ComboboxSelected>>", self.port_name_selected)
        self.baudrate_selection.bind("<<ComboboxSelected>>", self.baudrate_selected)

        self.after(100, self.serial_tick)

        # TODO Load from pickle file.
        self.conditionals = [
            ["Enabled", "line.startswith(\"Hello\")", "Python", "print 'Fooobaaaaar. Jibb.'"],
            ["Enabled", "line.startswith(\"Foo\")", "Debugger", "halt\nreset"],
        ]
        self.counter = 0


    def open_conditionals_editor(self):
        self.conditionals_editor = Toplevel(master=self)
        self.parser_menu.entryconfig("Edit parser rules", state="disabled")
        ConditionalsEditor(self.conditionals_editor, self.conditionals, self.closing_conditionals_editor)

    def closing_conditionals_editor(self):
        self.parser_menu.entryconfig("Edit parser rules", state="normal")


    def update_output_text(self, line):
        self.output_text.configure(state="normal")
        self.output_text.insert(END, line)
        self.output_text.configure(state="disabled")
        self.output_text.see(END)

    def evaluate_conditionals(self, line):
        if self.serial_parser_enabled.get() == 1:
            for condition in self.conditionals:
                if condition[0] == "Enabled":
                    if eval(condition[1]):
                        if condition[2] == "Python":
                            exec(condition[3], locals())
                        elif condition[2] == "Debugger":
                            print "Send to debugger: %s"%condition[3]



    def serial_tick(self):
        while True:
            try:
                line = self.serial_queue.get_nowait()
                self.update_output_text(line)
                self.evaluate_conditionals(line)
            except Queue.Empty:
                break
        self.after(100, self.serial_tick)

    def port_name_selected(self, event):
        port_name = event.widget.selection_get()
        if port_name == "Port":
            event.widget.current(newindex=self.port_name_selection_index)
            return
        self.port_name_selection_index = event.widget.current()
        self.serial_thread.set_port(port_name)

    def baudrate_selected(self, event):
        self.serial_thread.set_baudrate(event.widget.selection_get())
    def __init__(self, parentFrm):
        #Create main frame
        self.cmdFrm = Frame(parentFrm, borderwidth=5, relief=RAISED)
        self.cmdFrm.grid(column=0, row=0)

        #Add rules thread controls
        tmpLbl = Label(self.cmdFrm, text="Rules Thread")
        tmpLbl.grid(column=0, row=0)
        TkCmdFrm.comboVar.append(StringVar())
        TkCmdFrm.comboVar[TkCmdFrm.RULES_THREAD_IDX].set("Run")
        TkCmdFrm.threadRun.append(True)
        TkCmdFrm.toggleState.append(False)
        TkCmdFrm.threadSendStep.append(False)
        tmpCB = Combobox(
            self.cmdFrm,
            textvariable=TkCmdFrm.comboVar[TkCmdFrm.RULES_THREAD_IDX],
            width=11,
            state="readonly")
        tmpCB["values"] = ("Run", "Single Step")
        tmpCB.grid(column=0, row=1, padx=8, pady=8)
        TkCmdFrm.comboVar[TkCmdFrm.RULES_THREAD_IDX].trace(
            "w",
            lambda name, index, op, tmp=TkCmdFrm.RULES_THREAD_IDX: self.
            comboboxcallback(tmp))
        tmpBtn = Btn(
            self.cmdFrm,
            text="Run",
            command=lambda tmp=TkCmdFrm.RULES_THREAD_IDX: self.toggle(tmp))
        tmpBtn.grid(column=0, row=2, padx=8, pady=8)
        TkCmdFrm.toggleBtn.append(tmpBtn)

        #Add comms thread controls
        tmpLbl = Label(self.cmdFrm, text="Comms Thread")
        tmpLbl.grid(column=1, row=0)
        TkCmdFrm.comboVar.append(StringVar())
        TkCmdFrm.comboVar[TkCmdFrm.COMMS_THREAD_IDX].set("Run")
        TkCmdFrm.threadRun.append(True)
        TkCmdFrm.toggleState.append(False)
        TkCmdFrm.threadSendStep.append(False)
        tmpCB = Combobox(
            self.cmdFrm,
            textvariable=TkCmdFrm.comboVar[TkCmdFrm.COMMS_THREAD_IDX],
            width=11,
            state="readonly")
        tmpCB["values"] = ("Run", "Single Step")
        tmpCB.grid(column=1, row=1, padx=8, pady=8)
        TkCmdFrm.comboVar[TkCmdFrm.COMMS_THREAD_IDX].trace(
            "w",
            lambda name, index, op, tmp=TkCmdFrm.COMMS_THREAD_IDX: self.
            comboboxcallback(tmp))
        tmpBtn = Btn(
            self.cmdFrm,
            text="Run",
            command=lambda tmp=TkCmdFrm.COMMS_THREAD_IDX: self.toggle(tmp))
        tmpBtn.grid(column=1, row=2, padx=8, pady=8)
        TkCmdFrm.toggleBtn.append(tmpBtn)

        #Add rules state status
        tmpLbl = Label(self.cmdFrm, text="Rules State:")
        tmpLbl.grid(column=2, row=1)
        TkCmdFrm.rulesStateVar = StringVar()
        TkCmdFrm.rulesStateVar.set("No State")
        tmpLbl = Label(self.cmdFrm,
                       textvariable=TkCmdFrm.rulesStateVar,
                       relief=SUNKEN,
                       width=20,
                       anchor=CENTER)
        tmpLbl.grid(column=3, row=1, padx=8, pady=8)

        #Add comms state status
        tmpLbl = Label(self.cmdFrm, text="Comms State:")
        tmpLbl.grid(column=2, row=2)
        TkCmdFrm.commsStateVar = StringVar()
        TkCmdFrm.commsStateVar.set("No State")
        tmpLbl = Label(self.cmdFrm,
                       textvariable=TkCmdFrm.commsStateVar,
                       relief=SUNKEN,
                       width=20,
                       anchor=CENTER)
        tmpLbl.grid(column=3, row=2, padx=8, pady=8)
class VideoGUI():
    def __init__(self):
        self.ENTRY_WITDH = 20
        self.button_width = 6
        self.default_dir = './'
        self.gui()

    def emptyIt(self):
        self.link_contend.set('')
        return 0

    def chooseFile(self):
        self.fname = tkFileDialog.askopenfilename(title=u"Choose File",
                                                  initialdir=(os.path.expanduser(self.default_dir)))
        self.link_contend.set(self.fname)
        return self.fname

    def startFFmpeg(self):
        self.result_link_contend.set('convert done!')
        input_path = self.link_contend.get()
        output_type = self.outType.get()
        output_path = input_path.split('.')[0] + '.' + output_type
        if output_type == 'wav':
            cmd = 'ffmpeg -i ' + input_path + ' -y ' + output_path
        elif output_type == 'mp4':
            cmd = 'ffmpeg -i ' + input_path + ' ' + output_path
        else:
            cmd = 'ffmpeg'
        os.system(cmd)
        self.result_link_contend.set(output_path)
        self.link_contend.set('convert done!')

        return 0

    def gui(self):
        self.root = Tk()
        self.root.title('video converter')
        self.entry_link = Entry(self.root, width=self.ENTRY_WITDH, state='disabled')
        self.entry_link.grid(row=0, column=0, columnspan=2)
        self.link_contend = StringVar()
        self.entry_link.config(textvariable=self.link_contend)
        self.link_contend.set('plz choose:')
        self.choose_button = Button(self.root, text='choose', width=self.button_width, command=self.chooseFile)
        self.choose_button.grid(row=1, column=0, columnspan=1)
        self.clear_button = Button(self.root, text='empty', width=self.button_width, command=self.emptyIt)
        self.clear_button.grid(row=1, column=1, columnspan=1)
        self.outType = StringVar()
        self.typeChosen = Combobox(self.root, width=self.ENTRY_WITDH, textvariable=self.outType)
        self.typeChosen['values'] = ('wav', 'mp4', 'flv', 'mp3', 'gif')
        self.typeChosen.current(3)
        self.typeChosen.grid(row=2, column=0, columnspan=2)

        self.startButton = Button(self.root, text='Start Convert', width=self.button_width * 2,
                                  command=self.startFFmpeg)
        self.startButton.grid(row=3, column=0, columnspan=2)

        self.result_link = Entry(self.root, width=self.ENTRY_WITDH, state='disabled')
        self.result_link.grid(row=4, column=0, columnspan=2)
        self.result_link_contend = StringVar()
        self.result_link.config(textvariable=self.result_link_contend)
        self.result_link_contend.set('plz hold on:')

        mainloop()
def comboBox(classList,frame,col,row):
    combobox = Combobox(frame,state='readonly')
    combobox.grid(row=row,column=col,sticky=W)
    return combobox
Beispiel #29
0
class NewCustomerDialog(Dialog):
    def __init__(self, master, customers, refresh, edit=False, class_=None, relx=0.5, rely=0.3):
        if edit:
            self.title = "Edit Customer"
        else:
            self.title = "New Customer"

        self.refresh = refresh

        Dialog.__init__(self, master, self.title,
                        class_, relx, rely)
        self.customers = customers

        self.fname = StringVar()
        self.lname = StringVar()
        self.mname = StringVar()
        self.payment = StringVar()
        self.date = StringVar()
        self.close = False

        self.payment.set("Drop In")

        self.edit = edit

        self.new_customer_name = None

    def show(self, line=None):
        '''
        allows preset values
        '''
        self.setup() #base class setup

        self.frame = Frame(self.root)

        # blow out the field every time this is created
        if not self.edit: self.date.set(date.today().strftime("%m/%d/%Y"))
        
        ### dialog content        
        Label(self.frame, text="First Name: ").grid(row=0, sticky=W, ipady=2, pady=2)
        Label(self.frame, text="Middle Initial: ").grid(row=1, sticky=W, ipady=2, pady=2)
        Label(self.frame, text="Last Name: ").grid(row=2, sticky=W, ipady=2, pady=2)
        Label(self.frame, text="Customer Type: ").grid(row=3, sticky=W, ipady=2, pady=2)
        Label(self.frame, text="Date (mm/dd/yyyy): ").grid(row=4, sticky=W, ipady=2, pady=2)

        self.fname_en = Entry(self.frame, width=30, textvariable=self.fname)
        self.mname_en = Entry(self.frame, width=30, textvariable=self.mname)
        self.lname_en = Entry(self.frame, width=30, textvariable=self.lname)
        self.payment_cb = Combobox(self.frame, textvariable=self.payment, width=27,
                                   values=("Drop In", "Punch Card", "Monthly", "Inactive"))
        self.payment_cb.set("Drop In")
        self.date_en = Entry(self.frame, width=30, textvariable=self.date)

        Frame(self.frame, width=5).grid(row=0,column=1,sticky=W)
        
        self.fname_en.grid(row=0,column=2,columnspan=2,sticky=W)
        self.mname_en.grid(row=1,column=2,columnspan=2,sticky=W)
        self.lname_en.grid(row=2,column=2,columnspan=2,sticky=W)
        self.payment_cb.grid(row=3,column=2,columnspan=2,sticky=W)
        self.date_en.grid(row=4,column=2,columnspan=2,sticky=W)
        
        ### buttons
        Button(self.frame, text='Cancel', width=10,
               command=self.wm_delete_window).grid(row=5, column=2, sticky=W, padx=10, pady=3)
        Button(self.frame, text='Submit', width=10,
               command=self.add_customer).grid(row=5, column=3, sticky=W)
        self.frame.pack(padx=10, pady=10)

        self.root.bind("<Return>", self.add_customer)
        self.fname_en.focus_set()

        if line: #preset values
            self.fname.set(line[1])
            self.mname.set(line[2])
            self.lname.set(line[0])
            self.payment_cb.set(line[3])
            self.date.set(line[4].strftime("%m/%d/%Y"))
        
        ### enable from base class
        self.enable()

    def add_customer(self, event=None):
        # validate and show errors
        if self.fname.get() == '':
            showerror("Error!", "First name field blank!")
        elif self.lname.get() == '':
            showerror("Error!", "Last name field blank!")
        elif self.mname.get() == '':
            showerror("Error!", "Middle initial field blank!")
        elif self.payment.get() not in ("Drop In", "Punch Card", "Monthly", "Inactive"):
            showerror("Error!", "Incorect Customer type!")
        elif not re.compile(r'[01]?\d/[0123]?\d/[12]\d{1,3}').search(self.date.get()):
            showerror("Error!", "Bad entry for date, use format mm/dd/yyyy")
        else:
            self.close = True
            
            # do work
            old, row = self.customers.find(str(self.lname.get()).strip(), str(self.fname.get()).strip(),
                                           str(self.mname.get()).strip())
            new = [str(self.lname.get()).strip(), str(self.fname.get()).strip(), str(self.mname.get()).strip(),
                   str(self.payment.get()).strip(), datetime.strptime(self.date.get(), "%m/%d/%Y")]
            
            if not old and self.close:
                self.new_customer_name = ' '.join([new[1],new[2],new[0]])
                self.customers.add(new)
            elif self.close and not self.edit:
                var = IntVar()
                
                diag = AlreadyExistsDialog(self.root, new, old, var)
                diag.show()
                if var.get() == 0: # edit
                    self.close = False
                if var.get() == 1: # replace
                    self.customers.replace(row, new)
                    self.new_customer_name = ' '.join([new[1],new[2],new[0]])
                elif var.get() == 2: # add duplicate
                    self.customers.add(new)
                    self.new_customer_name = ' '.join([new[1],new[2],new[0]])
            else:
                self.customers.replace(row, new)

            if self.close:
                self.refresh()
                self.root.quit()
Beispiel #30
0
class App(Frame):

    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.levels = list()
        self.signs = list()
        self.items = [i for i in range(0,64)]
        self.items.remove(16)
        self.current_item = 0
        self.parent = parent
        self.max_width = 600
        self.max_height = 600
        self.client = Client()
        self.initDimensions()
        self.initUI()
        self.event = None
        self.reset_canvas()

    def connect(self):

        res = self.client.regis()
        if(res == 1):
            time.sleep(1)
            self.connect_button.config(state = 'disabled')
            self.disconnect_button.config(state = 'normal')

    def disconnect(self):
        self.client.close()
        self.connect_button.config(state = 'normal')
        self.disconnect_button.config(state = 'disabled')


    def initDimensions(self):
        self.canvas_width = self.max_width
        self.canvas_height = self.max_height
        self.rows = 10
        self.cols = 10
        # self.h = 1;
        self.cellwidth = self.canvas_width/self.cols
        self.cellheight = self.canvas_height/self.rows
        self.initData()

    def add_new_level(self):
        temp=dict()
        temp2 = dict()
        self.levels.append(temp)
        self.signs.append(temp2)

    def insert_new_level(self, loc):
        temp=dict()
        temp2 = dict()
        self.levels.insert(loc,temp)
        self.signs.insert(loc,temp2)

    def initData(self):
        self.levels = list()
        self.signs = list()
        self.rect = dict()
        self.rect_text = dict()
        self.curr_level = 0
        self.overlay_level = 0
        self.overlayToggle = False
        self.levels.append(dict())
        self.signs.append(dict())
        self.current_item = 1


    def reset_canvas(self):
        self.canvas.delete(ALL)
        self.parent.title("Craft Builder: Dimensions: " + str(self.rows) + 'x' + str(len(self.levels)) +'x' + str(self.cols))

    def redraw_overlay(self):
        c = set(self.levels[self.overlay_level].keys())
        if self.overlayToggle == 1:
            for key in c:
                x1 = key[1] * self.cellwidth
                y1 = (self.rows - key[0] - 1) * self.cellheight
                x2 = x1 + self.cellwidth
                y2 = y1 + self.cellheight

                if (key[0], key[1]) in self.rect:
                    self.canvas.itemconfig(self.rect[key[0],key[1]], width = OVERLAYWIDTH)
                else:
                    self.rect[key[0],key[1]] = self.canvas.create_rectangle(x1,y1,x2,y2, fill='white', outline = 'black', width = OVERLAYWIDTH, tag = 'block')
                    self.rect_text[key[0],key[1]] = self.canvas.create_text((x1+x2)/2,(y1+y2)/2, text = '', font=('verdana', 7), tag = 'blocktext')

    def redraw_level(self):
        # self.canvas.delete(ALL)

        # self.rect=dict()
        # self.rect_text = dict()
        start = time.clock()

        b = set(self.levels[self.curr_level].keys())

        for key in b:
            val = self.levels[self.curr_level][key]
            if (key[0], key[1]) in self.rect:
                self.canvas.itemconfig(self.rect[key[0],key[1]], fill = COLORS[val], outline = 'black', width = DEFAULTWIDTH)
                self.canvas.itemconfig(self.rect_text[key[0],key[1]], text = val)
            else:
                x1 = key[1] * self.cellwidth
                y1 = (self.rows - key[0] - 1) * self.cellheight
                x2 = x1 + self.cellwidth
                y2 = y1 + self.cellheight
                self.rect[key[0],key[1]] = self.canvas.create_rectangle(x1,y1,x2,y2, fill = COLORS[val], outline = 'black', width = DEFAULTWIDTH, tag = 'block')
                self.rect_text[key[0],key[1]] = self.canvas.create_text((x1+x2)/2,(y1+y2)/2, text = val, font=('verdana', 7), tag = 'blocktext')

        items_to_remove = list()
        for key in self.rect:
            if key not in self.levels[self.curr_level]:
                self.canvas.delete(self.rect[key[0],key[1]])
                self.canvas.delete(self.rect_text[key[0],key[1]])
                items_to_remove.append(key)
        for i in items_to_remove:
            self.rect.pop(i)
            self.rect_text.pop(i)


        self.parent.title("Craft Builder: Dimensions: " + str(self.rows) + 'x' + str(len(self.levels)) +'x' + str(self.cols))
        self.redraw_overlay()




    def updateDimensions(self,r,c,y=1):
        self.rows = r
        self.cols = c

        self.cellwidth = self.max_width/self.cols
        self.cellheight = self.max_height/self.rows
        if(self.cellwidth<=self.cellheight):
            self.cellheight = self.cellwidth
        else:
            self.cellwidth = self.cellheight
        self.canvas_height = self.rows * self.cellheight
        self.canvas_width = self.cols * self.cellwidth
        self.canvas.config(width = self.canvas_width, height = self.canvas_height)

        self.canvas.delete(ALL)
        self.initData()
        for i in range(y-1):
            self.levels.append(dict())
            self.signs.append(dict())

    def altMenu(self, event):
        # print "Keycode:", event.keycode, "State:", event.keysym, event.type
        self.event = event
        if event.type == '2':
            self.altAction = True
            self.clear_button.config(text = 'Multi Clear', bg = 'white')
            self.delete_button.config(text = 'Multi Delete', bg='white')
            self.insert_button.config(text = 'Multi Insert', bg='white')
            self.copy_level_button.config(text = 'Multi Copy', bg = 'white')
        elif event.type == '3':
            defaultbg = self.parent.cget('bg')
            self.altAction = False
            self.clear_button.config(text = 'Clear Level', bg = defaultbg)
            self.delete_button.config(text = 'Delete', bg = defaultbg)
            self.insert_button.config(text = 'Insert', bg = defaultbg)
            self.copy_level_button.config(text = 'Copy overlay level', bg = defaultbg)
        sys.stdout.flush()

    def initUI(self):

        self.altAction = False
        self.parent.title("Craft Builder")
        self.style = Style()
        self.style.theme_use("default")
        self.pack(fill=BOTH, expand=0)

        self.columnconfigure(0, pad = 7)
        self.columnconfigure(1, pad = 7)
        self.columnconfigure(2, pad = 7)
        self.columnconfigure(9, weight =1 )
        self.columnconfigure(3, pad=7)
        self.columnconfigure(5, pad=7)

        self.rowconfigure(1, weight=1)
        self.rowconfigure(5, pad=7)
        self.rowconfigure(6, pad=7)
        self.rowconfigure(7, pad=7)
        self.rowconfigure(8, pad=7)

        area = Frame(self, width=500, height=500, borderwidth = 2, relief = 'sunken')
        area.grid(row=1, column=0, columnspan=11, rowspan=4,
            padx=5, sticky=E+W+S+N)

        self.canvas = Canvas(area, bg='white', width=self.canvas_width, height=self.canvas_height)

        self.canvas.pack()
        self.canvas.bind("<Button-1>", self.callbackLeftClick)
        self.canvas.bind("<B1-Motion>", self.callbackLeftClick)
        self.canvas.bind("<Button-3>", self.callbackRightClick)
        self.canvas.bind("<B3-Motion>", self.callbackRightClick)
        self.canvas.bind("<Button-5>", self.scrollWheel)
        self.canvas.bind("<Button-4>", self.scrollWheel)
        self.parent.bind("<Shift_L>", self.altMenu)
        self.parent.bind("<KeyRelease-Shift_L>", self.altMenu)


        self.new_button = Button(self, text="New", command = self.onNew, width = 6)
        self.new_button.grid(row=5, column=0)

        save_button = Button(self, text="Save", command = self.onSave, width = 6)
        save_button.grid(row=6, column=0)

        load_button = Button(self, text="Load", command = self.onLoad, width = 6)
        load_button.grid(row=7, column=0)

        self.connect_button = Button(self, text="Connect", command = self.connect, width = 6)
        self.connect_button.grid(row=8, column=0)

        self.clear_button = Button(self, text="Clear Level", command = self.onClear, width =8)
        self.clear_button.grid(row=5, column=1)

        self.delete_button = Button(self, text="Delete Level", command = self.onDelete, width =8)
        self.delete_button.grid(row=6, column=1)

        self.insert_button = Button(self, text="Insert Level", command = self.onInsertLevel, width =8)
        self.insert_button.grid(row=7, column=1)

        self.disconnect_button = Button(self, text="Disconnect", command = self.disconnect, width = 8)
        self.disconnect_button.grid(row=8, column=1)
        self.disconnect_button['state'] = 'disabled'

        lbl_a = Label(self, text="Curr. Level", font=("Verdana", 10))
        lbl_a.grid(row = 5, column = 2)

        lbl_b = Label(self, text="Overlay Level", font=("Verdana", 10))
        lbl_b.grid(row = 6, column = 2)

        self.copy_level_button = Button(self, text="Copy overlay level", command = self.onCopy, width = 12)
        self.copy_level_button.grid(row=7, column=2, columnspan=1)

        load_world_button = Button(self, text="Load from world", command = self.onLoadFromWorld, width = 12)
        load_world_button.grid(row=8, column=2)

        self.currLevelCombo = Combobox(self, values = range(len(self.levels)), width = 5, state = 'readonly')
        self.currLevelCombo.grid(row = 5, column = 3)
        self.currLevelCombo.bind("<<ComboboxSelected>>", self.currLevelChooser)
        self.currLevelCombo.set(0)

        self.overlayLevelCombo = Combobox(self, values = range(len(self.levels)), width = 5, state = 'readonly')
        self.overlayLevelCombo.grid(row = 6, column = 3)
        self.overlayLevelCombo.bind("<<ComboboxSelected>>", self.overlayLevelChooser)
        self.overlayLevelCombo.set(0)


        self.new_level_button = Button(self, text="New Level", command = self.onNewLevel, width = 12)
        self.new_level_button.grid(row=7, column=3,columnspan=1)

        paste_button = Button(self, text="Paste in world", command = self.onPaste, width = 12)
        paste_button.grid(row=8, column=3)

        lbl_d = Label(self, text="Item", font=("Verdana", 10))
        lbl_d.grid(row = 5, column = 4)

        self.toggle = Checkbutton(self, text="Overlay Toggle", command = self.onToggle)
        self.toggle.grid(row=6, column=4)

        rotate_button = Button(self, text="Rotate", command = self.onRotate, width = 12)
        rotate_button.grid(row=7, column=4,columnspan=1)

        paste_sign_button = Button(self, text="Paste Signs", command = self.onPasteSign, width = 12)
        paste_sign_button.grid(row=8, column=4)

        self.itemCombo = Combobox(self, values = self.items, width = 5, state = 'readonly')
        self.itemCombo.grid(row = 5, column = 5)
        self.itemCombo.bind("<<ComboboxSelected>>", self.itemChooser)
        self.itemCombo.set(1)
        self.current_item = 1
        self.lbl_e = Label(self, text="", font=("Verdana", 8), width = 12, relief = 'ridge')
        self.lbl_e.grid(row = 6, column = 5)

        add_geo_button = Button(self, text="Add Geometry", command = self.addGeo, width = 12)
        add_geo_button.grid(row=8, column=5)

        try:
            global builder
            import builder
        except ImportError:
            add_geo_button.config(state = 'disabled')

    def scrollWheel(self, event):
        if event.num == 5:
            #scroll down
            if self.curr_level==len(self.levels) -1:
                pass
            else:
                self.curr_level = self.curr_level + 1
                self.currLevelCombo.set(self.curr_level)
                self.redraw_level()
        else:
            #scroll up
            if self.curr_level == 0:
                pass
            else:
                self.curr_level = self.curr_level - 1
                self.currLevelCombo.set(self.curr_level)
                self.redraw_level()

    def onInsertLevel(self):
        if self.altAction == 1:
            self.w=popupWindow(self,title = "Enter num_levels to insert and level below which to insert\n" +
                                                                 "seperated by a space.")
            self.wait_window(self.w.top)
            self.altAction = 0
            data = self.w.value.split(' ')
            try:
                if len(data) == 2:
                    for i in range(int(data[0])):
                        self.insert_new_level(int(data[1]))
                    self.redraw_level()
                else:
                    print 'Not enough arguments'
            except ValueError:
                print 'Error in values'


        else:
            self.insert_new_level(self.curr_level)
            self.currLevelCombo.config(values = range(len(self.levels)))
            self.overlayLevelCombo.config(values = range(len(self.levels)))
            self.redraw_level()

    def onCopy(self):
        if self.altAction == 1:
            self.w=popupWindow(self,title = "Enter the arguments start_level end_level num_times\n" +
                                                                 "and level above which to copy, all seperated by spaces.")
            self.wait_window(self.w.top)
            self.altAction = 0

            data = self.w.value.split(' ')
            try:
                if len(data) == 4:
                    st,sto = sorted((data[0],data[1]))
                    st = int(st)
                    sto = int(sto)
                    n = data[2]
                    l = int(data[3]) + 1
                    for i in range(int(n)):
                        for j in range(st, sto +1):
                            for col in range(self.cols):
                                for row in range(self.rows):
                                    if (row,col) in self.levels[j]:
                                        if  l+j-st < len(self.levels) :
                                            self.levels[l+j-st][row,col] = self.levels[j][row,col]
                        l = l +(sto-st+1)
                else:
                    print 'Not enough arguments'
            except ValueError:
                print 'Error in values'

        else:
            for col in range(self.cols):
                for row in range(self.rows):
                    if (row,col) in self.levels[self.overlay_level]:
                       self.levels[self.curr_level][row,col] = self.levels[self.overlay_level][row,col]
        sys.stdout.flush()
        self.redraw_level()



    def onClear(self):
        if self.altAction == 1:
            self.w=popupWindow(self,title = "Enter the arguments start_level end_levels to clear\n" +
                                                                 "seperated by a space.")
            self.wait_window(self.w.top)
            self.altAction = 0
            data = self.w.value.split()
            try:
                if len(data) == 2:
                    st,sto = sorted((data[0],data[1]))
                    st = int(st)
                    sto = int(sto)
                    for i in range(st,sto+1):
                        if i < len(self.levels):
                            self.levels[i] = dict()
                            self.signs[i] = dict()
                    self.redraw_level()
                else:
                    print 'Not enough arguments'
            except ValueError:
                print 'Error in values'
        else:
            if tkMessageBox.askquestion('Clear', "Clear Level: " + str(self.curr_level)) == 'yes':
                self.levels[self.curr_level] = dict()
                self.signs[self.curr_level] = dict()
                self.redraw_level()
            else:
                pass

    def onDelete(self):
        if self.altAction == 1:
            self.w=popupWindow(self,title = "Enter the arguments start_level end_levels to delete\n" +
                                                                 "seperated by a space.")
            self.wait_window(self.w.top)
            self.altAction = 0
            data = self.w.value.split()
            try:
                if len(data) == 2:
                    st,sto = sorted((data[0],data[1]))
                    st = int(st)
                    sto = int(sto)
                    for i in range(sto,st-1,-1):
                        if i < len(self.levels) and i >=0 and len(self.levels)>1:
                            self.levels.pop(i)
                            self.signs.pop(i)
                        elif i < len(self.levels) and i ==0 :
                            self.levels[i] = dict()
                            self.signs[i] = dict()

                    self.currLevelCombo.config(values = range(len(self.levels)))
                    self.overlayLevelCombo.config(values = range(len(self.levels)))
                    self.curr_level = 0
                    self.currLevelCombo.set(0)
                    self.overlayLevelCombo.set(0)
                    self.redraw_level()
                else:
                    print 'Not enough arguments'
            except ValueError:
                print 'Error in values'

        else:
            if tkMessageBox.askquestion('Delete', "Delete Level: " + str(self.curr_level)) == 'yes':
                if len(self.levels) == 1:
                    self.onClear()
                else:
                    self.levels.pop(self.curr_level)
                    self.signs.pop(self.curr_level)
                    self.currLevelCombo.config(values = range(len(self.levels)))
                    self.overlayLevelCombo.config(values = range(len(self.levels)))

                    if self.overlayToggle == 1:
                        self.toggle.invoke()
                        self.overlayToggle = 0

                    if self.curr_level != 0:
                        self.curr_level = self.curr_level - 1
                        self.currLevelCombo.set(self.curr_level)
                    else:
                        self.currLevelCombo.set(self.curr_level)
                    self.redraw_level()

    def addGeo(self):
        self.w=popupWindow(self,title = "Enter Command: help for Help")
        self.wait_window(self.w.top)

        try:
            c = self.w.value.split(' ')
            if c[0] == 'help':
                self.h = HelpWindow(self, title = 'Enter command followed by args seperated by spaces\n' +
                                                                    'Available commands (sphere, pyramid, cuboid)\n' +
                                                                    '1.   pyramid x1 x2 y z1 z2 fill(0/1) \n' +
                                                                    '2.   sphere cx cy cz r fill(0/1) \n' +
                                                                    '4.   circle_x x y z r fill(0/1) \n' +
                                                                    '5.   circle_y x y z r fill(0/1) \n' +
                                                                    '6.   circle_z x y z r fill(0/1) \n' +
                                                                    '7.   cylinder_x x1 x2 y z r fill(0/1) \n' +
                                                                    '8.   cylinder_y x y1 y2 z r fill(0/1) \n' +
                                                                    '9.   cylinder_z x y z1 z2 r fill(0/1) \n' +
                                                                    '10. cuboid x1 x2 y1 y2 z1 z2 fill(0/1) \n' )
            elif c[0] == 'sphere':
                if len(c) - 1 == 5:
                    result = builder.sphere(int(c[1]),int(c[2]),int(c[3]),int(c[4]),int(c[5]))
                    for i in result:
                        if i[1] < len(self.levels) and i[1] >=0:
                            if i[0] < self.rows and i[0] >=0 and i[2] < self.cols and i[2] >=0:
                                self.levels[i[1]][i[0],i[2]] = self.current_item

            elif c[0] == 'pyramid':
                if len(c) - 1 == 6:
                    result = builder.pyramid(int(c[1]),int(c[2]),int(c[3]),int(c[4]),int(c[5]),int(c[6]))
                    for i in result:
                        if i[1] < len(self.levels) and i[1] >= 0:
                            if i[0] < self.rows and i[0] >=0 and i[2] < self.cols and i[2] >=0:
                                self.levels[i[1]][i[0],i[2]] = self.current_item

            elif c[0] == 'circle_x':
                if len(c) - 1 == 5:
                    result = builder.circle_x(int(c[1]),int(c[2]),int(c[3]),int(c[4]),int(c[5]))
                    for i in result:
                        if i[1] < len(self.levels) and i[1] >= 0:
                            if i[0] < self.rows and i[0] >=0 and i[2] < self.cols and i[2] >=0:
                                self.levels[i[1]][i[0],i[2]] = self.current_item
            elif c[0] == 'circle_y':
                if len(c) - 1 == 5:
                    result = builder.circle_y(int(c[1]),int(c[2]),int(c[3]),int(c[4]),int(c[5]))
                    for i in result:
                        if i[1] < len(self.levels) and i[1] >= 0:
                            if i[0] < self.rows and i[0] >=0 and i[2] < self.cols and i[2] >=0:
                                self.levels[i[1]][i[0],i[2]] = self.current_item
            elif c[0] == 'circle_z':
                if len(c) - 1 == 5:
                    result = builder.circle_z(int(c[1]),int(c[2]),int(c[3]),int(c[4]),int(c[5]))
                    for i in result:
                        if i[1] < len(self.levels) and i[1] >= 0:
                            if i[0] < self.rows and i[0] >=0 and i[2] < self.cols and i[2] >=0:
                                self.levels[i[1]][i[0],i[2]] = self.current_item
            elif c[0] == 'cylinder_x':
                if len(c) - 1 == 6:
                    x1,x2 = sorted([int(c[1]),int(c[2])])
                    result = builder.cylinder_x(x1,x2,int(c[3]),int(c[4]),int(c[5]),int(c[6]))
                    for i in result:
                        if i[1] < len(self.levels) and i[1] >= 0:
                            if i[0] < self.rows and i[0] >=0 and i[2] < self.cols and i[2] >=0:
                                self.levels[i[1]][i[0],i[2]] = self.current_item
            elif c[0] == 'cylinder_y':
                if len(c) - 1 == 6:
                    y1,y2 = sorted([int(c[2]),int(c[3])])
                    result = builder.cylinder_y(int(c[1]),y1,y2,int(c[4]),int(c[5]),int(c[6]))
                    for i in result:
                        if i[1] < len(self.levels) and i[1] >= 0:
                            if i[0] < self.rows and i[0] >=0 and i[2] < self.cols and i[2] >=0:
                                self.levels[i[1]][i[0],i[2]] = self.current_item
            elif c[0] == 'cylinder_z':
                if len(c) - 1 == 6:
                    z1,z2 = sorted([int(c[3]),int(c[4])])
                    result = builder.cylinder_z(int(c[1]),int(c[2]),z1,z2,int(c[5]),int(c[6]))
                    for i in result:
                        if i[1] < len(self.levels) and i[1] >= 0:
                            if i[0] < self.rows and i[0] >=0 and i[2] < self.cols and i[2] >=0:
                                self.levels[i[1]][i[0],i[2]] = self.current_item

            elif c[0] == 'cuboid':
                if len(c) - 1 == 7:
                    result = builder.cuboid(int(c[1]),int(c[2]),int(c[3]),int(c[4]),int(c[5]),int(c[6]),int(c[7]))
                    for i in result:
                        if i[1] < len(self.levels) and i[1] >= 0:
                            if i[0] < self.rows and i[0] >=0 and i[2] < self.cols and i[2] >=0:
                                self.levels[i[1]][i[0],i[2]] = self.current_item
                pass

            newLevels = list()
            for i, j in enumerate(self.levels):
                temp = dict()
                for key, val in j.iteritems():
                    if int(val) != 0:
                        temp[key] = val
                newLevels.append(temp)

            self.levels = newLevels

            self.redraw_level()

        except RuntimeError:
            pass

    def onPaste(self):
        self.w=popupWindow(self,title = "On world, facing north (i.e x increases ahead of you,\n"+
                                                            "and z increases to your right.\n" +
                                                            "Enter origin point (x y z) seperated by spaces: eg. 12 12 12:")
        self.wait_window(self.w.top)
        data = self.w.value.split(' ')
        try:
            xo = int(data[0])
            yo = int(data[1])
            zo = int(data[2])
            if tkMessageBox.askquestion('Coords', "Is this (x,y,z) correct: " + str(xo) +',' +str(yo) + ',' + str(zo)) == 'yes':
                print 'Pasting'
                count = 0
                for j,i in enumerate(self.levels):
                    for key,value in i.iteritems():
                        xr = int(xo + key[0])
                        yr = int(yo + j)
                        zr = int(zo + key[1])
                        # self.client.client_send(xr,yr,zr,0)
                        if int(value) != 0:
                            self.client.client_send(xr,yr,zr,int(value))
                            count = count + 1
                        if count % NUMPERSEC == 0:
                            time.sleep(1)
            else:
                pass
        except ValueError:
            pass

    def onPasteSign(self):
        self.w=popupWindow(self,title = "Facing north, enter origin point(x y z): eg. 12 12 12:")
        self.wait_window(self.w.top)
        data = self.w.value.split(' ')
        try:
            xo = int(data[0])
            yo = int(data[1])
            zo = int(data[2])
            if tkMessageBox.askquestion('Coords', "Is this (x,y,z) correct: " + str(xo) +',' +str(yo) + ',' + str(zo)) == 'yes':
                print 'Pasting'
                count = 0
                for j,i in enumerate(self.signs):
                    for key,value in i.iteritems():
                        xr = int(xo + key[0])
                        yr = int(yo + j)
                        zr = int(zo + key[1])

                        for num,val in enumerate(value):
                            if val!=-1:
                                # print j,i,num, val
                                self.client.client_send_sign(xr, yr, zr, num, val)
                        sys.stdout.flush()
        except ValueError:
            pass

    def onLoadFromWorld(self):
        self.w=popupWindow(self,title = "Enter bottom left point: (x y z)")
        self.wait_window(self.w.top)
        try:
            [x1,y1,z1] = [int(i) for i in self.w.value.split(' ')]

            self.w=popupWindow(self,title = "Enter top right point: (x y z)")
            self.wait_window(self.w.top)
            [x2,y2,z2] = [int(i) for i in self.w.value.split(' ')]

            x1,x2 =  sorted([x1,x2])
            y1,y2 =  sorted([y1,y2])
            z1,z2 =  sorted([z1,z2])

            if tkMessageBox.askquestion('Coords', "Bottom left: " + str(x1) +',' +str(y1) + ',' + str(z1) + '\n' + \
                "Top right: " + str(x2) +',' +str(y2) + ',' + str(z2)) == 'yes':
                print 'Copying',x1,y1,z1,' to',x2,y2,z2
                data = self.client.read_db(x1,y1,z1,x2,y2,z2, db_name)
                signs = self.client.read_signs(x1,y1,z1,x2,y2,z2, db_name)
                newData = list()

                for i in data:
                    temp = dict()
                    for key,value in i.iteritems():
                        if value != 0:
                            temp[key[0], key[1]] = value
                    newData.append(temp)

                newSignData = list()
                for i in signs:
                    temp = dict()
                    for key,value in i.iteritems():
                        temp[key[0], key[1]] = value
                    newSignData.append(temp)

                if self.overlayToggle == 1:
                    self.toggle.invoke()
                    self.overlayToggle = 0
                self.updateDimensions(x2-x1+1, z2-z1+1, len(newData))
                self.reset_canvas()
                self.levels = newData
                self.signs = newSignData
                sys.stdout.flush()

                self.redraw_level()
                self.currLevelCombo.config(values = range(len(self.levels)))
                self.overlayLevelCombo.config(values = range(len(self.levels)))
        except ValueError:
            pass

    def onSave(self):
        filename = asksaveasfilename(parent=self)
        pickle.dump({'Dimensions' : [self.rows,self.cols,len(self.levels)],'Levels' : self.levels, 'Signs' : self.signs}, open(filename, 'wb'))

    def onLoad(self):
        if self.overlayToggle == 1:
            self.toggle.invoke()
            self.overlayToggle = 0

        filename = askopenfilename(parent=self)
        try:
            obj = pickle.load(open(filename, 'rb'))
            self.updateDimensions(int(obj['Dimensions'][0]), int(obj['Dimensions'][1]), int(obj['Dimensions'][2]))
            self.reset_canvas()
            self.levels = obj['Levels']

            if 'Signs' in obj:
                self.signs = obj['Signs']
            self.redraw_level()
            self.currLevelCombo.config(values = range(len(self.levels)))
            self.overlayLevelCombo.config(values = range(len(self.levels)))
        except IOError:
            pass

    def onToggle(self):
        if self.overlayToggle == 0:
            self.overlayToggle =1
            self.redraw_level()
        else:
            self.overlayToggle = 0
            self.redraw_level()

    def onNewLevel(self):
        self.add_new_level()
        self.currLevelCombo.config(values = range(len(self.levels)))
        self.overlayLevelCombo.config(values = range(len(self.levels)))
        self.redraw_level()

    def onRotate(self):
        self.rotatedData = list()
        self.rotatedSignData = list()

        for i in self.levels:
            temp = dict()
            for key,value in i.iteritems():
                xr = (key[0] * math.cos(math.radians(-90)) - (key[1]) * math.sin(math.radians(-90)))
                zr = (key[0] * math.sin(math.radians(-90)) + (key[1]) * math.cos(math.radians(-90)))
                temp[int(math.floor(xr)),int(math.floor(zr))] = value
            self.rotatedData.append(temp)

        sign_map = {0:2, 3:0, 1:3, 2:1, 6:5, 7:6, 4:7, 5:4} #FOR ROTATION CALCULATION
        for i in self.signs:
            temp = dict()
            for key,value in i.iteritems():
                xr = (key[0] * math.cos(math.radians(-90)) - (key[1]) * math.sin(math.radians(-90)))
                zr = (key[0] * math.sin(math.radians(-90)) + (key[1]) * math.cos(math.radians(-90)))
                new_value = [value[sign_map[0]],
                                      value[sign_map[1]],
                                      value[sign_map[2]],
                                      value[sign_map[3]],
                                      value[sign_map[4]],
                                      value[sign_map[5]],
                                      value[sign_map[6]],
                                      value[sign_map[7]]]
                temp[int(math.floor(xr)),int(math.floor(zr))] = new_value
            self.rotatedSignData.append(temp)

        #Moving to origin x,z : 0,0
        self.newData=list()
        self.newSignData=list()
        for i in self.rotatedData:
            temp=dict()
            for key,value in i.iteritems():
                temp[key[0], int(key[1])+int((self.rows-1))] = value
            self.newData.append(temp)
        for i in self.rotatedSignData:
            temp=dict()
            for key,value in i.iteritems():
                temp[key[0], int(key[1])+int((self.rows-1))] = value
            self.newSignData.append(temp)


        temp = self.rows
        self.rows = self.cols
        self.cols = temp

        temp = self.curr_level
        temp2 = self.overlay_level
        temp3 = self.overlayToggle
        temp4 = self.current_item

        self.updateDimensions(self.rows, self.cols,len(self.newData))
        self.reset_canvas()
        self.levels = self.newData
        self.signs = self.newSignData
        self.curr_level = temp
        self.overlay_level = temp2
        self.overlayToggle = temp3

        self.itemCombo.set(temp4)
        self.currLevelCombo.config(values = range(len(self.levels)))
        self.overlayLevelCombo.config(values = range(len(self.levels)))
        self.currLevelCombo.set(self.curr_level)
        self.overlayLevelCombo.set(self.overlay_level)
        self.redraw_level()


    def onNew(self):
        if self.overlayToggle == 1:
            self.toggle.invoke()
            self.overlayToggle = 0
        self.w=popupWindow(self,title = "Enter Dimensions in XxZxY format (e.g. 10x20x3)")
        self.wait_window(self.w.top)
        try:
            data = self.w.value.split('x')
            if len(data) == 2:
                self.updateDimensions(int(data[0]), int(data[1]),1)
            else:
                self.updateDimensions(int(data[0]), int(data[1]),int(data[2]))
            # self.initData()
            self.reset_canvas()
            self.currLevelCombo.config(values = range(len(self.levels)))
            self.overlayLevelCombo.config(values = range(len(self.levels)))
        except ValueError:
            pass

    def currLevelChooser(self, event):
        self.curr_level = int(self.currLevelCombo.get())
        self.redraw_level()

    def overlayLevelChooser(self, event):
        self.overlay_level = int(self.overlayLevelCombo.get())
        self.redraw_level()

    def itemChooser(self, event):
        self.current_item = int(self.itemCombo.get())

    def callbackLeftClick(self,event):
        if self.current_item == 0:
            return
        col = int(math.floor((event.x)/self.cellwidth))
        row = int(math.floor((event.y)/self.cellheight))
        x1 = col * self.cellwidth
        y1 = row * self.cellheight
        x2 = x1 + self.cellwidth
        y2 = y1 + self.cellheight

        if (self.rows - row - 1,col) in self.rect:
            self.canvas.itemconfig(self.rect[self.rows - row - 1,col],fill=COLORS[self.current_item])
            self.canvas.itemconfig(self.rect_text[self.rows - row - 1,col], text = str(self.current_item))
        else:
            self.rect[self.rows - row - 1,col] = self.canvas.create_rectangle(x1,y1,x2,y2, fill=COLORS[self.current_item], outline = 'black', width = DEFAULTWIDTH, tag = 'block')
            self.rect_text[self.rows - row - 1,col] = self.canvas.create_text((x1+x2)/2,(y1+y2)/2, text = self.current_item, font=('verdana', 7), tag = 'blocktext')

        self.levels[self.curr_level][self.rows - row - 1,col] = self.current_item

        if row < self.rows and row >=0 and col < self.cols and col >= 0:
            self.lbl_e.config(text = 'x,y,z: ' + str(self.rows-row-1) + ',' + str(self.curr_level) + ',' + str(col))

    def callbackRightClick(self,event):
        col = int(math.floor((event.x)/self.cellwidth))
        row = int(math.floor((event.y)/self.cellheight))

        if (self.rows - row - 1,col) in self.rect:
            self.canvas.delete(self.rect[self.rows - row - 1,col])
            self.canvas.delete(self.rect_text[self.rows - row - 1,col])
            self.rect.pop((self.rows - row -1, col))
            self.rect_text.pop((self.rows - row -1, col))

        self.levels[self.curr_level].pop((self.rows - row - 1,col),None)

        if row < self.rows and row >=0 and col < self.cols and col >= 0:
            self.lbl_e.config(text = 'x,y,z: ' + str(self.rows-row-1) + ',' + str(self.curr_level) + ',' + str(col))
class GUI(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.initUI()

    def initUI(self):

        # first frame
        self.frame1 = Frame(self)
        self.pack()
        self.frame1.grid()
        self.frame1.grid(row=0, column=0)

        self.sign = Label(self.frame1,
                          text="Election Data Analysis Tool v.1.0",
                          bg="red",
                          fg="white",
                          font="Times 15 bold",
                          width=108,
                          height=2)
        self.sign.pack(fill=X, anchor=N)

        self.load_election = Button(self.frame1,
                                    text="Load Election Data",
                                    width=50,
                                    height=3,
                                    command=self.load_election_data)
        self.load_election.pack(pady=10)

        # second frame

        self.frame2 = Frame(self)
        self.frame2.grid(row=1, column=0)

        self.cluster_dis = Button(self.frame2,
                                  text="Cluster Districts",
                                  width=50,
                                  height=3,
                                  command=self.cluster_dis)
        self.cluster_dis.grid(row=1, column=0, pady=10, padx=20)

        self.cluster_political = Button(self.frame2,
                                        text="Cluster Political Parties",
                                        width=50,
                                        height=3,
                                        command=self.cluster_political)
        self.cluster_political.grid(row=1, column=1, pady=10, padx=20)

        # these frames for canvas and other things

        self.frame3 = Frame(self)
        self.frame3.grid(row=2, column=0)

        self.frame4 = Frame(self)
        self.frame4.grid(row=3, column=0)

    def load_election_data(self):

        # listing data from text

        self.filename = open(
            tkFileDialog.askopenfilename(initialdir="/",
                                         title="Select file",
                                         filetypes=(("txt files", "*.txt"),
                                                    ("all files", "*.*"))))

        self.lines = [line for line in self.filename]
        self.results = {}
        district_list = []
        self.party_list = []
        party = False
        c = 0
        name = ""
        value = 0
        for line in self.lines[0:]:
            c += 1
            p = line.split('\t')

            if (p[0].find("Kaynak") > -1):
                party = False
                value = c + 1

            if (value == c):
                name = p[0].replace("\n", "")

                if name not in district_list:
                    district_list.append(name)

            if (p[0] == "Toplam"):
                party = False

            if (p[0].find("Kis.") > -1):
                vote_rate_in_districts = {}
                party = True

            if (party == True and p[0].find("Kis.") < 0 and p[0] != "BGMSZ"):
                vote_rate_in_districts[p[0].replace("\n", "")] = p[4].replace(
                    "%", "").replace("\n", "")

                if p[0] not in self.party_list:
                    self.party_list.append(p[0].replace("\n", ""))

            if (p[0] == "Toplam"):
                self.results[name] = vote_rate_in_districts

    def cluster_dis(self):

        # canvas and listbox

        self.canvas1 = Canvas(self.frame3,
                              bg='#FFFFFF',
                              width=1100,
                              height=300)
        self.canvas1.grid(row=0, column=0)

        self.scollbary = Scrollbar(self.frame3,
                                   orient="vertical",
                                   command=self.canvas1.yview)
        self.scollbary.grid(row=0, column=0, sticky='nsew')

        self.scollbarx = Scrollbar(self.frame3,
                                   orient="horizontal",
                                   command=self.canvas1.xview)
        self.scollbarx.grid(row=0, column=0, sticky='nsew')

        Label(self.frame4, text="Districts :").grid(row=0, column=0)

        self.districts_listbox = Listbox(self.frame4,
                                         selectmode="multiple",
                                         height=13,
                                         width=20)
        self.districts_listbox.grid(row=0, column=1)

        # adding districts to listbox

        for i in self.results.keys():
            self.districts_listbox.insert(END, i)

        self.scollbary_listbox = Scrollbar(
            self.frame4,
            orient="vertical",
            command=self.districts_listbox.yview)
        self.scollbary_listbox.grid(row=0, column=1, sticky='nsew')

        Label(self.frame4, text="Threshold :").grid(row=0, column=2)

        self.combobox = Combobox(
            self.frame4,
            state="readonly",
            values=["%0", "%1", "%10", "%20", "%30", "%40", "%50"])
        self.combobox.grid(row=0, column=3)

        self.refine_button = Button(self.frame4,
                                    text="Refine Analysis",
                                    width=45,
                                    height=2,
                                    command=self.cluster_dis)
        self.refine_button.grid(row=0, column=4)

    def cluster_political(self):

        # canvas and listbox

        self.canvas1 = Canvas(self.frame3,
                              bg='#FFFFFF',
                              width=1100,
                              height=300)
        self.canvas1.grid(row=0, column=0)

        self.scollbary = Scrollbar(self.frame3,
                                   orient="vertical",
                                   command=self.canvas1.yview)
        self.scollbary.grid(row=0, column=0, sticky='nsew')

        self.scollbarx = Scrollbar(self.frame3,
                                   orient="horizontal",
                                   command=self.canvas1.xview)
        self.scollbarx.grid(row=0, column=0, sticky='nsew')

        Label(self.frame4, text="Districts :").grid(row=0, column=0)

        self.districts_listbox = Listbox(self.frame4,
                                         selectmode="multiple",
                                         height=13,
                                         width=20)
        self.districts_listbox.grid(row=0, column=1)

        # adding districts to listbox

        for i in self.results.keys():
            self.districts_listbox.insert(END, i)

        self.scollbary_listbox = Scrollbar(
            self.frame4,
            orient="vertical",
            command=self.districts_listbox.yview)
        self.scollbary_listbox.grid(row=0, column=1, sticky='nsew')

        Label(self.frame4, text="Threshold :").grid(row=0, column=2)

        self.combobox = Combobox(self.frame4, state="readonly")
        self.combobox.grid(row=0, column=3)

        self.refine_button = Button(self.frame4,
                                    text="Refine Analysis",
                                    width=45,
                                    height=2,
                                    command=self.cluster_dis)
        self.refine_button.grid(row=0, column=4)
Beispiel #32
0
class IniGenGui(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.parent = parent
        self.inigen = IniGen()
        self.initUIGlobals()

    def initUIGlobals(self):
        """
      This is the first part of the window to be rendered. After these have been
       set by the user and 'Emit Globals' has been clicked, the given algorithm
       can then specify how to generate the second part of the window. All fields
       are disabled for user input after globals have been emitted.

      Information in Global Parameters:
        Algorithm
          - name of the algorithm to use
        File Name
          - name of the output file to be generated
        Min Time
          - Minimum Time for distillers to run
        Max Time
          - Maximum Time for distillers to run
        Set Enabled:
          - checkbox to specify if the distiller should be enabled True or False
    """
        self.parent.title("Ini Generator")

        Style().configure("TButton", padding=(0, 5, 0, 5), font='serif 10')

        # initialize row counter. This is incremented after each element added to grid
        row = 0
        # initialize column counter. This is incremented after a column has been filled
        self.column = 0

        # Globals: entries for info common to all runs
        label_globals = Label(self, text="Globals")
        label_globals.grid(row=row, column=self.column)
        row += 1

        label_alg = Label(self, text="Algorithm")
        label_alg.grid(row=row, column=self.column, sticky=E + W)
        row += 1
        self.cbox_alg = Combobox(self,
                                 values=algorithms.keys(),
                                 state='readonly')
        self.cbox_alg.current(0)
        self.cbox_alg.grid(row=row, column=self.column, sticky=E + W + S + N)
        row += 1

        label_filename = Label(self, text="Output File Name")
        label_filename.grid(row=row, column=self.column, sticky=E + W)
        row += 1
        self.entry_filename = Entry(self)
        self.entry_filename.grid(row=row, column=self.column, sticky=W + E)
        row += 1

        label_mintime = Label(self, text="Min Time")
        label_mintime.grid(row=row, column=self.column, sticky=E + W)
        row += 1
        self.entry_mintime = Entry(self)
        self.entry_mintime.grid(row=row, column=self.column, sticky=W + E)
        row += 1

        label_maxtime = Label(self, text="Max Time")
        label_maxtime.grid(row=row, column=self.column, sticky=W + E)
        row += 1
        self.entry_maxtime = Entry(self)
        self.entry_maxtime.grid(row=row, column=self.column, sticky=W + E)
        row += 1

        self.enabled = IntVar()
        self.check_enabled = Checkbutton(self,
                                         text="set enabled",
                                         variable=self.enabled)
        self.check_enabled.grid(row=row, column=self.column, sticky=W + E)
        row += 1

        # Control: buttons used to emmiting text and generating file
        self.button_emit_globals = Button(self,
                                          text="Emit Globals",
                                          command=self.emit_globals)
        self.button_emit_globals.grid(row=row,
                                      column=self.column,
                                      sticky=W + E)
        row += 1

        button_addrun = Button(self, text="Add Run", command=self.emit_run)
        button_addrun.grid(row=row, column=self.column, sticky=W + E)
        row += 1

        button_generate = Button(self,
                                 text="Generate File",
                                 command=self.generate_file)
        button_generate.grid(row=row, column=self.column, sticky=W + E)
        row += 1

        self.column += 1

        self.pack()

    def initUIRuns(self):
        """
      Second part of gui to be rendered. This contains all the fields needed to emit
       a single run within a distiller file. Multiple runs can be added by clicking
       'Add Run' multiple times.

      Information in Run Parameters:
        Run Name
          - header name for run
        Dependencies
          - description and uuid fields for each dependency in the algorithm
        Params
          - parameter fields for each parameter in the algorithm
    """

        self.entry_run_name = None
        self.entries_dep_description = []
        self.entries_dep_uuid = []
        self.entries_param = []

        row = 0

        label_runs = Label(self, text="Runs")
        label_runs.grid(row=row, column=self.column)
        row += 1

        label_run_name = Label(self, text="Run Name")
        label_run_name.grid(row=row, column=self.column, sticky=W + E)
        row += 1

        self.entry_run_name = Entry(self)
        self.entry_run_name.grid(row=row, column=self.column, sticky=W + E)
        row += 1

        algorithm = self.cbox_alg.get()
        settings = algorithms[algorithm]

        for dep in settings['deps']:

            if row >= 21:
                self.column += 1
                row = 1

            label_dep_description = Label(self,
                                          text="{0} (description)".format(dep))
            label_dep_description.grid(row=row,
                                       column=self.column,
                                       sticky=W + E)
            row += 1

            entry_dep_description = Entry(self)
            entry_dep_description.grid(row=row,
                                       column=self.column,
                                       sticky=W + E)
            row += 1

            label_dep_uuid = Label(self, text="{0} (uuid)".format(dep))
            label_dep_uuid.grid(row=row, column=self.column, sticky=W + E)
            row += 1

            entry_dep_uuid = Entry(self)
            entry_dep_uuid.grid(row=row, column=self.column, sticky=W + E)
            row += 1

            self.entries_dep_description.append(entry_dep_description)
            self.entries_dep_uuid.append(entry_dep_uuid)

        for param in settings['params']:

            if row >= 21:
                self.column += 1
                row = 1

            label_param = Label(self, text=param)
            label_param.grid(row=row, column=self.column, sticky=W + E)
            row += 1

            entry_param = Entry(self)
            entry_param.grid(row=row, column=self.column, sticky=W + E)
            row += 1

            self.entries_param.append(entry_param)

        row = 0
        self.column += 1

        self.text_file = Text(self)
        self.text_file.grid(row=row,
                            column=self.column,
                            rowspan=31,
                            sticky=W + E + N + S,
                            padx=5,
                            pady=5)
        self.column += 1
        scrollbar = Scrollbar(self, command=self.text_file.yview)
        self.text_file.config(yscrollcommand=scrollbar.set)
        scrollbar.grid(row=row, column=self.column, rowspan=31, sticky=N + S)

        self.pack()

    def emit_globals(self):
        self.algorithm = algorithms[self.cbox_alg.get()]
        path = self.algorithm['path']
        if self.enabled.get():
            enabled = 'True'
        else:
            enabled = 'False'

        lines = self.inigen.emit_global(path, enabled)

        self.mintime = self.entry_mintime.get()
        self.maxtime = self.entry_maxtime.get()

        self.cbox_alg.configure(state='disabled')
        self.entry_filename.configure(state='disabled')
        self.entry_mintime.configure(state='disabled')
        self.entry_maxtime.configure(state='disabled')
        self.check_enabled.configure(state='disabled')
        self.button_emit_globals.configure(state='disabled')

        self.initUIRuns()
        self.update_text(lines)

    def emit_run(self):
        label = self.entry_run_name.get()
        chunking = 'parallel'  #hardcoded for now
        mintime = self.mintime
        maxtime = self.maxtime
        lines = self.inigen.emit_run_header(label, chunking, mintime, maxtime)
        self.update_text(lines)

        deps = []
        for i in range(len(self.entries_dep_description)):
            deps.append([
                self.entries_dep_description[i].get(),
                self.algorithm['deps'][i], self.entries_dep_uuid[i].get()
            ])
        params = []
        for i in range(len(self.entries_param)):
            params.append(
                [self.algorithm['params'][i], self.entries_param[i].get()])
        outputs = self.algorithm['outputs']
        lines = self.inigen.emit_run_body(deps, params, outputs)
        self.update_text(lines)

    def generate_file(self):
        self.inigen.generate_file(self.entry_filename.get())
        self.quit()

    def update_text(self, lines):
        self.text_file.configure(state='normal')
        string = "\n".join(lines)
        self.text_file.insert(END, string)
        self.text_file.configure(state='disabled')
Beispiel #33
0
	def initUI(self):
		self.master.title('Bureau of Labor Statistics: Market Summary')
		#self.pack(fill=BOTH, expand=True)
		#self.grid_rowconfigure(0, weight=1)
		#self.grid_columnconfigure(0, weight=1)
		self.grid()
		

		######### Menu setup ###########
		menubar = Menu(self.master)
		
		file_menu = Menu(menubar)
		file_menu.add_command(label='Open...', command=self.select_file)
		file_menu.add_separator()
		file_menu.add_command(label='Close', command=self.quit)
		menubar.add_cascade(label='File', menu=file_menu)


		about_menu = Menu(menubar)
		about_menu.add_command(label='About')
		menubar.add_cascade(label='Help', menu=about_menu)

		self.master.config(menu=menubar)
		# end menu setup

		
		####### Logo ########
		logo = Image.open('img/BLS logo.jpg')
		logoo = ImageTk.PhotoImage(logo)
		logo_label = Label(self, image=logoo)
		logo_label.image = logoo
		logo_label.grid(row=0, columnspan=2)
		# end logo
	
		##### Combobox ########		
		occ_label = Label(self, text='Occupations:')
		occ_label.grid(row=1)
	
		choices = ['None']
		self.v = StringVar()
		cb = Combobox(self, textvariable=self.v,state='disabled', width=30)
		cb['values'] = choices
		cb.current(0)
		cb.bind('<<ComboboxSelected>>', self.on_select)
		self.my_cb['cb'] = cb
		cb.grid(row=1, column=1, pady=7, sticky=W)
		# end combobox
		
		###### Results #######
		j_label = Label(self, text='Job:')
		j_label.grid(row=2, padx=3, pady=3, sticky=W)

		jr_label = Label(self, text='None', anchor=W, justify=LEFT, width=30)
		self.my_labels['jr_label'] = jr_label
		jr_label.grid(row=2, column=1, pady=3, sticky=W)

		s_label = Label(self, text='Salary:')
		s_label.grid(row=3, padx=3, pady=3, sticky=W)

		sr_label = Label(self, text='None')
		self.my_labels['sr_label'] = sr_label
		sr_label.grid(row=3, column=1, pady=3, sticky=W)
		# end results

		####### Listbox #######
		lb = Listbox(self, width=30)
		lb.grid(row=0, column=2, rowspan=5, padx=10)

		
		####### Footer ###########
		closeButton = Button(self, text='Close', command=self.quit)
		closeButton.grid(row=4, column=2, sticky=E)
Beispiel #34
0
chrom_button.grid(column=1, row=1, sticky=(W, E))
chrom_entry.grid(column=2, row=1, sticky=(W, E), columnspan=4)
output_button.grid(column=1, row=2, sticky=(W, E))
output_entry.grid(column=2, row=2, sticky=(W, E), columnspan=4)

#MODEL BLOCK------------------------------
models_lb = Label(fileframe, text="Models")
models_cb = Combobox(fileframe, width=20, state='readonly')
modellist = []
for files in os.listdir(MODEL_DIR):
    if files.endswith(".txt"):
        modellist.append(files)
models_cb['values'] = modellist
models_lb.grid(column=1, row=3, sticky=(W))
models_cb.grid(column=2, row=3, sticky=(W))


#PARAMETER BLOCK------------------------------
kmer_label = Label(paramsframe, text="Kmers")
spacerl_label = Label(paramsframe, text="Spacer Length")
spacerp_label = Label(paramsframe, text="Spacer after position")
startpos_label = Label(paramsframe, text="Starting at position")
endpos_label = Label(paramsframe, text="Ending at position")

kmer_entry = Entry(paramsframe, width=5, textvariable=kmers)
spacerl_entry = Entry(paramsframe, width=5, textvariable=spacel)
spacerp_entry = Entry(paramsframe, width=5, textvariable=spacep)
startpos_entry = Entry(paramsframe, width=5, textvariable=startp)
endpos_entry = Entry(paramsframe, width=5, textvariable=endp)
class Gui(Frame):
    """ Gui class for Graphical User Interface"""
    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.searcher = Searcher()
        self.initUI()

    def initUI(self):
        self.pack(fill=BOTH, expand=True)
        Grid.columnconfigure(self, 0, weight=1)
        Label(self,
              text='Classroom Finder',
              font=('Arial', 20, 'bold'),
              bg='cyan',
              fg='white').grid(sticky=W + E,
                               columnspan=3)  # classroom finder header
        Label(self, text='Url:').grid(column=0, row=1, pady=10, padx=(50, 0))
        self.urlentry = Entry(self, width=100)  # url entry to get url
        self.urlentry.grid(column=1, row=1, padx=(0, 80))
        self.color_label = Label(
            self, bg='red', width=10)  # color label to make red,yellow,green
        self.color_label.grid(column=0,
                              row=2,
                              sticky=E,
                              columnspan=2,
                              padx=(120),
                              pady=(0, 40))
        self.fetchbtn = Button(self,
                               text='Fetch',
                               height=2,
                               width=10,
                               command=self.dynamic)  # fetch button
        self.fetchbtn.grid(column=1,
                           row=2,
                           sticky=E,
                           padx=(0, 30),
                           pady=(10, 50))
        Label(self,
              text='Filters',
              bg='cyan',
              fg='white',
              font=('Arial', 20, 'bold'),
              width=10).grid(column=0, row=3, padx=10)
        self.frame = Frame(self, borderwidth=3,
                           relief=GROOVE)  # frame to keep filters part
        self.frame.grid(column=0,
                        row=4,
                        columnspan=3,
                        sticky=W + E + S + N,
                        pady=10,
                        padx=10)
        Label(self.frame, text='Where am I?').grid(sticky=W)
        self.where_combo = Combobox(self.frame,
                                    state='readonly')  # where am i combobox
        self.where_combo.grid(column=1, row=0, pady=20)
        self.where_combo.bind(
            '<<ComboboxSelected>>',
            self.change_build)  # to update room button wrt where combo
        Label(self.frame, text='Room').grid(sticky=W)
        self.room_combo = Combobox(self.frame,
                                   state='readonly')  # rooms combobox
        self.room_combo.grid(column=1, row=1)
        Label(self.frame, text='Start').grid(sticky=W)
        self.start_combo = Combobox(self.frame, state='readonly',
                                    width=7)  # start time combobox
        self.start_combo.grid(column=1, row=2, pady=20, sticky=W)
        Label(self.frame, text='End').grid(column=2, row=2, sticky=W)
        self.end_combo = Combobox(self.frame, state='readonly',
                                  width=7)  # end time combobox
        self.end_combo.grid(column=3, row=2, sticky=W)
        Label(self.frame, text='Day').grid(sticky=W)
        self.day_combo = Combobox(self.frame,
                                  state='readonly')  # days combobox
        self.day_combo.grid(column=1, row=3, pady=(0, 20))
        self.search = Button(self.frame,
                             text='Search',
                             width=10,
                             height=2,
                             command=self.add_treeview)  # seach button
        self.search.grid(padx=(0, 50), columnspan=2)
        Label(self.frame, text='Classroom results', bg='gray',
              fg='white').grid(sticky=N + E + W,
                               column=4,
                               row=0,
                               rowspan=5,
                               padx=(55, 0))
        self.scroll = Scrollbar(
            self.frame, orient='vertical')  # vertical scrollbar for treeview
        self.tree = Treeview(self.frame,
                             columns=('', '', '', '', ''),
                             selectmode='extended',
                             show='headings')
        listofcolumn = [
            'Room', 'Traffic', 'Availability %', 'Closeness', 'Overall Score'
        ]  # colums to treeview
        counter = 1
        for column in listofcolumn:
            self.tree.column('#' + str(counter), width=90)  # to resize columns
            self.tree.heading('#' + str(counter), text=column,
                              anchor=CENTER)  # to set headings
            counter += 1
        self.scroll.config(command=self.tree.yview)
        self.tree.config(yscrollcommand=self.scroll.set)
        self.tree.grid(column=4, row=0, rowspan=5, padx=(40, 0), pady=(30, 0))
        self.scroll.grid(column=5,
                         row=0,
                         rowspan=5,
                         sticky=N + S,
                         pady=(30, 0))
        self.urlentry.insert(
            0,
            'https://www.sehir.edu.tr/en/announcements/2018-2019-bahar-donemi-ders-programi'
        )

    def dynamic(self):
        self.color_label.configure(
            bg='yellow'
        )  # make color label yellow at the beginning of the process
        self.update_idletasks()
        self.searcher.fetch(self.urlentry.get(
        ))  # to call fetch method in searcher class to start process
        self.color_label.configure(bg='green')
        room_num = [
            room.room_num
            for room in self.searcher.buildings['ACAD BUILD 1'].classrooms
        ]
        self.where_combo.configure(
            values=[build for build in sorted(self.searcher.buildings)])
        self.where_combo.current(
            0)  # to get values in combobox and set value 0 as a default
        self.room_combo.configure(values=[room for room in sorted(room_num)])
        self.room_combo.current(0)
        self.start_combo.configure(
            values=["{}:00".format(time) for time in range(9, 20)])
        self.start_combo.current(
            0)  # start and end combo both have the same interval from 9 to 19
        self.end_combo.configure(
            values=["{}:00".format(time) for time in range(9, 20)])
        self.end_combo.current(len(self.end_combo['values']) - 1)
        self.day_combo.configure(
            values=["Monday", 'Tuesday', 'Wednesday', 'Thursday', 'Friday'])
        self.day_combo.current(0)

    def change_build(
            self, event
    ):  # when where am i combobox chance, room combobox also chance
        building = self.where_combo.get()
        room_num = [
            room.room_num
            for room in self.searcher.buildings[building].classrooms
        ]
        self.room_combo.configure(values=[room for room in sorted(room_num)])
        self.room_combo.current(0)

    def add_treeview(self):  # to add scores in treeview
        self.tree.delete(*self.tree.get_children())
        self.overall_scores = self.searcher.search(
            self.day_combo.get(),
            self.where_combo.get(), self.room_combo.get(),
            self.start_combo.get(), self.end_combo.get()
        )  # key operator for the sorted dict by values which overall score
        for item, score in sorted(self.overall_scores.items(),
                                  key=operator.itemgetter(1),
                                  reverse=True):
            if item.availability_score == 0:  # to avoid from availability score 0
                continue
            room = str(item.classroom.building_num) + str(
                item.classroom.room_num)
            self.tree.insert('',
                             'end',
                             values=(room, item.traffic_score,
                                     item.availability_score,
                                     item.closeness_score, score))
Beispiel #36
0
    def ventanaVoluntarios(self,row):

        id = -1
        guardar = TRUE
        # Creamos una ventana nueva
        t = Toplevel(self)
        t.wm_title("Crear Voluntario")

        # Etiqueta y entrada de nombre
        Label(t, text="Nombre").grid(row=0)
        entradaNombre = Entry(t)
        entradaNombre.grid(row=0, column=1,sticky = "ew")

        # Etiqueta y entrada de apellidos
        Label(t, text="Apellidos").grid(row=1)
        entradaApellidos = Entry(t)
        entradaApellidos.grid(row=1, column=1,sticky = "ew")

        # Etiqueta y entrada de DNI
        Label(t, text="DNI").grid(row=2)
        entradaDNI = Entry(t)
        entradaDNI.grid(row=2, column=1,sticky = "ew")

        # Etiqueta y entrada de Dirreccion
        Label(t, text="Direccion").grid(row=3)
        entradaDireccion = Entry(t)
        entradaDireccion.grid(row=3, column=1)

        # Etiqueta y seleccion de Estudios
        Label(t, text="Estudios").grid(row=4)
        box_value = StringVar()
        self.getEstudios()
        self.selectorEstudios = Combobox(t, textvariable=box_value, state='readonly')
        self.selectorEstudios['values'] = self.listadoEstudios[0]
        self.selectorEstudios.configure(width=25)
        self.selectorEstudios.current(0)
        self.selectorEstudios.grid(row=4, column=1)

        botonEditarEstudios = Button(t, text="Editar", command=self.editarEstudio)
        botonNuevosEstudios = Button(t, text="Nuevo", command=self.nuevoEstudio)
        botonEditarEstudios.grid(row=4, column=2)
        botonNuevosEstudios.grid(row=4, column=3)

        # Etiqueta y seleccion de Genero
        Label(t, text="Genero").grid(row=5)
        seleccionGenero = Combobox(t, values=["Masculino (M)", "Femenino (F)"], state='readonly')
        seleccionGenero.grid(row=5, column=1)

        # Etiqueta y seleccion de Parroquial
        Label(t, text="Parroquial").grid(row=6)
        box_value = StringVar()
        self.getParroquial()
        self.selectorParroquial = Combobox(t, textvariable=box_value, state='readonly')
        self.selectorParroquial['values'] = self.listadoParroquial[0]
        self.selectorParroquial.configure(width=25)
        self.selectorParroquial.current(0)
        self.selectorParroquial.grid(row=6, column=1)

        botonEditarParroquial = Button(t, text="Editar", command=self.editarParroquia)
        botonNuevaParroqual = Button(t, text="Nuevo", command=self.nuevaParroquia)
        botonEditarParroquial.grid(row=6, column=2)
        botonNuevaParroqual.grid(row=6, column=3)

        # Etiqueta y seleccion de Correo
        Label(t, text="Correo").grid(row=0, column=4)
        entradaCorreo = Entry(t)
        entradaCorreo.grid(row=0, column=5)

        Label(t, text="Telefono 1").grid(row=1, column=4)
        entradaTelefono1 = Entry(t)
        entradaTelefono1.grid(row=1, column=5)

        Label(t, text="Telefono 2").grid(row=2, column=4)
        entradaTelefono2 = Entry(t)
        entradaTelefono2.grid(row=2, column=5)

        # Etiqueta y entrada de Fecha
        Label(t, text="Fecha").grid(row=3, column=4)
        entradaAno = Entry(t)
        entradaMes = Entry(t)
        entradaDia = Entry(t)
        entradaAno.grid(row=3, column=5)
        entradaMes.grid(row=3, column=6)
        entradaDia.grid(row=3, column=7)

        # Etiqueta y seleccion de Pais
        Label(t, text="Pais").grid(row=4, column=4)
        box_value = StringVar()
        self.getPais()
        self.selectorPais = Combobox(t, textvariable=box_value, state='readonly')
        self.selectorPais['values'] = self.listadoPais[0]
        self.selectorPais.configure(width=25)
        self.selectorPais.current(0)
        self.selectorPais.grid(row=4, column=5)

        botonEditarPais = Button(t, text="Editar", command=self.editarPais)
        botonNuevaPais = Button(t, text="Nuevo", command=self.nuevoPais)
        botonEditarPais.grid(row=4, column=6)
        botonNuevaPais.grid(row=4, column=7)

        #Rellenamos los cambos si estamos editando
        if row > -1:
            voluntario = self.table.model.getRecordAtRow(row)
            entradaNombre.insert(END,voluntario['nombre'])
            entradaApellidos.insert(END,voluntario['apellidos'])
            entradaCorreo.insert(END,voluntario['correo_electronico'])
            entradaTelefono1.insert(END,voluntario['telefono_1'])
            entradaTelefono2.insert(END,voluntario['telefono_2'])
            entradaDireccion.insert(END,voluntario['direccion'])
            entradaDNI.insert(END,voluntario['dni'])
            self.selectorEstudios.set(voluntario['estudio'])
            self.selectorParroquial.set(voluntario['parroquial'])
            guardar = FALSE
            id = voluntario['id']





        button5 = Button(t, text="Guardar", command=lambda: self.nuevoVoluntario(entradaNombre.get(),
                                                                                 entradaApellidos.get(),entradaDNI.get(),entradaDireccion.get(),
                                                                                 entradaCorreo.get(),1,self.listadoEstudios[1][self.selectorEstudios.current()],
                                                                                 self.listadoParroquial[1][self.selectorParroquial.current()],
                                                                                 1,entradaTelefono1.get(),entradaTelefono2.get(),"M","2001-01-01",t,guardar,id))
        button6 = Button(t, text="Cancelar", command=t.destroy)

        button5.grid(row=7, column=4)
        button6.grid(row=7, column=5)
Beispiel #37
0
    radiobutton1 = Radiobutton(column,
                               variable=variable,
                               value="value1",
                               text="Selection 1")
    radiobutton0.fieldname = "radiobutton"
    radiobutton1.pack(side=LEFT)

    Label(form, text="Text area:").grid(row=6, column=0, sticky=E, pady=(8, 0))

    text = Text(form, height=5)
    text.fieldname = "text"
    text.grid(row=7, column=1, sticky=E + W)

    Label(form, text="Listbox:").grid(row=8, column=0, sticky=E, pady=(8, 0))

    listbox = Listbox(form)
    listbox.fieldname = "listbox"
    listbox.grid(row=9, column=1, sticky=W)

    for item in ["one", "two", "three", "four"]:
        listbox.insert("end", item)

    Label(form, text="Combobox:").grid(row=10, column=0, sticky=E, pady=(8, 0))

    combobox = Combobox(form, values=('X', 'Y', 'Z'), width=5)
    combobox.fieldname = "combobox"
    combobox.grid(row=11, column=1, sticky=W)

    Submit_Button(form, text="Submit").grid(row=12, column=1, sticky=E)

    root.mainloop()
Beispiel #38
0
class Example(Frame):
    counter = 0

    def __init__(self, parent):
        Frame.__init__(self, parent)

        self.parent = parent

        self.initUI()

    def nuevoVoluntario(self, nombre, apellidos, dni, direccion, correo_electronico, localidad_id, estudio_id,
                        parroquial_id, proyecto_id, telefono_1, telefono_2, genero, fecha_nacimiento,t,estado,id):
        global cnx
        cursor = cnx.cursor()
        if estado:
            query = (
                "INSERT INTO caritas.voluntario (nombre, apellidos, dni, direccion, correo_electronico, localidad_id, estudio_id, parroquial_id, proyecto_id, telefono_1, telefono_2, genero, fecha_nacimiento) VALUES ('%s','%s','%s','%s','%s','%d','%d','%d','%d','%s','%s','%s','%s')" % (
                    nombre, apellidos, dni, direccion, correo_electronico, localidad_id, estudio_id, parroquial_id,
                    proyecto_id,
                    telefono_1, telefono_2, genero, fecha_nacimiento))
        else:
            query = (
                "UPDATE caritas.voluntario SET nombre = ('%s'), apellidos = ('%s'), dni = ('%s'), direccion = ('%s'), correo_electronico = ('%s'), localidad_id = ('%d'), estudio_id = ('%d'), parroquial_id = ('%d'),proyecto_id = ('%d'), telefono_1 = ('%s'), telefono_2 = ('%s'), genero = ('%s'), fecha_nacimiento = ('%s') WHERE id = ('%d')"
                % ( nombre, apellidos, dni, direccion, correo_electronico, localidad_id, estudio_id, parroquial_id,proyecto_id, telefono_1, telefono_2, genero, fecha_nacimiento,id))
        cursor.execute(query)
        cnx.commit()
        cursor.close()

        t.destroy()

    def getEstudios(self):
        global cnx
        cursor = cnx.cursor(dictionary=True)
        query = ("SELECT * FROM estudio e")
        cursor.execute(query)
        valores = []
        strings = []
        for row in cursor:
            valores.append(row['id'])
            strings.append(row['nombre'])

        cursor.close()
        self.listadoEstudios = [strings, valores]

    def getParroquial(self):
        global cnx
        cursor = cnx.cursor(dictionary=True)
        query = ("SELECT * FROM parroquial e")
        cursor.execute(query)
        valores = []
        strings = []
        for row in cursor:
            valores.append(row['id'])
            strings.append(row['nombre'])

        cursor.close()
        self.listadoParroquial = [strings, valores]

    def getPais(self):
        global cnx
        cursor = cnx.cursor(dictionary=True)
        query = ("SELECT * FROM pais e")
        cursor.execute(query)
        valores = []
        strings = []
        for row in cursor:
            valores.append(row['id'])
            strings.append(row['nombre'])

        cursor.close()
        self.listadoPais = [strings, valores]

    def nuevoEstudio(self):
        t = Toplevel(self)
        t.wm_title("Estudio")

        Label(t, text="Nombre").grid(row=0, column=1)
        E2 = Entry(t)
        E2.grid(row=1, column=1)

        button1 = Button(t, text="Cancelar", command=lambda: t.destroy())
        button2 = Button(t, text="Guardar", command=lambda: self.nuevaEntradaEstudios(E2.get(), t))
        button3 = Button(t, text="Borrar", command=lambda: self.BorrarEstudios(E2.get(), t))
        button3.config(state="disabled")

        button1.grid(row=2, column=0)
        button2.grid(row=2, column=1)
        button3.grid(row=2, column=2)

    def nuevoPais(self):
        t = Toplevel(self)
        t.wm_title("Pais")

        Label(t, text="Nombre").grid(row=0, column=1)
        E2 = Entry(t)
        E2.grid(row=1, column=1)

        button1 = Button(t, text="Cancelar", command=lambda: t.destroy())
        button2 = Button(t, text="Guardar", command=lambda: self.nuevaEntradaPais(E2.get(), t))
        button3 = Button(t, text="Borrar", command=lambda: self.BorrarPais(E2.get(), t))
        button3.config(state="disabled")

        button1.grid(row=2, column=0)
        button2.grid(row=2, column=1)
        button3.grid(row=2, column=2)

    def nuevaParroquia(self):
        t = Toplevel(self)
        t.wm_title("Parroquial")

        Label(t, text="Nombre").grid(row=0, column=1)
        E2 = Entry(t)
        E2.grid(row=1, column=1)

        button1 = Button(t, text="Cancelar", command=lambda: t.destroy())
        button2 = Button(t, text="Guardar", command=lambda: self.nuevaEntradaParroquia(E2.get(), t))
        button3 = Button(t, text="Borrar", command=lambda: self.BorrarParroquial(E2.get(), t))
        button3.config(state="disabled")

        button1.grid(row=2, column=0)
        button2.grid(row=2, column=1)
        button3.grid(row=2, column=2)

    def editarEstudio(self):
        t = Toplevel(self)
        t.wm_title("Estudio")

        Label(t, text="Nombre").grid(row=0, column=1)
        E2 = Entry(t)
        E2.insert(END, self.selectorEstudios.get())
        E2.grid(row=1, column=1)

        nombreOld = self.selectorEstudios.get()


        button1 = Button(t, text="Cancelar", command=lambda: t.destroy())
        button2 = Button(t, text="Guardar", command=lambda: self.actualizarEstudio(nombreOld, E2.get(), t))
        button3 = Button(t, text="Borrar", command=lambda: self.BorrarEstudios(E2.get(), t))

        button1.grid(row=2, column=0)
        button2.grid(row=2, column=1)
        button3.grid(row=2, column=2)

    def editarPais(self):
        t = Toplevel(self)
        t.wm_title("Pais")

        Label(t, text="Nombre").grid(row=0, column=1)
        E2 = Entry(t)
        E2.insert(END, self.selectorPais.get())
        E2.grid(row=1, column=1)

        nombreOld = self.selectorPais.get()

        button1 = Button(t, text="Cancelar", command=lambda: t.destroy())
        button2 = Button(t, text="Guardar", command=lambda: self.actualizarPais(nombreOld, E2.get(), t))
        button3 = Button(t, text="Borrar", command=lambda: self.BorrarPais(E2.get(), t))

        button1.grid(row=2, column=0)
        button2.grid(row=2, column=1)
        button3.grid(row=2, column=2)

    def editarParroquia(self):
        t = Toplevel(self)
        t.wm_title("Estudio")

        Label(t, text="Nombre").grid(row=0, column=1)
        E2 = Entry(t)
        E2.insert(END, self.selectorParroquial.get())
        E2.grid(row=1, column=1)

        nombreOld = self.selectorParroquial.get()

        button1 = Button(t, text="Cancelar", command=lambda: t.destroy())
        button2 = Button(t, text="Guardar", command=lambda: self.actualizarParroquia(nombreOld, E2.get(), t))
        button3 = Button(t, text="Borrar", command=lambda: self.BorrarParroquial(E2.get(), t))

        button1.grid(row=2, column=0)
        button2.grid(row=2, column=1)
        button3.grid(row=2, column=2)

    def actualizarPais(self, nombreOld, nombreN, t):
        global cnx
        cursor = cnx.cursor()
        query = ("UPDATE caritas.pais SET nombre= ('%s') WHERE nombre = ('%s')" % (nombreN, nombreOld))
        cursor.execute(query)
        cnx.commit()
        cursor.close()

        self.getPais()
        self.selectorPais['values'] = self.listadoPais[0]

        t.destroy()

    def actualizarEstudio(self, nombreOld, nombreN, t):
        global cnx
        cursor = cnx.cursor()
        query = ("UPDATE caritas.estudio SET nombre= ('%s') WHERE nombre = ('%s')" % (nombreN, nombreOld))
        cursor.execute(query)
        cnx.commit()
        cursor.close()

        self.getEstudios()
        self.selectorEstudios['values'] = self.listadoEstudios[0]

        t.destroy()

    def actualizarParroquia(self, nombreOld, nombreN, t):
        global cnx
        cursor = cnx.cursor()
        query = ("UPDATE caritas.parroquial SET nombre= ('%s') WHERE nombre = ('%s')" % (nombreN, nombreOld))
        cursor.execute(query)
        cnx.commit()
        cursor.close()

        self.getParroquial()
        self.selectorParroquial['values'] = self.listadoParroquial[0]

        t.destroy()

    def BorrarEstudios(self, nombre, t):
        global cnx
        cursor = cnx.cursor()
        query = ("DELETE FROM caritas.estudio WHERE nombre = ('%s')" % nombre)
        cursor.execute(query)
        cnx.commit()
        cursor.close()

        self.getEstudios()
        self.selectorEstudios['values'] = self.listadoEstudios[0]

        t.destroy()

    def BorrarPais(self, nombre, t):
        global cnx
        cursor = cnx.cursor()
        query = ("DELETE FROM caritas.pais WHERE nombre = ('%s')" % nombre)
        cursor.execute(query)
        cnx.commit()
        cursor.close()

        self.getPais()
        self.selectorPais['values'] = self.listadoPais[0]

        t.destroy()

    def BorrarParroquial(self, nombre, t):
        global cnx
        cursor = cnx.cursor()
        query = ("DELETE FROM caritas.parroquial WHERE nombre = ('%s')" % nombre)
        cursor.execute(query)
        cnx.commit()
        cursor.close()

        self.getParroquial()
        self.selectorParroquial['values'] = self.listadoParroquial[0]

        t.destroy()

    def nuevaEntradaEstudios(self, nombre, t):
        global cnx
        cursor = cnx.cursor()
        query = ("INSERT INTO caritas.estudio (nombre) VALUE ('%s')" % nombre)
        cursor.execute(query)
        cnx.commit()
        cursor.close()

        self.getEstudios()
        self.selectorEstudios['values'] = self.listadoEstudios[0]

        t.destroy()

    def nuevaEntradaPais(self, nombre, t):
        global cnx
        cursor = cnx.cursor()
        query = ("INSERT INTO caritas.pais (nombre) VALUE ('%s')" % nombre)
        cursor.execute(query)
        cnx.commit()
        cursor.close()

        self.getPais()
        self.selectorPais['values'] = self.listadoPais[0]

        t.destroy()

    def nuevaEntradaParroquia(self, nombre, t):
        global cnx
        cursor = cnx.cursor()
        query = ("INSERT INTO caritas.parroquial (nombre) VALUE ('%s')" % nombre)
        cursor.execute(query)
        cnx.commit()
        cursor.close()

        self.getParroquial()
        self.selectorParroquial['values'] = self.listadoParroquial[0]

        t.destroy()

    def ventanaVoluntarios(self,row):

        id = -1
        guardar = TRUE
        # Creamos una ventana nueva
        t = Toplevel(self)
        t.wm_title("Crear Voluntario")

        # Etiqueta y entrada de nombre
        Label(t, text="Nombre").grid(row=0)
        entradaNombre = Entry(t)
        entradaNombre.grid(row=0, column=1,sticky = "ew")

        # Etiqueta y entrada de apellidos
        Label(t, text="Apellidos").grid(row=1)
        entradaApellidos = Entry(t)
        entradaApellidos.grid(row=1, column=1,sticky = "ew")

        # Etiqueta y entrada de DNI
        Label(t, text="DNI").grid(row=2)
        entradaDNI = Entry(t)
        entradaDNI.grid(row=2, column=1,sticky = "ew")

        # Etiqueta y entrada de Dirreccion
        Label(t, text="Direccion").grid(row=3)
        entradaDireccion = Entry(t)
        entradaDireccion.grid(row=3, column=1)

        # Etiqueta y seleccion de Estudios
        Label(t, text="Estudios").grid(row=4)
        box_value = StringVar()
        self.getEstudios()
        self.selectorEstudios = Combobox(t, textvariable=box_value, state='readonly')
        self.selectorEstudios['values'] = self.listadoEstudios[0]
        self.selectorEstudios.configure(width=25)
        self.selectorEstudios.current(0)
        self.selectorEstudios.grid(row=4, column=1)

        botonEditarEstudios = Button(t, text="Editar", command=self.editarEstudio)
        botonNuevosEstudios = Button(t, text="Nuevo", command=self.nuevoEstudio)
        botonEditarEstudios.grid(row=4, column=2)
        botonNuevosEstudios.grid(row=4, column=3)

        # Etiqueta y seleccion de Genero
        Label(t, text="Genero").grid(row=5)
        seleccionGenero = Combobox(t, values=["Masculino (M)", "Femenino (F)"], state='readonly')
        seleccionGenero.grid(row=5, column=1)

        # Etiqueta y seleccion de Parroquial
        Label(t, text="Parroquial").grid(row=6)
        box_value = StringVar()
        self.getParroquial()
        self.selectorParroquial = Combobox(t, textvariable=box_value, state='readonly')
        self.selectorParroquial['values'] = self.listadoParroquial[0]
        self.selectorParroquial.configure(width=25)
        self.selectorParroquial.current(0)
        self.selectorParroquial.grid(row=6, column=1)

        botonEditarParroquial = Button(t, text="Editar", command=self.editarParroquia)
        botonNuevaParroqual = Button(t, text="Nuevo", command=self.nuevaParroquia)
        botonEditarParroquial.grid(row=6, column=2)
        botonNuevaParroqual.grid(row=6, column=3)

        # Etiqueta y seleccion de Correo
        Label(t, text="Correo").grid(row=0, column=4)
        entradaCorreo = Entry(t)
        entradaCorreo.grid(row=0, column=5)

        Label(t, text="Telefono 1").grid(row=1, column=4)
        entradaTelefono1 = Entry(t)
        entradaTelefono1.grid(row=1, column=5)

        Label(t, text="Telefono 2").grid(row=2, column=4)
        entradaTelefono2 = Entry(t)
        entradaTelefono2.grid(row=2, column=5)

        # Etiqueta y entrada de Fecha
        Label(t, text="Fecha").grid(row=3, column=4)
        entradaAno = Entry(t)
        entradaMes = Entry(t)
        entradaDia = Entry(t)
        entradaAno.grid(row=3, column=5)
        entradaMes.grid(row=3, column=6)
        entradaDia.grid(row=3, column=7)

        # Etiqueta y seleccion de Pais
        Label(t, text="Pais").grid(row=4, column=4)
        box_value = StringVar()
        self.getPais()
        self.selectorPais = Combobox(t, textvariable=box_value, state='readonly')
        self.selectorPais['values'] = self.listadoPais[0]
        self.selectorPais.configure(width=25)
        self.selectorPais.current(0)
        self.selectorPais.grid(row=4, column=5)

        botonEditarPais = Button(t, text="Editar", command=self.editarPais)
        botonNuevaPais = Button(t, text="Nuevo", command=self.nuevoPais)
        botonEditarPais.grid(row=4, column=6)
        botonNuevaPais.grid(row=4, column=7)

        #Rellenamos los cambos si estamos editando
        if row > -1:
            voluntario = self.table.model.getRecordAtRow(row)
            entradaNombre.insert(END,voluntario['nombre'])
            entradaApellidos.insert(END,voluntario['apellidos'])
            entradaCorreo.insert(END,voluntario['correo_electronico'])
            entradaTelefono1.insert(END,voluntario['telefono_1'])
            entradaTelefono2.insert(END,voluntario['telefono_2'])
            entradaDireccion.insert(END,voluntario['direccion'])
            entradaDNI.insert(END,voluntario['dni'])
            self.selectorEstudios.set(voluntario['estudio'])
            self.selectorParroquial.set(voluntario['parroquial'])
            guardar = FALSE
            id = voluntario['id']





        button5 = Button(t, text="Guardar", command=lambda: self.nuevoVoluntario(entradaNombre.get(),
                                                                                 entradaApellidos.get(),entradaDNI.get(),entradaDireccion.get(),
                                                                                 entradaCorreo.get(),1,self.listadoEstudios[1][self.selectorEstudios.current()],
                                                                                 self.listadoParroquial[1][self.selectorParroquial.current()],
                                                                                 1,entradaTelefono1.get(),entradaTelefono2.get(),"M","2001-01-01",t,guardar,id))
        button6 = Button(t, text="Cancelar", command=t.destroy)

        button5.grid(row=7, column=4)
        button6.grid(row=7, column=5)


    def validarVoluntario(self, nombre, apellidos, dni, direccion, correo_electronico, localidad_id, estudio_id,
                        parroquial_id, proyecto_id, telefono_1, telefono_2, genero, fecha_nacimiento,t,estado,id):

        guarda = True
        error = ""

        if len(nombre)<3 :
            error = error + "Nombre debe tener mas de 2 caracteres\n"
            guarda = False

        if len(apellidos)<3 :
            error = error + "Apellidos debe tener mas de 2 caracteres\n"
            guarda = False

        if len(dni)==9 and dni[8].isalpha() and dni[0-7].isdigit():
            error = error + "Dni tiene el formato NNNNNNNNX donde N es un digito y X una letra \n"
            guarda = False

        if len(direccion)==0:
            error = error + "Introduzca una Dirección \n"
            guarda = False

        if len(correo_electronico)<5:
            error = error + "Introduzca una dirección de correo valida \n"
            guarda = False


        if len(telefono_1)<9:
            error = error + "Introduzca un numero valido \n"
            guarda = False

        if len(telefono_1)==0:
            telefono_1=0

        if guarda:self.nuevoVoluntario(nombre, apellidos, dni, direccion, correo_electronico, localidad_id, estudio_id,
                        parroquial_id, proyecto_id, telefono_1, telefono_2, genero, fecha_nacimiento,t,estado,id)
        # añadir el error
        else:
            print error

    def ventanaImprimir(self):
        t = Toplevel(self)
        t.wm_title("Imprimir")

        Label(t, text="Numero de Copias por etiqueta").pack()
        w = Spinbox(t, from_=1, to=10)
        w.pack()

        buttonImprimir = Button(t, text="Imprimir",  command=lambda:self.imprimir(int(w.get()),t))
        buttonImprimir.pack()

    def agregarListado(self,numero):
        voluntario = self.table.model.getRecordAtRow(numero)
        modelNuevo = TableModel()

        modelNuevo.addColumn("nombre")
        modelNuevo.addColumn("apellidos")
        modelNuevo.addColumn("dni")
        modelNuevo.addColumn("direccion")
        modelNuevo.addColumn("correo_electronico")
        modelNuevo.addColumn("estudio")
        modelNuevo.addColumn("parroquial")
        modelNuevo.addColumn("proyecto")
        modelNuevo.addColumn("genero")
        modelNuevo.addColumn("fecha_nacimiento")
        modelNuevo.addColumn("telefono_1")
        modelNuevo.addColumn("telefono_2")

        arrayListado = self.selectTable.getModel().data
        valores = {}
        i=1
        for values in arrayListado:
            valores['row',i]=arrayListado['row',i]
            i+=1
        valores['row',i]=voluntario
        modelNuevo.importDict(valores)

        self.selectTable.updateModel(modelNuevo)
        self.selectTable.redrawTable()

    def quitarListado(self,numero):
        voluntario = self.selectTable.model.getRecordAtRow(numero)
        modelNuevo = TableModel()

        modelNuevo.addColumn("nombre")
        modelNuevo.addColumn("apellidos")
        modelNuevo.addColumn("dni")
        modelNuevo.addColumn("direccion")
        modelNuevo.addColumn("correo_electronico")
        modelNuevo.addColumn("estudio")
        modelNuevo.addColumn("parroquial")
        modelNuevo.addColumn("proyecto")
        modelNuevo.addColumn("genero")
        modelNuevo.addColumn("fecha_nacimiento")
        modelNuevo.addColumn("telefono_1")
        modelNuevo.addColumn("telefono_2")

        print numero

        arrayListado = self.selectTable.getModel().data
        valores = {}
        i=1
        for values in arrayListado:
            if numero+1 != i:
                valores['row',i]=arrayListado['row',i]
            i+=1
        modelNuevo.importDict(valores)

        self.selectTable.updateModel(modelNuevo)
        self.selectTable.redrawTable()

    def imprimir(self,numero,label):
        pdf = fpdf.FPDF(format='letter')
        pdf.add_page()
        pdf.set_font("Arial", size=14)

        indice=1
        columna=1
        fila=0
        p=0
        for ficha in self.listadoSeleccionado:
            row = self.listadoSeleccionado['row',indice]
            for x in range(0, numero):
                if p==9:
                    pdf.add_page()
                    p=0
                else:
                    p+=1

                texto = 'Nombre: %s\nApellidos: %s\nDireccion: %s\nTelefono: %s' %(row["nombre"],row["apellidos"],row["direccion"],row["telefono_1"])
                pdf.multi_cell(65, 10,texto,align='C')
                pdf.set_xy(70*columna,60*fila +10)
                columna = columna + 1
                if columna == 4:
                    columna=1
                    fila=fila+1
                    pdf.set_xy(10,60*fila +10)

            indice = indice + 1
        pdf.output("tutorial.pdf")

        label.destroy()

    def buscar(self,nombre,apellidos):

        modelCompleto = TableModel()
        modelNuevo = TableModel()

        modelNuevo.addColumn("nombre")
        modelNuevo.addColumn("apellidos")
        modelNuevo.addColumn("dni")
        modelNuevo.addColumn("direccion")
        modelNuevo.addColumn("correo_electronico")
        modelNuevo.addColumn("estudio")
        modelNuevo.addColumn("parroquial")
        modelNuevo.addColumn("proyecto")
        modelNuevo.addColumn("genero")
        modelNuevo.addColumn("fecha_nacimiento")
        modelNuevo.addColumn("telefono_1")
        modelNuevo.addColumn("telefono_2")

        self.listilla= queryAllVoluntarios()
        modelCompleto.importDict(self.listilla)
        searchterms = [('nombre', nombre, 'contains', 'AND'),('apellidos', apellidos, 'contains', 'AND')]
        result=modelCompleto.getDict(modelCompleto.columnNames, filters=searchterms)
        modelNuevo.importDict(result)
        self.listadoSeleccionado = result
        self.table.updateModel(modelNuevo)
        self.table.redrawTable()

    def eventoClic(self):
        print "Clicado"
        return


    def initUI(self):

        self.parent.title("Caritas")
        self.style = Style()
        self.style.theme_use("default")

        self.pack(fill=BOTH, expand=1)

        frameMenu = Frame(self)
        frameMenu.pack(fill="both", expand="0", side=RIGHT)

        labelBusqueda = LabelFrame(frameMenu, text="Busqueda")
        labelBusqueda.pack(fill="x",expand =1)

        labelVoluntarios = LabelFrame(frameMenu)
        labelVoluntarios.pack(fill="both",expand =0)

        frameTabla = Frame(self)
        frameTabla.pack(fill="both", expand="1", side=LEFT)

        labelTabla = LabelFrame(frameTabla)
        labelTabla.pack(fill="both", expand="1")

        labelBotonera = LabelFrame(frameTabla)
        labelTabla.pack(fill="both", expand="1")

        labelSelect = LabelFrame(frameTabla)
        labelSelect.pack(fill="both", expand="1")

        model = TableModel()
        modelSelect = TableModel()

        model.addColumn("nombre")
        model.addColumn("apellidos")
        model.addColumn("dni")
        model.addColumn("direccion")
        model.addColumn("correo_electronico")
        model.addColumn("estudio")
        model.addColumn("parroquial")
        model.addColumn("proyecto")
        model.addColumn("genero")
        model.addColumn("fecha_nacimiento")
        model.addColumn("telefono_1")
        model.addColumn("telefono_2")

        modelSelect.addColumn("nombre")
        modelSelect.addColumn("apellidos")
        modelSelect.addColumn("dni")
        modelSelect.addColumn("direccion")
        modelSelect.addColumn("correo_electronico")
        modelSelect.addColumn("estudio")
        modelSelect.addColumn("parroquial")
        modelSelect.addColumn("proyecto")
        modelSelect.addColumn("genero")
        modelSelect.addColumn("fecha_nacimiento")
        modelSelect.addColumn("telefono_1")
        modelSelect.addColumn("telefono_2")

        #Tabla Voluntarios
        self.listilla= queryAllVoluntarios()
        model.importDict(self.listilla)
        self.table = TableCanvas(labelTabla, model=model,editable=False)
        self.table.createTableFrame()
        self.table.handle_double_click(self.eventoClic)

        #Tabla Seleccionados
        self.selectTable = TableCanvas(labelSelect, model=modelSelect,editable=False)
        self.selectTable.createTableFrame()
        self.listadoSeleccionado = []

        L1 = Label(labelBusqueda, text="Nombre")
        L1.pack()
        E1 = Entry(labelBusqueda)
        E1.pack()

        L2 = Label(labelBusqueda, text="Apellidos")
        L2.pack()
        E2 = Entry(labelBusqueda)
        E2.pack()

        botonArriba = Button(labelVoluntarios, text="Agregar al listado",  command=lambda:self.agregarListado(self.table.getSelectedRow()))
        botonArriba.pack()
        botonAbajo = Button(labelVoluntarios, text="Quitar del listado",  command=lambda:self.quitarListado(self.selectTable.getSelectedRow()))
        botonAbajo.pack()

        button = Button(labelBusqueda, text="Buscar", command=lambda: self.buscar(E1.get(),E2.get()))
        button.pack()

        button = Button(labelVoluntarios, text="Nuevo Voluntario",  command=lambda:self.ventanaVoluntarios(-1))
        button.pack()

        buttonEditar = Button(labelVoluntarios, text="Editar Voluntario",  command=lambda:self.ventanaVoluntarios(self.table.getSelectedRow()))
        buttonEditar.pack()

        buttonImprimir = Button(labelVoluntarios, text="Imprimir",  command=lambda:self.ventanaImprimir())
        buttonImprimir.pack()
class path_planner_gui(StoppableThread):
    DEFAULT_START_LAT = 55.434352  #55.43526 #55.431122
    DEFAULT_START_LON = 10.415182  #10.41086 #10.420436
    DEFAULT_GOAL_LAT = 55.42474  #55.427203
    DEFAULT_GOAL_LON = 10.41975  #10.419043

    # for testing altitude - points near Hindsgavl, Middelfart
    # start_point_3dDICT = {'lat': 55.505618, 'lon': 9.681612, 'alt_rel': 0}
    # goal_point_3dDICT  = {'lat': 55.518093, 'lon': 9.699519, 'alt_rel': 0}
    # goal inside geofence: 55.429331, 10.422770

    DEFAULT_STEP_SIZE_HORZ_ASTAR = 100
    DEFAULT_STEP_SIZE_VERT_ASTAR = 10
    DEFAULT_STEP_SIZE_HORZ_RRT = 50
    DEFAULT_STEP_SIZE_VERT_RRT = 10
    DEFAULT_SEARCH_TIME_MAX = 120  # unit: s
    DEFAULT_ITERATIONS_MAX = 3000

    DEFAULT_TIME_STEP = 1.0  # unit: s
    DEFAULT_ACCELERATION_FACTOR = 10.0  # unitless

    DEFAULT_STEP_SIZE_HORZ_LOCAL_ASTAR = 50
    DEFAULT_STEP_SIZE_VERT_LOCAL_ASTAR = 5
    DEFAULT_SEARCH_TIME_MAX_LOCAL = 180  # unit: s

    DEFAULT_STEP_SIZE_HORZ_LOCAL_RRT = 25
    DEFAULT_STEP_SIZE_VERT_LOCAL_RRT = 5
    DEFAULT_ITERATIONS_MAX_LOCAL = 3000  # unit: s

    INITIAL_PLANNER = 1

    def __init__(self, parent_class, auto_start=False):
        # self.__class__ = type(self.__class__.__name__, (base_class, object), dict(self.__class__.__dict__))
        # super(self.__class__, self).__init__()
        self.parent_class = parent_class

        StoppableThread.__init__(self)
        self.q = Queue()

        self.logger = logging.getLogger(__name__)
        if auto_start:
            self.start()

    def stop_thread(self):
        self.callback_close()
        self.stop()

    def callback_close(self):
        self.root.quit()
        self.logger.info(
            'Tkinter GUI has stopped but thread will first be joined upon closing of the program'
        )

    def on_main_thread(self, func):
        self.q.put(func)

    def check_queue(self):
        while True:
            try:
                task = self.q.get(block=False)
            except Empty:
                break
            else:
                self.root.after_idle(task)
        self.root.after(100, self.check_queue)

    def set_label_no_fly_zones(self, txt, color='black'):
        self.label_data_source_no_fly_zones_res.configure(text=txt)
        self.label_data_source_no_fly_zones_res.configure(fg=color)

    def set_label_height_map(self, txt, color='black'):
        self.label_data_source_height_map_res.configure(text=txt)
        self.label_data_source_height_map_res.configure(fg=color)

    def set_label_drone_id(self, txt, color='black'):
        self.label_data_source_droneID_res.configure(text=txt)
        self.label_data_source_droneID_res.configure(fg=color)

    def set_label_adsb(self, txt, color='black'):
        self.label_data_source_adsb_res.configure(text=txt)
        self.label_data_source_adsb_res.configure(fg=color)

    def set_label_weather(self, txt, color='black'):
        self.label_data_source_weather_res.configure(text=txt)
        self.label_data_source_weather_res.configure(fg=color)

    def set_label_rally_points(self, txt, color='black'):
        self.label_data_rally_point_res.configure(text=txt)
        self.label_data_rally_point_res.configure(fg=color)

    def set_global_plan_start_heuristic(self, val, color='black'):
        self.label_global_plan_start_heuristic_res.configure(text='%.02f' %
                                                             val)
        self.label_global_plan_start_heuristic_res.configure(fg=color)

    def set_global_plan_cur_heuristic(self, val, color='black'):
        self.label_global_plan_cur_heuristic_res.configure(text='%.02f' % val)
        self.label_global_plan_cur_heuristic_res.configure(fg=color)

    def set_global_plan_horz_step_size(self, val, color='black'):
        self.label_global_plan_horz_step_size_res.configure(text='%.01f [m]' %
                                                            val)
        self.label_global_plan_horz_step_size_res.configure(fg=color)

    def set_global_plan_vert_step_size(self, val, color='black'):
        self.label_global_plan_vert_step_size_res.configure(text='%.01f [m]' %
                                                            val)
        self.label_global_plan_vert_step_size_res.configure(fg=color)

    def set_global_plan_status(self, txt, color='black'):
        self.label_global_plan_status_res.configure(text=txt)
        self.label_global_plan_status_res.configure(fg=color)

    def set_global_plan_search_time(self, val, color='black'):
        self.label_global_plan_search_time_res.configure(text='%.01f [s]' %
                                                         val)
        self.label_global_plan_search_time_res.configure(fg=color)

    def set_global_plan_nodes_visited(self, val, color='black'):
        self.label_global_plan_nodes_visited_res.configure(text='%i' % val)
        self.label_global_plan_nodes_visited_res.configure(fg=color)

    def set_global_plan_nodes_explored(self, val, color='black'):
        self.label_global_plan_nodes_explored_res.configure(text='%i' % val)
        self.label_global_plan_nodes_explored_res.configure(fg=color)

    def set_label_gpe_fitness(self, val, color='black'):
        self.label_gpe_fitness_res.configure(text='%f' % val)
        self.label_gpe_fitness_res.configure(fg=color)

    def set_label_gpe_dist_tot(self, val, color='black'):
        self.label_gpe_dist_tot_res.configure(text='%.02f [m]' % val)
        self.label_gpe_dist_tot_res.configure(fg=color)

    def set_label_gpe_dist_horz(self, val, color='black'):
        self.label_gpe_dist_horz_res.configure(text='%.02f [m]' % val)
        self.label_gpe_dist_horz_res.configure(fg=color)

    def set_label_gpe_dist_vert(self, val, color='black'):
        self.label_gpe_dist_vert_res.configure(text='%.02f [m]' % val)
        self.label_gpe_dist_vert_res.configure(fg=color)

    def set_label_gpe_eta(self, val, color='black'):
        self.label_gpe_eta_res.configure(text='%.02f [s]' % val)
        self.label_gpe_eta_res.configure(fg=color)

    def set_label_gpe_wps(self, val, color='black'):
        self.label_gpe_wps_res.configure(text='%i' % val)
        self.label_gpe_wps_res.configure(fg=color)

    def set_label_gpe_runtime(self, val, color='black'):
        self.label_gpe_runtime_res.configure(text='%.02f [s]' % val)
        self.label_gpe_runtime_res.configure(fg=color)

    def set_label_gpe_bytes_tot(self, val, color='black'):
        self.label_gpe_bytes_tot_res.configure(text='%i' % val)
        self.label_gpe_bytes_tot_res.configure(fg=color)

    def set_label_gpe_objects_tot(self, val, color='black'):
        self.label_gpe_objects_tot_res.configure(text='%i' % val)
        self.label_gpe_objects_tot_res.configure(fg=color)

    def set_label_gpe_bytes_planner(self, val, color='black'):
        self.label_gpe_bytes_planner_res.configure(text='%i' % val)
        self.label_gpe_bytes_planner_res.configure(fg=color)

    def set_label_gpe_objects_planner(self, val, color='black'):
        self.label_gpe_objects_planner_res.configure(text='%i' % val)
        self.label_gpe_objects_planner_res.configure(fg=color)

    def set_scrolledtext_global_path(self, txt):
        self.scrolledtext_global_path.delete(1.0, END)
        self.scrolledtext_global_path.insert(INSERT, txt)

    def set_scrolledtext_local_path(self, txt):
        self.scrolledtext_local_path.delete(1.0, END)
        self.scrolledtext_local_path.insert(INSERT, txt)

    def enable_button_global_plan(self):
        self.button_global_plan.configure(state='normal')

    def diable_button_global_plan(self):
        self.button_global_plan.configure(state='disabled')

    def set_label_local_plan_status(self, txt, color='black'):
        self.label_local_plan_status_res.configure(text=txt)
        self.label_local_plan_status_res.configure(fg=color)

    def set_label_local_plan_time(self, val, color='black'):
        self.label_local_plan_time_res.configure(text='%.02f [s]' % val)
        self.label_local_plan_time_res.configure(fg=color)

    def set_label_local_uav_y(self, val, color='black'):
        self.label_local_uav_y_res.configure(text='%.01f [m]' % val)
        self.label_local_uav_y_res.configure(fg=color)

    def set_label_local_uav_x(self, val, color='black'):
        self.label_local_uav_x_res.configure(text='%.01f [m]' % val)
        self.label_local_uav_x_res.configure(fg=color)

    def set_label_local_uav_z_rel(self, val, color='black'):
        self.label_local_uav_z_rel_res.configure(text='%.01f [m]' % val)
        self.label_local_uav_z_rel_res.configure(fg=color)

    def set_label_local_uav_status(self, txt, color='black'):
        self.label_local_uav_status_res.configure(text=txt)
        self.label_local_uav_status_res.configure(fg=color)

    def global_planner_thread(self, point_start, point_goal, path_planner,
                              step_size_horz, step_size_vert, search_time_max):
        if self.parent_class.plan_path_global(
                point_start,
                point_goal,
                path_planner,
                step_size_horz=step_size_horz,
                step_size_vert=step_size_vert,
                search_time_max=search_time_max
        ):  # Plan path and test the result to update the GUI
            self.button_local_plan.configure(state='normal')
            self.button_global_plan.configure(state='normal')
            self.button_gen_global_sim_files.configure(state='normal')
            self.button_global_plan.configure(text='Start global planning')
            self.button_show_result_webpage_global.configure(state='normal')
            self.button_evaluate_path.configure(state='normal')
            self.button_web_visualize_global.configure(state='normal')
        else:  # The global path planner failed and therefore diable the local path planner and change the option to continue
            self.button_local_plan.configure(state='disabled')
            self.button_global_plan.configure(state='normal')
            self.button_gen_global_sim_files.configure(state='disabled')
            self.button_show_result_webpage_global.configure(state='disabled')
            path_planner = str(self.combo_planner_type.get())
            if path_planner == self.parent_class.PATH_PLANNER_NAMES[0]:
                self.button_global_plan.configure(
                    text='Continue global planning')
            elif path_planner == self.parent_class.PATH_PLANNER_NAMES[1]:
                self.button_global_plan.configure(text='Retry global planning')
            self.button_evaluate_path.configure(state='disabled')
            self.button_web_visualize_global.configure(state='disabled')

    def start_global_path_planning(self):
        self.button_global_plan.configure(state='disabled')
        self.button_gen_global_sim_files.configure(state='disabled')
        self.button_local_plan.configure(state='disabled')
        self.button_show_result_webpage_global.configure(state='disabled')
        self.button_evaluate_path.configure(state='disabled')
        self.button_web_visualize_global.configure(state='disabled')

        # Get data from the GUI
        path_planner = self.combo_planner_type.get()
        start_point_3dDICT = {
            'lat': float(self.input_start_point_lat.get()),
            'lon': float(self.input_start_point_lon.get()),
            'alt_rel': 0
        }
        goal_point_3dDICT = {
            'lat': float(self.input_goal_point_lat.get()),
            'lon': float(self.input_goal_point_lon.get()),
            'alt_rel': 0
        }
        step_size_horz = float(self.input_step_size_horz.get())
        step_size_vert = float(self.input_step_size_vert.get())
        search_time_max = float(self.input_search_time_max.get())

        # Create and start the thread
        thread_global_planning = threading.Thread(
            target=self.global_planner_thread,
            args=(start_point_3dDICT, goal_point_3dDICT, path_planner,
                  step_size_horz, step_size_vert, search_time_max))
        thread_global_planning.start()
        #thread_global_planning.join()

    def local_planner_thread(self, path_planner, step_size_horz,
                             step_size_vert, max_search_time, time_step,
                             acceleration_factor):
        self.parent_class.plan_path_local(
            path_planner=path_planner,
            step_size_horz=step_size_horz,
            step_size_vert=step_size_vert,
            max_search_time=max_search_time,
            time_step=time_step,
            acceleration_factor=acceleration_factor)
        self.button_global_plan.configure(state='normal')
        self.button_gen_global_sim_files.configure(state='normal')
        self.button_local_plan.configure(state='normal')
        self.button_web_visualize_local.configure(state='normal')
        self.button_show_result_webpage_local.configure(state='normal')
        self.button_gen_local_sim_files.configure(state='normal')

    def start_local_path_planning(self):
        self.button_global_plan.configure(state='disabled')
        self.button_gen_global_sim_files.configure(state='disabled')
        self.button_local_plan.configure(state='disabled')
        self.button_web_visualize_local.configure(state='disabled')
        self.button_show_result_webpage_local.configure(state='disabled')
        self.button_gen_local_sim_files.configure(state='disabled')
        # Get data from the GUI
        path_planner = str(self.combo_planner_type.get())
        time_step = float(self.input_time_step.get())
        acceleration_factor = float(self.input_acceleration_factor.get())
        step_size_horz = float(self.input_replan_step_size_horz.get())
        step_size_vert = float(self.input_replan_step_size_vert.get())
        search_time_max = float(self.input_replan_search_time_max.get())
        # Create and start the thread
        thread_local_planning = threading.Thread(
            target=self.local_planner_thread,
            args=(path_planner, step_size_horz, step_size_vert,
                  search_time_max, time_step, acceleration_factor))
        thread_local_planning.start()

    def show_result_webpage_global_thread(self):
        self.parent_class.draw_planned_path_global()
        self.parent_class.map_plotter_global.show_plot()

    def show_result_webpage_global(self):
        show_result_webpage_global = threading.Thread(
            target=self.show_result_webpage_global_thread)
        show_result_webpage_global.start()

    def gen_global_sim_files_thread(self):
        self.parent_class.generate_simulation_files_global()

    def gen_global_sim_files(self):
        gen_global_sim = threading.Thread(
            target=self.gen_global_sim_files_thread)
        gen_global_sim.start()

    def gen_local_sim_files_thread(self):
        self.parent_class.generate_simulation_files_local()

    def gen_local_sim_files(self):
        gen_local_sim = threading.Thread(
            target=self.gen_local_sim_files_thread)
        gen_local_sim.start()

    def show_result_webpage_local_thread(self):
        self.parent_class.draw_planned_path_local()
        self.parent_class.map_plotter_local.show_plot()

    def show_result_webpage_local(self):
        show_result_webpage_local = threading.Thread(
            target=self.show_result_webpage_local_thread)
        show_result_webpage_local.start()

    def show_web_visualize_global(self):
        route_id = self.parent_class.visualize_path_3d_global()
        if not None:
            url = 'http://uas.heltner.net/routes/' + str(route_id) + '/3d'
            webbrowser.open_new(url)

    def show_web_visualize_local(self):
        route_id = self.parent_class.visualize_path_3d_local()
        if not None:
            url = 'http://uas.heltner.net/routes/' + str(route_id) + '/3d'
            webbrowser.open_new(url)

    def path_evaluation_thread(self):
        self.parent_class.evaluate_path()

    def start_evaluation(self):
        # Create and start the thread
        thread_evaluate_path = threading.Thread(
            target=self.path_evaluation_thread)
        thread_evaluate_path.start()

    def change_planner(self, event=None):
        path_planner = str(self.combo_planner_type.get())
        if path_planner == self.parent_class.PATH_PLANNER_NAMES[0]:
            self.input_step_size_horz.delete(0, END)
            self.input_step_size_horz.insert(0,
                                             self.DEFAULT_STEP_SIZE_HORZ_ASTAR)
            self.input_step_size_vert.delete(0, END)
            self.input_step_size_vert.insert(0,
                                             self.DEFAULT_STEP_SIZE_VERT_ASTAR)
            self.label_search_time_max.configure(text='Max search time [s]:')
            self.input_search_time_max.delete(0, END)
            self.input_search_time_max.insert(0, self.DEFAULT_SEARCH_TIME_MAX)
            self.input_replan_step_size_horz.delete(0, END)
            self.input_replan_step_size_horz.insert(
                0, self.DEFAULT_STEP_SIZE_HORZ_LOCAL_ASTAR)
            self.input_replan_step_size_vert.delete(0, END)
            self.input_replan_step_size_vert.insert(
                0, self.DEFAULT_STEP_SIZE_VERT_LOCAL_ASTAR)
            self.label_replan_search_time_max.configure(
                text='Replan max search time [s]:')
            self.input_replan_search_time_max.delete(0, END)
            self.input_replan_search_time_max.insert(
                0, self.DEFAULT_SEARCH_TIME_MAX_LOCAL)
        elif path_planner == self.parent_class.PATH_PLANNER_NAMES[1]:
            self.input_step_size_horz.delete(0, END)
            self.input_step_size_horz.insert(0,
                                             self.DEFAULT_STEP_SIZE_HORZ_RRT)
            self.input_step_size_vert.delete(0, END)
            self.input_step_size_vert.insert(0,
                                             self.DEFAULT_STEP_SIZE_VERT_RRT)
            self.label_search_time_max.configure(text='Max iterations:')
            self.input_search_time_max.delete(0, END)
            self.input_search_time_max.insert(0, self.DEFAULT_ITERATIONS_MAX)
            self.input_replan_step_size_horz.delete(0, END)
            self.input_replan_step_size_horz.insert(
                0, self.DEFAULT_STEP_SIZE_HORZ_LOCAL_RRT)
            self.input_replan_step_size_vert.delete(0, END)
            self.input_replan_step_size_vert.insert(
                0, self.DEFAULT_STEP_SIZE_VERT_LOCAL_RRT)
            self.label_replan_search_time_max.configure(
                text='Replan max iterations:')
            self.input_replan_search_time_max.delete(0, END)
            self.input_replan_search_time_max.insert(
                0, self.DEFAULT_ITERATIONS_MAX_LOCAL)

    def run(self):
        self.root = Tk()
        self.root.protocol("WM_DELETE_WINDOW", self.callback_close)
        self.root.title("UAV Path Planner")
        #self.root.geometry('{}x{}'.format(460, 350))
        """ Left side layout """
        row_num_left = 0
        self.label_start_point = Label(self.root,
                                       text="Path Planning",
                                       font=("Arial Bold", 12))
        self.label_start_point.grid(row=row_num_left, column=0, columnspan=2)
        row_num_left += 1
        self.label_planner_type = Label(self.root, text="Type:")
        self.label_planner_type.grid(row=row_num_left, column=0)
        self.combo_planner_type = Combobox(self.root)
        self.combo_planner_type[
            'values'] = self.parent_class.PATH_PLANNER_NAMES
        if self.INITIAL_PLANNER == 0:
            self.combo_planner_type.current(0)
        elif self.INITIAL_PLANNER == 1:
            self.combo_planner_type.current(1)
        self.combo_planner_type.bind('<<ComboboxSelected>>',
                                     self.change_planner)
        self.combo_planner_type.grid(row=row_num_left, column=1)

        row_num_left += 1
        self.label_start_point = Label(self.root,
                                       text="Start point (geodetic)",
                                       font=("Arial Bold", 10))
        self.label_start_point.grid(row=row_num_left, column=0, columnspan=2)
        row_num_left += 1
        self.label_start_point_lat = Label(self.root, text="Latitude [dd]:")
        self.label_start_point_lat.grid(row=row_num_left, column=0)
        self.input_start_point_lat = Entry(self.root, width=10)
        self.input_start_point_lat.insert(0, self.DEFAULT_START_LAT)
        self.input_start_point_lat.grid(row=row_num_left, column=1)
        row_num_left += 1
        self.label_start_point_lon = Label(self.root, text="Longitude [dd]:")
        self.label_start_point_lon.grid(row=row_num_left, column=0)
        self.input_start_point_lon = Entry(self.root, width=10)
        self.input_start_point_lon.insert(0, self.DEFAULT_START_LON)
        self.input_start_point_lon.grid(row=row_num_left, column=1)

        row_num_left += 1
        self.label_goal_point = Label(self.root,
                                      text="Goal point (geodetic)",
                                      font=("Arial Bold", 10))
        self.label_goal_point.grid(row=row_num_left, column=0, columnspan=2)
        row_num_left += 1
        self.label_goal_point_lat = Label(self.root, text="Latitude [dd]:")
        self.label_goal_point_lat.grid(row=row_num_left, column=0)
        self.input_goal_point_lat = Entry(self.root, width=10)
        self.input_goal_point_lat.insert(0, self.DEFAULT_GOAL_LAT)
        self.input_goal_point_lat.grid(row=row_num_left, column=1)
        row_num_left += 1
        self.label_goal_point_lon = Label(self.root, text="Longitude [dd]:")
        self.label_goal_point_lon.grid(row=row_num_left, column=0)
        self.input_goal_point_lon = Entry(self.root, width=10)
        self.input_goal_point_lon.insert(0, self.DEFAULT_GOAL_LON)
        self.input_goal_point_lon.grid(row=row_num_left, column=1)

        row_num_left += 1
        self.label_options = Label(self.root,
                                   text="Options global path planner",
                                   font=("Arial Bold", 10))
        self.label_options.grid(row=row_num_left, column=0, columnspan=2)
        row_num_left += 1
        self.label_step_size_horz = Label(self.root,
                                          text="Horizontal step-size [m]:")
        self.label_step_size_horz.grid(row=row_num_left, column=0)
        self.input_step_size_horz = Entry(self.root, width=10)
        if self.INITIAL_PLANNER == 0:
            self.input_step_size_horz.insert(0,
                                             self.DEFAULT_STEP_SIZE_HORZ_ASTAR)
        elif self.INITIAL_PLANNER == 1:
            self.input_step_size_horz.insert(0,
                                             self.DEFAULT_STEP_SIZE_HORZ_RRT)
        self.input_step_size_horz.grid(row=row_num_left, column=1)
        row_num_left += 1
        self.label_step_size_vert = Label(self.root,
                                          text="Vertical step-size [m]:")
        self.label_step_size_vert.grid(row=row_num_left, column=0)
        self.input_step_size_vert = Entry(self.root, width=10)
        if self.INITIAL_PLANNER == 0:
            self.input_step_size_vert.insert(0,
                                             self.DEFAULT_STEP_SIZE_VERT_ASTAR)
        elif self.INITIAL_PLANNER == 1:
            self.input_step_size_vert.insert(0,
                                             self.DEFAULT_STEP_SIZE_VERT_RRT)
        self.input_step_size_vert.grid(row=row_num_left, column=1)
        row_num_left += 1
        self.label_search_time_max = Label(self.root, text="")
        if self.INITIAL_PLANNER == 0:
            self.label_search_time_max.configure(text='Max search time [s]:')
        elif self.INITIAL_PLANNER == 1:
            self.label_search_time_max.configure(text='Max iterations:')
        self.label_search_time_max.grid(row=row_num_left, column=0)
        self.input_search_time_max = Entry(self.root, width=10)
        if self.INITIAL_PLANNER == 0:
            self.input_search_time_max.insert(0, self.DEFAULT_SEARCH_TIME_MAX)
        elif self.INITIAL_PLANNER == 1:
            self.input_search_time_max.insert(0, self.DEFAULT_ITERATIONS_MAX)
        self.input_search_time_max.grid(row=row_num_left, column=1)

        row_num_left += 1
        self.button_global_plan = Button(
            self.root,
            text="Start global planning",
            command=self.start_global_path_planning)
        self.button_global_plan.configure(state='disabled')
        self.button_global_plan.grid(row=row_num_left, column=0, columnspan=2)

        row_num_left += 1
        self.label_options_local = Label(self.root,
                                         text="Options local path planner",
                                         font=("Arial Bold", 10))
        self.label_options_local.grid(row=row_num_left, column=0, columnspan=2)
        row_num_left += 1
        self.label_time_step = Label(self.root, text="Time step [s]:")
        self.label_time_step.grid(row=row_num_left, column=0)
        self.input_time_step = Entry(self.root, width=10)
        self.input_time_step.insert(0, self.DEFAULT_TIME_STEP)
        self.input_time_step.grid(row=row_num_left, column=1)
        row_num_left += 1
        self.label_acceleration_factor = Label(self.root,
                                               text="Playback speed:")
        self.label_acceleration_factor.grid(row=row_num_left, column=0)
        self.input_acceleration_factor = Entry(self.root, width=10)
        self.input_acceleration_factor.insert(0,
                                              self.DEFAULT_ACCELERATION_FACTOR)
        self.input_acceleration_factor.grid(row=row_num_left, column=1)
        row_num_left += 1
        self.label_replan_step_size_horz = Label(
            self.root, text="Replan horizontal step-size [m]:")
        self.label_replan_step_size_horz.grid(row=row_num_left, column=0)
        self.input_replan_step_size_horz = Entry(self.root, width=10)
        if self.INITIAL_PLANNER == 0:
            self.input_replan_step_size_horz.insert(
                0, self.DEFAULT_STEP_SIZE_HORZ_LOCAL_ASTAR)
        elif self.INITIAL_PLANNER == 1:
            self.input_replan_step_size_horz.insert(
                0, self.DEFAULT_STEP_SIZE_HORZ_LOCAL_RRT)
        self.input_replan_step_size_horz.grid(row=row_num_left, column=1)
        row_num_left += 1
        self.label_replan_step_size_vert = Label(
            self.root, text="Replan vertical step-size [m]:")
        self.label_replan_step_size_vert.grid(row=row_num_left, column=0)
        self.input_replan_step_size_vert = Entry(self.root, width=10)
        if self.INITIAL_PLANNER == 0:
            self.input_replan_step_size_vert.insert(
                0, self.DEFAULT_STEP_SIZE_VERT_LOCAL_ASTAR)
        elif self.INITIAL_PLANNER == 1:
            self.input_replan_step_size_vert.insert(
                0, self.DEFAULT_STEP_SIZE_VERT_LOCAL_RRT)
        self.input_replan_step_size_vert.grid(row=row_num_left, column=1)
        row_num_left += 1
        self.label_replan_search_time_max = Label(
            self.root, text="Replan max search time [s]:")
        if self.INITIAL_PLANNER == 0:
            self.label_replan_search_time_max.configure(
                text='Replan max search time [s]:')
        elif self.INITIAL_PLANNER == 1:
            self.label_replan_search_time_max.configure(
                text='Replan max iterations:')
        self.label_replan_search_time_max.grid(row=row_num_left, column=0)
        self.input_replan_search_time_max = Entry(self.root, width=10)
        if self.INITIAL_PLANNER == 0:
            self.input_replan_search_time_max.insert(
                0, self.DEFAULT_SEARCH_TIME_MAX_LOCAL)
        elif self.INITIAL_PLANNER == 1:
            self.input_replan_search_time_max.insert(
                0, self.DEFAULT_ITERATIONS_MAX_LOCAL)
        self.input_replan_search_time_max.grid(row=row_num_left, column=1)
        row_num_left += 1
        self.button_local_plan = Button(self.root,
                                        text="Start local planning",
                                        command=self.start_local_path_planning)
        self.button_local_plan.configure(
            state='disabled'
        )  # disable the button since it cannot make a local plan before it has made a global plan
        self.button_local_plan.grid(row=row_num_left, column=0, columnspan=2)
        row_num_left += 1
        self.label_sim_info = Label(self.root,
                                    text="Simulation information",
                                    font=("Arial Bold", 12))
        self.label_sim_info.grid(row=row_num_left, column=0, columnspan=2)
        row_num_left += 1
        self.label_local_plan_status = Label(self.root, text="Status:")
        self.label_local_plan_status.grid(row=row_num_left, column=0)
        self.label_local_plan_status_res = Label(self.root, text="idle")
        self.label_local_plan_status_res.configure(fg='green')
        self.label_local_plan_status_res.grid(row=row_num_left, column=1)
        row_num_left += 1
        self.label_local_plan_time = Label(self.root, text="Time:")
        self.label_local_plan_time.grid(row=row_num_left, column=0)
        self.label_local_plan_time_res = Label(self.root, text="N/A")
        self.label_local_plan_time_res.grid(row=row_num_left, column=1)
        row_num_left += 1
        self.label_local_uav_y = Label(self.root, text="UAV y:")
        self.label_local_uav_y.grid(row=row_num_left, column=0)
        self.label_local_uav_y_res = Label(self.root, text="N/A")
        self.label_local_uav_y_res.grid(row=row_num_left, column=1)
        row_num_left += 1
        self.label_local_uav_x = Label(self.root, text="UAV x:")
        self.label_local_uav_x.grid(row=row_num_left, column=0)
        self.label_local_uav_x_res = Label(self.root, text="N/A")
        self.label_local_uav_x_res.grid(row=row_num_left, column=1)
        row_num_left += 1
        self.label_local_uav_z_rel = Label(self.root, text="UAV z_rel:")
        self.label_local_uav_z_rel.grid(row=row_num_left, column=0)
        self.label_local_uav_z_rel_res = Label(self.root, text="N/A")
        self.label_local_uav_z_rel_res.grid(row=row_num_left, column=1)
        row_num_left += 1
        self.label_local_uav_status = Label(self.root, text="UAV status:")
        self.label_local_uav_status.grid(row=row_num_left, column=0)
        self.label_local_uav_status_res = Label(self.root, text="N/A")
        self.label_local_uav_status_res.grid(row=row_num_left, column=1)
        """ Right side layout """
        row_num_right = 0
        self.label_data_sources = Label(self.root,
                                        text="Data sources",
                                        font=("Arial Bold", 12))
        self.label_data_sources.grid(row=row_num_right, column=2, columnspan=2)
        row_num_right += 1
        self.label_data_source_no_fly_zones = Label(self.root,
                                                    text="No-fly zones:")
        self.label_data_source_no_fly_zones.grid(row=row_num_right, column=2)
        self.label_data_source_no_fly_zones_res = Label(self.root,
                                                        text="not loaded")
        self.label_data_source_no_fly_zones_res.configure(fg='red')
        self.label_data_source_no_fly_zones_res.grid(row=row_num_right,
                                                     column=3)
        row_num_right += 1
        self.label_data_source_height_map = Label(self.root,
                                                  text="Altitude map:")
        self.label_data_source_height_map.grid(row=row_num_right, column=2)
        self.label_data_source_height_map_res = Label(self.root,
                                                      text="not loaded")
        self.label_data_source_height_map_res.configure(fg='red')
        self.label_data_source_height_map_res.grid(row=row_num_right, column=3)
        row_num_right += 1
        self.label_data_source_droneID = Label(self.root, text="DroneID:")
        self.label_data_source_droneID.grid(row=row_num_right, column=2)
        self.label_data_source_droneID_res = Label(self.root,
                                                   text="not loaded")
        self.label_data_source_droneID_res.configure(fg='red')
        self.label_data_source_droneID_res.grid(row=row_num_right, column=3)
        row_num_right += 1
        self.label_data_source_adsb = Label(self.root, text="ADS-B:")
        self.label_data_source_adsb.grid(row=row_num_right, column=2)
        self.label_data_source_adsb_res = Label(self.root, text="not loaded")
        self.label_data_source_adsb_res.configure(fg='red')
        self.label_data_source_adsb_res.grid(row=row_num_right, column=3)
        row_num_right += 1
        self.label_data_source_weather = Label(self.root, text="Weather:")
        self.label_data_source_weather.grid(row=row_num_right, column=2)
        self.label_data_source_weather_res = Label(self.root,
                                                   text="not loaded")
        self.label_data_source_weather_res.configure(fg='red')
        self.label_data_source_weather_res.grid(row=row_num_right, column=3)
        row_num_right += 1
        self.label_data_rally_point = Label(self.root, text="Rally points:")
        self.label_data_rally_point.grid(row=row_num_right, column=2)
        self.label_data_rally_point_res = Label(self.root, text="not loaded")
        self.label_data_rally_point_res.configure(fg='red')
        self.label_data_rally_point_res.grid(row=row_num_right, column=3)

        row_num_right += 1
        # gpe = global path evaluator
        self.label_gpe = Label(self.root,
                               text="Global path evaluator",
                               font=("Arial Bold", 12))
        self.label_gpe.grid(row=row_num_right, column=2, columnspan=2)
        row_num_right += 1
        self.button_evaluate_path = Button(self.root,
                                           text="Evaluate",
                                           command=self.start_evaluation)
        self.button_evaluate_path.configure(
            state='disabled')  # Disabled because no global plan has been made
        self.button_evaluate_path.grid(row=row_num_right,
                                       column=2,
                                       columnspan=2)
        row_num_right += 1
        self.label_gpe_fitness = Label(self.root, text="Fitness:")
        self.label_gpe_fitness.grid(row=row_num_right, column=2)
        self.label_gpe_fitness_res = Label(self.root, text="N/A")
        self.label_gpe_fitness_res.grid(row=row_num_right, column=3)
        row_num_right += 1
        self.label_gpe_dist_tot = Label(self.root, text="Total distance:")
        self.label_gpe_dist_tot.grid(row=row_num_right, column=2)
        self.label_gpe_dist_tot_res = Label(self.root, text="N/A")
        self.label_gpe_dist_tot_res.grid(row=row_num_right, column=3)
        row_num_right += 1
        self.label_gpe_dist_horz = Label(self.root,
                                         text="Horizontal distance:")
        self.label_gpe_dist_horz.grid(row=row_num_right, column=2)
        self.label_gpe_dist_horz_res = Label(self.root, text="N/A")
        self.label_gpe_dist_horz_res.grid(row=row_num_right, column=3)
        row_num_right += 1
        self.label_gpe_dist_vert = Label(self.root, text="Vertical distance:")
        self.label_gpe_dist_vert.grid(row=row_num_right, column=2)
        self.label_gpe_dist_vert_res = Label(self.root, text="N/A")
        self.label_gpe_dist_vert_res.grid(row=row_num_right, column=3)
        row_num_right += 1
        self.label_gpe_eta = Label(self.root, text="Estimated flight time:")
        self.label_gpe_eta.grid(row=row_num_right, column=2)
        self.label_gpe_eta_res = Label(self.root, text="N/A")
        self.label_gpe_eta_res.grid(row=row_num_right, column=3)
        row_num_right += 1
        self.label_gpe_wps = Label(self.root, text="Waypoints:")
        self.label_gpe_wps.grid(row=row_num_right, column=2)
        self.label_gpe_wps_res = Label(self.root, text="N/A")
        self.label_gpe_wps_res.grid(row=row_num_right, column=3)
        row_num_right += 1
        self.label_gpe_runtime = Label(self.root, text="Runtime:")
        self.label_gpe_runtime.grid(row=row_num_right, column=2)
        self.label_gpe_runtime_res = Label(self.root, text="N/A")
        self.label_gpe_runtime_res.grid(row=row_num_right, column=3)
        row_num_right += 1
        self.label_gpe_bytes_tot = Label(self.root, text="Bytes total:")
        self.label_gpe_bytes_tot.grid(row=row_num_right, column=2)
        self.label_gpe_bytes_tot_res = Label(self.root, text="N/A")
        self.label_gpe_bytes_tot_res.grid(row=row_num_right, column=3)
        row_num_right += 1
        self.label_gpe_objects_tot = Label(self.root, text="Objects total:")
        self.label_gpe_objects_tot.grid(row=row_num_right, column=2)
        self.label_gpe_objects_tot_res = Label(self.root, text="N/A")
        self.label_gpe_objects_tot_res.grid(row=row_num_right, column=3)
        row_num_right += 1
        self.label_gpe_bytes_planner = Label(self.root, text="Bytes planner:")
        self.label_gpe_bytes_planner.grid(row=row_num_right, column=2)
        self.label_gpe_bytes_planner_res = Label(self.root, text="N/A")
        self.label_gpe_bytes_planner_res.grid(row=row_num_right, column=3)
        row_num_right += 1
        self.label_gpe_objects_planner = Label(self.root,
                                               text="Objects planner:")
        self.label_gpe_objects_planner.grid(row=row_num_right, column=2)
        self.label_gpe_objects_planner_res = Label(self.root, text="N/A")
        self.label_gpe_objects_planner_res.grid(row=row_num_right, column=3)

        row_num_right += 1
        self.label_planning_info = Label(self.root,
                                         text="Planning information",
                                         font=("Arial Bold", 12))
        self.label_planning_info.grid(row=row_num_right,
                                      column=2,
                                      columnspan=2)
        row_num_right += 1
        self.label_global_plan_status = Label(self.root, text="Status:")
        self.label_global_plan_status.grid(row=row_num_right, column=2)
        self.label_global_plan_status_res = Label(self.root, text="idle")
        self.label_global_plan_status_res.configure(fg='green')
        self.label_global_plan_status_res.grid(row=row_num_right, column=3)
        row_num_right += 1
        self.label_global_plan_start_heuristic = Label(self.root,
                                                       text="Start heuristic:")
        self.label_global_plan_start_heuristic.grid(row=row_num_right,
                                                    column=2)
        self.label_global_plan_start_heuristic_res = Label(self.root,
                                                           text="N/A")
        self.label_global_plan_start_heuristic_res.grid(row=row_num_right,
                                                        column=3)
        row_num_right += 1
        self.label_global_plan_cur_heuristic = Label(self.root,
                                                     text="Best heuristic:")
        self.label_global_plan_cur_heuristic.grid(row=row_num_right, column=2)
        self.label_global_plan_cur_heuristic_res = Label(self.root, text="N/A")
        self.label_global_plan_cur_heuristic_res.grid(row=row_num_right,
                                                      column=3)
        row_num_right += 1
        self.label_global_plan_horz_step_size = Label(
            self.root, text="Horizontal step-size:")
        self.label_global_plan_horz_step_size.grid(row=row_num_right, column=2)
        self.label_global_plan_horz_step_size_res = Label(self.root,
                                                          text="N/A")
        self.label_global_plan_horz_step_size_res.grid(row=row_num_right,
                                                       column=3)
        row_num_right += 1
        self.label_global_plan_vert_step_size = Label(
            self.root, text="Vertical step-size:")
        self.label_global_plan_vert_step_size.grid(row=row_num_right, column=2)
        self.label_global_plan_vert_step_size_res = Label(self.root,
                                                          text="N/A")
        self.label_global_plan_vert_step_size_res.grid(row=row_num_right,
                                                       column=3)
        row_num_right += 1
        self.label_global_plan_search_time = Label(self.root,
                                                   text="Search time:")
        self.label_global_plan_search_time.grid(row=row_num_right, column=2)
        self.label_global_plan_search_time_res = Label(self.root, text="N/A")
        self.label_global_plan_search_time_res.grid(row=row_num_right,
                                                    column=3)
        row_num_right += 1
        self.label_global_plan_nodes_visited = Label(self.root,
                                                     text="Nodes visited:")
        self.label_global_plan_nodes_visited.grid(row=row_num_right, column=2)
        self.label_global_plan_nodes_visited_res = Label(self.root, text="N/A")
        self.label_global_plan_nodes_visited_res.grid(row=row_num_right,
                                                      column=3)
        row_num_right += 1
        self.label_global_plan_nodes_explored = Label(self.root,
                                                      text="Nodes explored:")
        self.label_global_plan_nodes_explored.grid(row=row_num_right, column=2)
        self.label_global_plan_nodes_explored_res = Label(self.root,
                                                          text="N/A")
        self.label_global_plan_nodes_explored_res.grid(row=row_num_right,
                                                       column=3)
        """ Both sides """
        if row_num_left > row_num_right:
            row_num_both = row_num_left
        else:
            row_num_both = row_num_right
        row_num_both += 1
        self.label_global_path = Label(self.root, text="Global path:")
        self.label_global_path.grid(row=row_num_both, column=0)
        self.scrolledtext_global_path = tkst.ScrolledText(self.root, height=5)
        self.scrolledtext_global_path.grid(row=row_num_both,
                                           column=1,
                                           columnspan=3)

        row_num_both += 1
        self.label_local_path = Label(self.root, text="Local path:")
        self.label_local_path.grid(row=row_num_both, column=0)
        self.scrolledtext_local_path = tkst.ScrolledText(self.root, height=5)
        self.scrolledtext_local_path.grid(row=row_num_both,
                                          column=1,
                                          columnspan=3)

        row_num_both += 1
        self.button_show_result_webpage_global = Button(
            self.root,
            text="2D global path visualization (local)",
            command=self.show_result_webpage_global)
        self.button_show_result_webpage_global.configure(
            state='disabled')  # Disabled because no global plan has been made
        self.button_show_result_webpage_global.grid(row=row_num_both,
                                                    column=0,
                                                    columnspan=2)
        #row_num_both += 1
        self.button_show_result_webpage_local = Button(
            self.root,
            text="2D local path visualization (local)",
            command=self.show_result_webpage_local)
        self.button_show_result_webpage_local.configure(
            state='disabled')  # Disabled because no global plan has been made
        self.button_show_result_webpage_local.grid(row=row_num_both,
                                                   column=2,
                                                   columnspan=2)

        row_num_both += 1
        self.button_web_visualize_global = Button(
            self.root,
            text="3D global path visualization (online)",
            command=self.show_web_visualize_global)
        self.button_web_visualize_global.configure(
            state='disabled')  # Disabled because no global plan has been made
        self.button_web_visualize_global.grid(row=row_num_both,
                                              column=0,
                                              columnspan=2)
        #row_num_both += 1
        self.button_web_visualize_local = Button(
            self.root,
            text="3D local path visualization (online)",
            command=self.show_web_visualize_local)
        self.button_web_visualize_local.configure(
            state='disabled')  # Disabled because no global plan has been made
        self.button_web_visualize_local.grid(row=row_num_both,
                                             column=2,
                                             columnspan=2)

        row_num_both += 1
        self.button_gen_global_sim_files = Button(
            self.root,
            text="Generate global path simulation files",
            command=self.gen_global_sim_files)
        self.button_gen_global_sim_files.configure(
            state='disabled')  # Disabled because no global plan has been made
        self.button_gen_global_sim_files.grid(row=row_num_both,
                                              column=0,
                                              columnspan=2)
        #row_num_both += 1
        self.button_gen_local_sim_files = Button(
            self.root,
            text="Generate local path simulation files",
            command=self.gen_local_sim_files)
        self.button_gen_local_sim_files.configure(
            state='disabled')  # Disabled because no global plan has been made
        self.button_gen_local_sim_files.grid(row=row_num_both,
                                             column=2,
                                             columnspan=2)

        row_num_both += 1
        self.label_credit = Label(
            self.root,
            text="Copyright (c) 2018, Tobias Lundby, BSD 3-Clause License",
            fg="grey",
            font=("Arial 8 italic"))
        self.label_credit.grid(row=row_num_both, column=0, columnspan=4)

        # Configure the queue callback
        self.root.after(250, self.check_queue)

        # Start the main loop
        self.root.mainloop()
Beispiel #40
0
class Window(Frame):
    def __init__(self, parent, window_type):
        Frame.__init__(self, parent, msg = None)

        self.parent = parent
        if window_type == "main":
            self.initUI_main()
        if window_type == "err":
            self.initUI_err()

    def initUI_main(self):
        self.parent.title("Personal Helper")
        self.pack(fill=BOTH, expand=True)

        self.columnconfigure(0, weight=1)
        self.columnconfigure(7, weight=1)
        self.columnconfigure(5, pad=10)
        self.columnconfigure(3, pad=10)
        self.columnconfigure(1, weight=3)
        self.rowconfigure(0, weight=0)
        self.rowconfigure(5, weight=1)
        self.rowconfigure(5, pad=7)
        self.rowconfigure(6, pad=6)


        lbl = Label(self, text="Windows")
        lbl.grid(sticky=W+N, pady=4, padx=5)


        check_box = {"work": IntVar(),
                     "boost": IntVar()}

        check1 = Checkbutton(self, text="work-Mode", variable=check_box["work"])
        check1.grid(row=7, column=0)

        check2 = Checkbutton(self, text="boost games", variable=check_box["boost"])
        check2.grid(row=7, column=1)


        ### old version, may be used again later
        area = Treeview(self)
        area['show'] = 'headings'
        area["columns"] = ("one", "two", "three", "four")
        area.column("one", width=10)
        area.column("two", width=10)
        area.column("three", width=10)
        area.column("four", width=10)
        area.heading("one", text="process name")
        area.heading("two", text="Priority")
        area.heading("three", text="PID")
        area.heading("four", text="Usage")
        ###about this part
        #area.grid(row=1, column=0, columnspan=2, rowspan=4, padx=5, sticky=E + W + S + N)
        #######

        #comboboxes and relevant buttons

        self.block_drop = Combobox(self, postcommand= self.update_blocked)
        self.block_drop['values'] = working_bans
        self.block_drop.current(0)
        self.block_drop.grid(row=1, column=1, pady=1)
        self.entry = Entry(self)
        self.entry.insert(0, "enter to block")
        self.entry.grid(row=1, column=4)

        block_btn_remv = Button(self, text="Remove", command=lambda: remove_from_list(working_bans, self.block_drop.get()))
        block_btn_remv.grid(row=1, column=2)

        block_btn_add = Button(self, text="Add", command=lambda: add_to_list(working_bans, self.entry.get(), self.entry, defults["block"]))
        block_btn_add.grid(row=1, column=3)

        ############
        #boosted combo
        self.boost_drop = Combobox(self, postcommand=self.update_boosted)
        self.boost_drop['values'] = boosted
        self.boost_drop.current(0)
        self.boost_drop.grid(row=2, column=1, pady=1)
        self.entry2 = Entry(self)
        self.entry2.insert(0, "enter to buff priority")
        self.entry2.grid(row=2, column=4, pady=4)

        boost_btn_remv = Button(self, text="Remove", command=lambda: remove_from_list(boosted, self.boost_drop.get()))
        boost_btn_remv.grid(row=2, column=2)

        boost_btn_add = Button(self, text="Add", command=lambda: add_to_list(boosted, self.entry2.get(), self.entry2, defults["boost"]))
        boost_btn_add.grid(row=2, column=3)

        #########################################

        #degraded combo
        self.deg_drop = Combobox(self, postcommand=self.update_degraded)
        self.deg_drop['values'] = degraded
        self.deg_drop.current(0)
        self.deg_drop.grid(row=3, column=1, pady=1)
        self.entry3 = Entry(self)
        self.entry3.insert(0, "enter to lower priority")
        self.entry3.grid(row=3, column=4, pady=4)

        deg_btn_remv = Button(self, text="Remove", command=lambda: remove_from_list(degraded, self.deg_drop.get()))
        deg_btn_remv.grid(row=3, column=2)

        deg_btn_add = Button(self, text="Add", command=lambda: add_to_list(degraded, self.entry3.get(), self.entry3, defults["degrade"]))
        deg_btn_add.grid(row=3, column=3)

        ####
        #music combo

        self.music_drop = Combobox(self, postcommand=self.update_music)
        self.music_drop['values'] = music_list.keys()
        self.music_drop.current(0)
        self.music_drop.grid(row=4, column=1, pady=1)
        self.entry4 = Entry(self)
        self.entry4.insert(0, "enter url")
        self.entry4.grid(row=4, column=5)
        self.entry5 = Entry(self)
        self.entry5.insert(0, "enter song's name")
        self.entry5.grid(row=4, column=4)

        music_btn_remv = Button(self, text="Remove", command=lambda: remove_from_list(music_list, self.music_drop.get()))
        music_btn_remv.grid(row=4, column=2)

        music_btn_add = Button(self, text="Add", command=lambda: add_music(music_list, self.entry5.get(),self.entry4.get() ,self.entry5, defults["music"]))
        music_btn_add.grid(row=4, column=3)


        abtn = Button(self, text="Activate", command=scan_computer_programs)
        abtn.grid(row=1, column=5, sticky=E)

        sbtn = Button(self, text="Stop", command=lambda: stop_running())
        sbtn.grid(row=2, column=5, pady=6, sticky=E)

        cbtn = Button(self, text="Close", command=quit)
        cbtn.grid(row=3, column=5, pady=4, sticky=E)

        hbtn = Button(self, text="Save", command=save_lists)
        hbtn.grid(row=6, column=0, sticky=W)

        tsbtn = Button(self, text="TaskManager", command=lambda: os.system("TaskManager\pyProcMon.py"))
        tsbtn.grid(row=3, column=5, sticky=E)

        obtn = Button(self, text="start", command=lambda: call_running(area, threads["procs"], check_box))
        obtn.grid(row=6, column=5, sticky=E)

    def initUI_err(self):
        self.parent.title("Personal Helper")
        self.pack(fill=BOTH, expand=True)

    def update_boosted(self):
        self.boost_drop['values'] = boosted
        try:
            self.boost_drop.current(0)
        except:
            self.boost_drop.set("empty")

    def update_blocked(self):
        self.block_drop['values'] = working_bans
        try:
            self.block_drop.current(0)
        except:
            self.block_drop.set("empty")

    def update_degraded(self):
        self.deg_drop['values'] = degraded
        try:
            self.block_drop.current(0)
        except:
            self.block_drop.set("empty")

    def update_music(self):
        self.music_drop['values'] = music_list.keys()
        try:
            self.block_drop.current(0)
        except:
            self.block_drop.set("empty")
Beispiel #41
0
    def initUI(self):

        # master = Frame(self)
        #Headers - заголовок запроса
        headers = {
            'User-Agent':
            'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) '
            'AppleWebKit/537.36 (KHTML, like Gecko) '
            'Chrome/39.0.2171.95 Safari/537.36'
        }
        aClearResponse = []

        # Закрытие формы
        def closeForm():
            sys.exit()

        # Забираем значение инпута
        def inputValue():
            sParse = Keyword.get()
            sDomain = DomainAnalys.get()
            TextLog.delete(1.0, END)
            TextLog.insert(
                1.0, "\nВы ввели имя домена: " + sDomain +
                '\nИ выбрали поисковую систему ' + DropDown.get())
            TextLog.insert(1.0, "Вы ввели ключевую фразу: " + sParse)
            aValue = []
            aValue.append(sParse)
            aValue.append(sDomain)

            return aValue

        #Получаем ответ от сервера в виде HTML документа
        def getValueButton():
            sIntVal = re.split(r",", inputValue()[0])
            for sInputValue in sIntVal:
                val = function.createRequest(str(sInputValue), DropDown.get(),
                                             "Parse")
                print("Сгенерированный HTTP запрос: " + val)
                response = function.getPage(val, headers)
                TextLog.insert(1.0, "Ответ " + response)
                xPathResponse(response, sInputValue)

        #Получаем результаты анализа от сервера
        def getDomainValue():
            sIntVal = re.split(r",", inputValue()[1])
            for sInputValue in sIntVal:
                val = function.createRequest(str(sInputValue), DropDown.get(),
                                             "Analys")
                print("Сгенерированный HTTP запрос: " + val)
                response = function.getPage(val, headers)
                TextLog.insert(1.0, "Ответ " + response)
                xPathResponse(response, sInputValue)

        def xPathResponse(response, keyword):
            #Разделяем полученную строку на список и убираем []
            aClearResponse = []
            aDirtResponse = []
            try:
                aResponse = re.split(r",\[",
                                     re.findall(r'\[\".*\d\]', response)[0])
                print(len(aResponse))
                for i in range(len(aResponse)):
                    aDirtResponse.append(re.sub(r'[\]\[]', '', aResponse[i]))
                    aClearResponse.append(
                        re.sub(r'[\]\[]', '', aDirtResponse[i]))
                    TextResult.insert(
                        1.0,
                        re.sub(r'[\]\[]', '', aClearResponse[i]) + '\n')
                    # print(aClearResponse)
            except Exception:
                win32api.MessageBox(
                    0, 'Запрос "%s" ничего не вернул :(' % (keyword),
                    'Ошибка!')
                aClearResponse = 'Error'
            return aClearResponse

        # # Задаем путь для сохранения файла
        # def directory():
        def saveExcel(type):
            sFilePath = fd.asksaveasfilename(filetypes=(("Excel files",
                                                         "*.xls"),
                                                        ("All files", "*.*")))
            #Проверяем на пустоту путь сохранения файлы и если не пусто, то выполняем сохранение
            if sFilePath != '':
                aClearResponse = []
                aAllKeyResponse = []
                sError = []
                #Проверка, откуда произошел вызов функции
                if type == "Parse":
                    sIntVal = re.split(r",", inputValue()[0])
                else:
                    sIntVal = re.split(r",", inputValue()[1])

                for sInputValue in sIntVal:
                    val = function.createRequest(str(sInputValue),
                                                 DropDown.get(), type)
                    response = function.getPage(val, headers)
                    aClearResponse = xPathResponse(response, sInputValue)
                    if aClearResponse == 'Error':
                        sError.append(sInputValue + " Error")
                    else:
                        for i in aClearResponse:
                            aAllKeyResponse.append(i)

                ##Проверка на ошибки
                if len(sError) == len(sIntVal):
                    win32api.MessageBox(
                        0,
                        'Ни один из запросов не дал результатов. Файл не будет сохранен',
                        'Ошибка!')
                elif len(sError) > 1:
                    win32api.MessageBox(
                        0,
                        'Не удалось сохранить все, что было указано в запросе! Скорее всего один из запросов не дал результатов',
                        'Ошибка!')
                    function.createEXCEL(aAllKeyResponse, sFilePath)
                else:
                    function.createEXCEL(aAllKeyResponse, sFilePath)

        #Получаем значение из выпадающег осписка
        # value = (listbox.get(listbox.curselection()))

        self.parent.title("Парсер")
        self.style = Style()
        self.style.theme_use("default")

        #Задаем размеры формы
        w = 1200
        h = 500
        sw = self.parent.winfo_screenwidth()
        sh = self.parent.winfo_screenheight()
        x = (sw - w) / 2
        y = (sh - h) / 2
        self.parent.geometry('%dx%d+%d+%d' % (w, h, x, y))

        # Располагаем объекты на форме
        # Объявляем все элементы:
        KeywordLabel = Label(
            text="Введите ключевое слово или слова через запятую:")
        DropDownLabel = Label(text='Выберите поисковую систему:')
        Keyword = Entry()
        DropDown = Combobox(self.parent)
        Close = Button(text="Закрыть", command=closeForm)
        Parse = Button(text='Начать парсинг', command=getValueButton)
        TextLog = Text(width=50, height=20)
        TextResult = Text(width=50, height=20)
        SaveValue = Button(text="Сохранить параметры парсинга",
                           command=inputValue)
        SaveExcel = Button(text='Сохранить в EXCEL документ',
                           command=lambda: saveExcel('Parse'))

        #Интерфейсные объекты для анализа
        DomainAnalysLabel = Label(text="Введите название домена для анализа:")
        DomainAnalys = Entry()
        Analys = Button(text='Начать анализ', command=getDomainValue)
        AnalysSave = Button(
            text='Сохранить в EXCEL документ результаты анализа',
            command=lambda: saveExcel('Analys'))

        # NameSpace
        DropDown['values'] = ('Yandex', 'Google')
        DropDown.current(1)  # вариант по-умолчанию

        # Размещаем элементы

        #0-й столбец
        TextLog.grid(row=0, column=0)
        KeywordLabel.grid(row=1, column=0, sticky="w")
        Keyword.grid(row=2, column=0)
        DomainAnalysLabel.grid(row=3, column=0, sticky="w")
        DomainAnalys.grid(row=4, column=0)
        DropDownLabel.grid(row=5, column=0)
        DropDown.grid(row=6, column=0)
        SaveValue.grid(row=7, column=0)

        #1-й столбец
        TextResult.grid(row=0, column=1)
        Parse.grid(row=1, column=1)
        SaveExcel.grid(row=2, column=1)
        Analys.grid(row=6, column=1)
        AnalysSave.grid(row=7, column=1)

        #2-й столбец
        Close.grid(row=7, column=3)

        # Забираем с инпутов значения

        # вставка начальных данных
        Keyword.insert(0, "Ключевое слово")
        TextLog.insert(
            1.0, "Здесь будут отображаться все этапы прохождения программы")
Beispiel #42
0
class SimulationTypeHandler(BaseHandler):
    """
    Simulation type and conditions handler
    """
    def __init__(self, frame):
        self.__simulation_types_map = {
            '2D tensile, flat': FlatTensile2DTestHandler(),
            'Import material to model': ImportToExistingModelHandler(),
            '3D compression': Compression3DTestHandler()
        }
        self.__material_templates_list = None
        super(SimulationTypeHandler, self).__init__(frame)

    @property
    def material_templates_list(self):
        return self.__material_templates_list

    @material_templates_list.setter
    def material_templates_list(self, value):
        self.__material_templates_list = value

    @property
    def parameters(self):
        """
        Dictionary of parameters relevant for this handler and possibly nested handlers
        :return: dictionary of parameters
        """
        choice = self.__simulation_type_variable.get()
        handler = self.__simulation_types_map[choice]
        handler_parameters = handler.parameters
        material_name = handler_parameters[SOURCE_MATERIAL_NAME]
        material_template = self.__material_templates_list.find(material_name)
        cpu_num = self.cpu_count_variable.get()
        max_cpu = cpu_count()
        cpu_num = min(max(cpu_num, 1), max_cpu)
        parameters = {
            MODEL_NAME: self.model_name_variable.get(),
            JOB_NAME: self.job_name_variable.get(),
            RUN_JOB_AUTOMATICALLY: self.job_run_variable.get(),
            MATERIAL_TEMPLATE: material_template,
            CPU_COUNT: cpu_num
        }
        return dict(handler_parameters, **parameters)

    @property
    def builders(self):
        """
        Get all builders relevant for this handler and possibly nested handlers
        :return: list of builders, with each builder tied to previous one as 'next_builder'
        """
        choice = self.__simulation_type_variable.get()
        handler = self.__simulation_types_map[choice]
        return handler.builders

    def _configure(self):
        self.simulation_definition_frame = LabelFrame(
            self.frame,
            text='Simulation definition',
            borderwidth=config.FRAME_BORDER_WIDTH,
            relief=config.FRAME_RELIEF)
        self.simulation_definition_frame.grid(column=0,
                                              row=0,
                                              sticky=W + E + N,
                                              padx=config.FRAME_PADDING,
                                              pady=config.FRAME_PADDING)

        self.__simulation_type_label = Label(self.simulation_definition_frame,
                                             text='Simulation type')
        self.__simulation_type_label.grid(column=0,
                                          row=0,
                                          sticky=E,
                                          padx=config.FRAME_PADDING,
                                          pady=config.FRAME_PADDING)
        self.__simulation_type_variable = StringVar(
            value=self.__simulation_types_map.keys()[0])
        self.__simulation_type_combobox = Combobox(
            self.simulation_definition_frame,
            values=self.__simulation_types_map.keys(),
            textvariable=self.__simulation_type_variable)
        self.__simulation_type_combobox.grid(column=1,
                                             row=0,
                                             sticky=W,
                                             padx=config.ELEMENT_PADDING,
                                             pady=config.ELEMENT_PADDING)
        self.__simulation_type_combobox.bind(
            '<<ComboboxSelected>>', self.__on_simulation_type_selected)

        self.__model_name_label = Label(self.simulation_definition_frame,
                                        text='Model name')
        self.__model_name_label.grid(column=0,
                                     row=1,
                                     sticky=E,
                                     padx=config.ELEMENT_PADDING,
                                     pady=config.ELEMENT_PADDING)
        self.model_name_variable = StringVar()
        self.__model_name_entry = Entry(self.simulation_definition_frame,
                                        textvariable=self.model_name_variable)
        self.__model_name_entry.grid(column=1,
                                     row=1,
                                     sticky=W,
                                     padx=config.ELEMENT_PADDING,
                                     pady=config.ELEMENT_PADDING)

        self.__job_name_label = Label(self.simulation_definition_frame,
                                      text='Job name')
        self.__job_name_label.grid(column=0,
                                   row=2,
                                   sticky=E,
                                   padx=config.ELEMENT_PADDING,
                                   pady=config.ELEMENT_PADDING)
        self.job_name_variable = StringVar()
        self.__job_name_entry = Entry(self.simulation_definition_frame,
                                      textvariable=self.job_name_variable)
        self.__job_name_entry.grid(column=1,
                                   row=2,
                                   sticky=W,
                                   padx=config.ELEMENT_PADDING,
                                   pady=config.ELEMENT_PADDING)
        self.__cpu_count_label = Label(self.simulation_definition_frame,
                                       text='Number of CPUs')
        self.__cpu_count_label.grid(column=0,
                                    row=3,
                                    sticky=E,
                                    padx=config.ELEMENT_PADDING,
                                    pady=config.ELEMENT_PADDING)
        self.cpu_count_variable = IntVar(value=1)
        self.__job_name_entry = Entry(self.simulation_definition_frame,
                                      textvariable=self.cpu_count_variable)
        self.__job_name_entry.grid(column=1,
                                   row=3,
                                   sticky=W,
                                   padx=config.ELEMENT_PADDING,
                                   pady=config.ELEMENT_PADDING)

        self.__job_run_label = Label(self.simulation_definition_frame,
                                     text='Run automatically')
        self.__job_run_label.grid(column=0,
                                  row=4,
                                  sticky=E,
                                  padx=config.ELEMENT_PADDING,
                                  pady=config.ELEMENT_PADDING)
        self.job_run_variable = BooleanVar()
        self.__job_run_checkbutton = Checkbutton(
            self.simulation_definition_frame, variable=self.job_run_variable)
        self.__job_run_checkbutton.grid(column=1,
                                        row=4,
                                        sticky=W,
                                        padx=config.ELEMENT_PADDING,
                                        pady=config.ELEMENT_PADDING)

        self.create_model_button = Button(self.simulation_definition_frame,
                                          text='Create model',
                                          command=self.__on_create_model)
        self.create_model_button.grid(column=1,
                                      row=5,
                                      sticky=W,
                                      padx=config.ELEMENT_PADDING,
                                      pady=config.ELEMENT_PADDING)

        self.simulation_settings_frame = Frame(self.frame)
        self.simulation_settings_frame.grid(column=0,
                                            row=1,
                                            sticky=W + E + N + S)

        self.__on_simulation_type_selected(None)

    def __on_simulation_type_selected(self, _):
        choice = self.__simulation_type_variable.get()
        self.__simulation_types_map[choice].populate(
            self.simulation_settings_frame)

    def __on_create_model(self):
        params = self.parameters
        builders = self.builders
        first_builder = builders[0]
        first_builder.build(**params)
Beispiel #43
0
class SolinetteGUI(Tk):
    def __init__(self):
        # basics settings
        Tk.__init__(self)               # constructor of parent graphic class
        self.title(u'Solinette: geolocalizar direcciones en Lima y Callo')
        self.iconbitmap('icone_Solinette.ico')
        self.resizable(width = False, height = False)
        self.columnconfigure(0, weight=1)
        self.rowconfigure(0, weight=1)

        # Frames
        self.FrPath = LabelFrame(self, name ='primero',
                            text = u'1: las direcciones para geolocalizar',
                            padx = 5, pady = 5)
        self.FrAttr = LabelFrame(self, name ='segundo',
                            text = u'2: columnas indispensables',
                            padx = 5, pady = 5)
        self.FrConn = LabelFrame(self, name ='tercero',
                            text = u'3: parámetros de conexión a la base de datos',
                            padx=5, pady=5)

        # Variables
        inutile = ['Esperando que se elige el archivo Excel']
        self.typcols = []
        self.host = StringVar()
        self.port = IntVar()
        self.dbnb = StringVar()
        self.usua = StringVar()
        self.mdpa = StringVar()
        self.ok = 0
        self.dico_cols = OD()
        self.dico_vals = OD()
        self.dico_param = {}

            ## Frame 1
        # target folder
        labtarg = Label(self.FrPath, text = u'Archivo Excel (.xls): ')
        self.target = Entry(self.FrPath, width = 35)
        self.browsetarg = Button(self.FrPath,
                                 text = 'Explorar',
                                 command = self.setpathtarg)

        # widgets placement
        labtarg.grid(row = 1, column = 1, columnspan = 1, sticky = N+S+W+E, padx = 2, pady = 2)
        self.target.grid(row = 1, column = 2, columnspan = 1, sticky = N+S+W+E, padx = 2, pady = 2)
        self.browsetarg.grid(row = 1, column = 3, columnspan = 1, sticky = N+S+W+E, padx = 2, pady = 2)

            ## Frame 2
        # Drop-down lists of columns
        labdir = Label(self.FrAttr, text = u'Columna dirección: ')
        self.ddl_dir = Combobox(self.FrAttr, values = inutile)
        labdis = Label(self.FrAttr, text = u'Columna distrito: ')
        self.ddl_dis = Combobox(self.FrAttr, values = inutile)

        # nombre de la tabla en PostgreSQL
        labtabl = Label(self.FrAttr, text = u'Nombre de la tabla: ')
        self.tabl = Entry(self.FrAttr, width = 35)

        # widgets placement
        labdir.grid(row = 1, column = 1, sticky = N+S+W, padx = 2, pady = 2)
        self.ddl_dir.grid(row = 1, column = 2, sticky = N+S+W+E, padx = 2, pady = 2)
        labdis.grid(row = 2, column = 1, sticky = N+S+W, padx = 2, pady = 2)
        self.ddl_dis.grid(row = 2, column = 2, sticky = N+S+W+E, padx = 2, pady = 2)
        labtabl.grid(row = 3, column = 1, sticky = N+S+W, padx = 2, pady = 2)
        self.tabl.grid(row = 3, column = 2, sticky = N+S+W+E, padx = 2, pady = 2)

            ## Frame 3

        # Etiquetas
        Label(self.FrConn, text = u'Host: ').grid(row = 1, column = 1,
                                                  padx = 2, pady = 2,
                                                  sticky = N+S+W)
        Label(self.FrConn, text = u'Puerto: ').grid(row = 2, column = 1,
                                             padx = 2, pady = 2,
                                             sticky = N+S+W)
        Label(self.FrConn, text = u'Base de datos: ').grid(row = 3,
                                                    column = 1,
                                                    padx = 2,
                                                    pady = 2,
                                                    sticky = N+S+W)
        Label(self.FrConn, text = u'Usuario: ').grid(row = 4,
                                              column = 1,
                                              padx = 2,
                                              pady = 2,
                                              sticky = N+S+W)
        Label(self.FrConn, text = u'Contraseña: ').grid(row = 5,
                                                 column = 1,
                                                 padx = 2,
                                                 pady = 2,
                                                 sticky = N+S+W)

        # Formulario
        self.H = Entry(self.FrConn, textvariable = self.host)
        self.P = Entry(self.FrConn, textvariable = self.port)
        self.D = Entry(self.FrConn, textvariable = self.dbnb)
        self.U = Entry(self.FrConn, textvariable = self.usua)
        self.M = Entry(self.FrConn, textvariable = self.mdpa, show='*')
        # pre relleno
        self.host.set('localhost')
        self.port.set('5432')
        self.usua.set('postgres')
        self.mdpa.set('')
        self.dbnb.set('solinette')

        # widgets placement
        self.H.grid(row = 1, column = 2, padx = 3, pady = 5, sticky = N+S+W+E)
        self.P.grid(row = 2, column = 2, padx = 3, pady = 5, sticky = N+S+W+E)
        self.D.grid(row = 3, column = 2, padx = 3, pady = 5, sticky = N+S+W+E)
        self.U.grid(row = 4, column = 2, padx = 3, pady = 5, sticky = N+S+W+E)
        self.M.grid(row = 5, column = 2, padx = 3, pady = 5, sticky = N+S+W+E)


            ## Global frame
        # Hola
        Label(self, text = '¡Hola! ' + env.get(u'USERNAME')).grid(row = 0, column = 0,
                                                 columnspan = 2, sticky = W+E,
                                                 padx = 2, pady = 5)
        # Imagen
        self.icone = PhotoImage(file = r'sources/logo_Solinette.GIF')
        Label(self, borderwidth = 2, relief = 'ridge',
                                     image = self.icone).grid(row = 1,
                                                              rowspan = 4,
                                                              column = 0,
                                                              padx = 1,
                                                              pady = 1,
                                                              sticky = W)

        # Basic buttons
        self.val = Button(self, text = u'Probar la conexión',
                                relief= 'raised',
                                command = self.process,
                                state = DISABLED)
        can = Button(self, text = 'Cancel (quit)',
                                relief= 'groove',
                                command = self.quit)

        # widgets placement
        self.FrPath.grid(row = 2, column = 1, sticky = N+S+W+E, padx = 2, pady = 2)
        self.val.grid(row = 5, column = 1, columnspan = 2,
                            sticky = N+S+W+E, padx = 2, pady = 5)
        can.grid(row = 5, column = 0, sticky = N+S+W+E, padx = 2, pady = 5)

    def setpathtarg(self):
        """ ...browse and insert the path of target folder """
        self.xls = askopenfilename(parent = self,
                                   title = u'Seleccionar el archivo Excel',
                                   filetypes = (("Archivos Excel (2003)", "*.xls"),
                                                ("All files", "*.*")),
                                   initialdir = '../sources')

        if path.splitext(self.xls)[1] == '.xls':
            hoy = '_' + strftime('%y%m%d', localtime())
            self.target.insert(0, self.xls)
            self.licolumns()
            self.browsetarg.config(state=DISABLED)
            self.target.config(state=DISABLED)
            self.FrAttr.grid(row = 3, column = 1, sticky = N+S+W+E, padx = 2, pady = 2)
            self.FrConn.grid(row = 4, column = 1, sticky = N+S+W+E, padx = 2, pady = 2)
            self.tabl.insert(0, path.basename(self.xls).split('.')[0] + hoy)
            self.val.config(state = ACTIVE)
        # end of function
        return self.xls

    def licolumns(self):
        u""" litsing columns names and types from Excel file """
        book = xlrd.open_workbook(self.target.get())   # lectura del archivo
        if book.nsheets > 1:
            print book.sheets()
        ish = 0
        sheet = book.sheet_by_index(ish)    # ouverture de la feuille 1
        # names of columns (first row/line)
        cols = sheet.row_values(0)
        self.ddl_dir['values'] = cols
        self.ddl_dis['values'] = cols
        self.ddl_dir.current(1)
        self.ddl_dis.current(2)
        # types of columns
        self.typcols = list(sheet.row_types(1))
        # add universal ID to list of columns
        self.dico_cols['SOL_IDU'] = 9
        # loop on names and types of columns
        for i in range(len(cols)):
            self.dico_cols[cols[i]] = self.typcols[i]
        # End of function
        return book, self.typcols, self.dico_cols, self.ddl_dir, self.ddl_dis

    def check_campos(self):
        u""" Verifica que los campos del formulario son bien rellenos """
        # conteo y mensaje de los errores
        err = 0
        msj = u'Rellenar todos los campos'
        # checkeo de los campos vacios
        if self.host.get() == u'':
            self.H.configure(background = 'red')
            err = err +1
        if self.port.get() == 0:
            self.P.configure(background = 'red')
            err = err +1
        if self.dbnb.get() == u'':
            self.D.configure(background = 'red')
            err = err +1
        if self.usua.get() == u'':
            self.U.configure(background = 'red')
            err = err +1
        if self.mdpa.get() == u'':
            self.M.configure(background = 'red')
            err = err +1
        if self.tabl.get() == u'':
            self.tabl.configure(background = 'red')
            err = err +1
        if self.ddl_dir.get() == u'':
            self.ddl_dir.configure(background = 'red')
            err = err +1
        if self.ddl_dis.get() == u'':
            self.ddl_dis.configure(background = 'red')
            err = err +1
        # se colunas direcciones y distrito son diferentes
        if self.ddl_dir.get() == self.ddl_dis.get():
            msj = msj + u'\nLas dos columnas no deben ser iguales'
            err = err +1

        # Acción según si hay error(es) o no
        if err != 0:
            showerror(title = u'Error: campo(s) vacío(s)',
                      message = msj)
        # End of function
        return err

    def testconnexion(self):
        u""" testing connection settings """
        try:
            conn = pg.connect(host = self.host.get(), dbname = self.dbnb.get(),
                              port = self.port.get(), user = self.usua.get(),
                              password = self.mdpa.get())
            curs = conn.cursor()
            # check PostgreSQL and PostGIS versions
            try:
                curs.execute('SELECT version()')
                ver = curs.fetchone()
                print ver
            except DatabaseError, e:
                showerror(title = u'Prueba de conexión ',
                message = 'Prueba de conexión fracasó. Mensaje de error:\n' + str(e))
                return
            # check if destination table already exists
            query = "select table_name from information_schema.tables where 'sql_identifier' LIKE 'public'" #% (self.tabl.get())
            curs.execute(query)
            li_tablas = curs.fetchall()
            print 'elle existe déjà connard : ', li_tablas
            # información al usuario
            self.val.config(text='¡D A L E!')
            showinfo(title = u'Prueba de conexión ',
                     message = u'Prueba de conexión terminó con éxito')
            self.ok = 1
            # clausura de la conexión
            conn.close()

        except pg.OperationalError, e:
            showerror(title = u'Prueba de conexión ',
                      message = 'Prueba de conexión fracasó. Mensaje de error:\n' + str(e))
            return
Beispiel #44
0
class Application(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.root = master
        self.root.title('FPS(v1.0.0,qing.guo)')
        self.root.geometry('650x400')
        self.root.resizable(0, 0)  # 禁止调整窗口大小
        self.root.protocol("WM_DELETE_WINDOW", self.close)
        self.root.iconbitmap(get_path('fps.ico'))

    def creatWidgets(self):
        frame_left_top = Frame(self.root, width=410, height=220, bg='#C1CDCD')
        frame_left_center = Frame(self.root,
                                  width=410,
                                  height=80,
                                  bg='#C1CDCD')
        frame_left_bottom = Frame(self.root,
                                  width=410,
                                  height=100,
                                  bg='#C1CDCD')
        frame_right = Frame(self.root, width=240, height=400, bg='#C1CDCD')

        frame_left_top.grid_propagate(0)
        frame_left_center.grid_propagate(0)
        frame_left_bottom.grid_propagate(0)
        frame_right.propagate(0)
        frame_right.grid_propagate(0)

        frame_left_top.grid(row=0, column=0)
        frame_left_center.grid(row=1, column=0)
        frame_left_bottom.grid(row=2, column=0)
        frame_right.grid(row=0, column=1, rowspan=3)

        self.v1 = StringVar()
        self.v2 = StringVar()
        self.v3 = StringVar()
        self.v4 = StringVar()
        self.v5 = StringVar()
        self.v6 = StringVar()
        self.v7 = StringVar()
        self.v8 = StringVar()
        self.v4.set('0.2')

        type_list = [u'UI页面', u'视频/电影']
        swipe_list = [u'竖直方向', u'水平方向']
        swipe_config = [u'开启', u'关闭']
        swipe_speed = ['25ms', '50ms',  '75ms', '100ms', '150ms', '200ms', '300ms', '400ms',\
                       '500ms', '600ms', '700ms', '800ms']

        Label(frame_left_top, text=u"测试类型:", bg='#C1CDCD').grid(row=0,
                                                                column=0,
                                                                pady=20,
                                                                sticky=NW,
                                                                padx=5)
        self.cb1 = Combobox(frame_left_top,
                            width=11,
                            textvariable=self.v1,
                            values=type_list)
        self.cb1.grid(row=0, column=1, ipady=1, padx=5)
        # cb1.set(u'Activity页面')
        self.cb1.current(0)
        #Label
        Button(frame_left_top,
               text=u"获取设备id:",
               command=self.set_device,
               bg='#C1CDCD').grid(row=0, column=2, pady=20, padx=13)
        Entry(frame_left_top, width=15, textvariable=self.v2).grid(row=0,
                                                                   column=3,
                                                                   padx=5,
                                                                   ipady=1)

        Label(frame_left_top, text=u"滑动方向:", bg='#C1CDCD').grid(row=1,
                                                                column=0,
                                                                pady=20,
                                                                sticky=NW,
                                                                padx=5)
        self.cb2 = Combobox(frame_left_top,
                            width=11,
                            textvariable=self.v3,
                            values=swipe_list)
        self.cb2.grid(row=1, column=1, ipady=1, padx=5)
        self.cb2.current(0)
        Button(frame_left_top,
               text=u"设置滑动系数:",
               command=self.set_precent,
               bg='#C1CDCD').grid(row=1, column=2, pady=20, sticky=NW, padx=13)
        Entry(frame_left_top, width=15, textvariable=self.v4).grid(row=1,
                                                                   column=3,
                                                                   padx=5,
                                                                   ipady=1)

        Label(frame_left_top, text=u"滑动速度:", bg='#C1CDCD').grid(row=2,
                                                                column=0,
                                                                pady=20,
                                                                sticky=NW,
                                                                padx=5)
        self.cb3 = Combobox(frame_left_top,
                            width=11,
                            textvariable=self.v5,
                            values=swipe_speed)
        self.cb3.grid(row=2, column=1, padx=5, ipady=1)
        self.cb3.current(8)

        Button(frame_left_top,
               text=u"最大滑动次数:",
               command=self.set_max_steps,
               bg='#C1CDCD').grid(row=2, column=2, pady=20, sticky=NW, padx=13)
        Entry(frame_left_top, width=15, textvariable=self.v6).grid(row=2,
                                                                   column=3,
                                                                   padx=5,
                                                                   ipady=1)

        Label(frame_left_center, text=u"自动滑动", bg='#C1CDCD').grid(row=0,
                                                                  column=0,
                                                                  padx=5,
                                                                  sticky=NW,
                                                                  pady=15)
        self.cb4 = Combobox(frame_left_center,
                            width=6,
                            textvariable=self.v7,
                            values=swipe_config)
        self.cb4.grid(row=0, column=1, ipady=1, padx=5)
        self.cb4.current(0)

        self.b1 = Button(frame_left_center,
                         text=u"开始测试",
                         command=self.start_test,
                         bg='#C1CDCD')
        self.b1.grid(row=0, column=2, padx=30, pady=15)
        self.b2 = Button(frame_left_center,
                         text=u"结束测试",
                         command=self.end_test,
                         bg='#C1CDCD')
        self.b2.grid(row=0, column=3, padx=30, pady=15)
        Button(frame_left_bottom,
               text=u"测试结果",
               command=self.open_file,
               bg='#C1CDCD').grid(row=0, column=0, padx=13, pady=15)
        Entry(frame_left_bottom, width=49, textvariable=self.v8).grid(row=0,
                                                                      column=1,
                                                                      ipady=1,
                                                                      padx=10,
                                                                      pady=15)
        self.v8.set(MyThread.path)
        #Scrollbar
        scrollbar = Scrollbar(frame_right)
        scrollbar.pack(side=RIGHT, fill=Y)
        self.text_msglist = Text(frame_right,
                                 yscrollcommand=scrollbar.set,
                                 bg='#C1CDCD')
        self.text_msglist.pack(side=RIGHT, fill=BOTH)

        scrollbar['command'] = self.text_msglist.yview

        self.text_msglist.tag_config('green', foreground='#008B00')
        self.text_msglist.tag_config('blue', foreground='#0000FF')
        self.text_msglist.tag_config('red', foreground='#FF3030')
        self.text_msglist.tag_config('purple', foreground='#CD00CD')

        self.cb1.bind('<<ComboboxSelected>>', self.cb1_select)
        self.cb2.bind('<<ComboboxSelected>>', self.cb2_select)
        text_message = u"测试前请打开需要测试的页面,测试过程中需保持在同一Activity界面中,切换到其他Activity则无数据输出\n\n"
        self.text_msglist.insert(END, text_message, 'green')

    def cb1_select(self, event):
        if self.v1.get() == u'视频/电影':
            self.cb4.current(1)
        else:
            self.cb4.current(0)

    def cb2_select(self, event):
        if self.v3.get() == u'水平方向':
            self.cb3.current(2)
        else:
            self.cb3.current(8)

    def start_test(self):

        MyThread.myThread1.set_flag('False')
        self.b1.config(state=DISABLED)
        self.b2.config(state=NORMAL)
        test_type = self.v1.get()
        device = self.v2.get()
        direction = self.v3.get()
        ratio = self.v4.get()
        speed = self.v5.get()
        max_steps = self.v6.get()
        auto = self.v7.get()

        if device == '' or device.isspace():
            self.text_msglist.insert(END, 'please input device id\n', 'red')
            self.b1.config(state=NORMAL)
            return -1
        elif auto == u'开启':
            try:
                ratio = float(ratio)
            except ValueError:
                self.text_msglist.insert(END, 'please input swipe precent\n',
                                         'red')
                self.b1.config(state=NORMAL)
                return -1
            if ratio < 0 or ratio >= 0.5:
                self.text_msglist.insert(END, 'precent range is [0,0.5)\n',
                                         'red')
                self.b1.config(state=NORMAL)
                return -1
            elif max_steps == '' or max_steps.isspace(
            ) or not max_steps.isdigit():
                self.text_msglist.insert(END, 'please input swipe precent\n',
                                         'red')
                self.b1.config(state=NORMAL)
                return -1
        if auto == u'关闭':
            ratio = 0
            max_steps = 0
        thread1 = MyThread.myThread1(1, device, direction, speed, ratio,
                                     max_steps, test_type, auto,
                                     self.text_msglist)
        thread1.setDaemon(True)
        thread1.start()

    def end_test(self):
        self.b1.config(state=NORMAL)
        MyThread.myThread1.set_flag('True')
        self.b2.config(state=DISABLED)

    def set_device(self):
        device_info = os.popen('adb devices').readlines()
        device = device_info[-2]
        device_id = device.split('\t')[0]
        self.v2.set(device_id)
        self.text_msglist.insert(END, u'请确认获取的设备id正确,默认获取最新连接的设备\n\n', 'green')
        self.text_msglist.see(END)

    def set_precent(self):
        self.text_msglist.insert(
            END, u'滑动系数n(0>=n<0.5,表示屏幕两端各减去n倍屏宽或长),剩下的区域即为实际滑动的区域。\n', 'green')
        self.text_msglist.insert(END, u'当UI布局为全屏时,可以设置0表示全屏滑动\n\n', 'green')
        self.text_msglist.see(END)

    def set_max_steps(self):
        self.text_msglist.insert(END, u'最大滑动次数max,表示滑动达到最大次数后,反向滑动,如此循环\n\n',
                                 'green')
        self.text_msglist.see(END)

    def open_file(self):
        filename = tkFileDialog.askopenfilename(initialdir=MyThread.path)
        if filename == '':
            return 0
        os.startfile(filename)

    def close(self):
        if MyThread.flag:
            print MyThread.flag
            result = tkMessageBox.askokcancel(title=u"退出", message=u"确定退出程序?")
        else:
            result = tkMessageBox.askokcancel(title=u"警告",
                                              message=u"测试还未完成,确定要退出程序?")
        if result:
            self.root.quit()
            self.root.destroy()
Beispiel #45
0
class CustomerFrame(Frame):
    def __init__(self, master, customers, output_text, refresh):
        Frame.__init__(self, master)
        self.output_text = output_text
        self.refresh = refresh
        self.root = master
        self.customers = customers

        self.name = StringVar() #edit customer
        self.names = []
        self.ncd = NewCustomerDialog(self.root, self.customers, self.refresh, edit=True)

        self.fname = StringVar()
        self.lname = StringVar()
        self.mname = StringVar()
        self.payment = StringVar()
        self.date = StringVar()
        self.iconname="New Customer"

        lf = LabelFrame(self, text="New Customer")
        lf.grid(padx=5,pady=5,row=0,column=0,sticky='ew')
        
        ### dialog content        
        Label(lf, text="Name: ").grid(row=0,column=0,sticky='e',padx=(10,0),pady=(10,2))
        Label(lf, text="Type: ").grid(row=1,sticky='e',pady=2,padx=(10,0))
        Label(lf, text="Date: ").grid(row=1,column=2,sticky='e',ipady=2,padx=(10,0))

        self.fname_en = Entry(lf, width=20, textvariable=self.fname)
        self.mname_en = Entry(lf, width=4, textvariable=self.mname)
        self.lname_en = Entry(lf, width=20, textvariable=self.lname)
        self.payment_cb = Combobox(lf, textvariable=self.payment, width=12,
                                   values=("Drop In", "Punch Card", "Monthly", "Inactive"))
        self.date_en = Entry(lf, width=15, textvariable=self.date)
        
        self.fname_en.grid(row=0,column=1,sticky='ew',pady=(10,2))
        self.mname_en.grid(row=0,column=2,sticky='ew',pady=(10,2))
        self.lname_en.grid(row=0,column=3,sticky='ew',padx=(0,10),pady=(10,2))
        self.payment_cb.grid(row=1,column=1,sticky='ew')
        self.date_en.grid(row=1,column=3,columnspan=2,sticky='ew',padx=(0,10))
        
        ### buttons
        Button(lf, text='Reset Values', width=15,
               command=self.reset_values).grid(row=3,column=0,columnspan=2,sticky='ew',padx=10,pady=(2,10))
        Button(lf, text='Submit', width=15,
               command=self.add_customer).grid(row=3,column=3,sticky='ew',padx=(0,10),pady=(2,10))

        for i in range(4):
            lf.columnconfigure(i, weight=1)

        # edit customer
        lf = LabelFrame(self, text="Edit Customer")
        lf.grid(padx=5,pady=5,row=1,column=0,sticky='ew')

        Label(lf, text="Name: ").grid(row=0,column=0,sticky='e',pady=10,padx=(10,0))
        self.name_cb = Combobox(lf, textvariable=self.name, width=30, values=self.names)
        self.name_cb.grid(row=0,column=1,sticky='ew',pady=10)
        Button(lf, text="Edit",width=15,command=self.edit).grid(row=0,column=2,sticky='ew',padx=10,pady=10)

        for i in range(3):
            lf.columnconfigure(i,weight=1)
        self.columnconfigure(0,weight=1)

        self.fname_en.focus_set() #cursor goes here when frame is created
        self.update_names()
        self.reset_values() #zero out all values in new customer

    def edit(self):
        old_name = str(self.name.get())
        parsed = old_name.split(' ',2)
        (line,row) = self.customers.find(parsed[2],parsed[0],parsed[1])
        
        self.ncd.show(line)
        self.refresh() #refresh the global refresh
        name = ' '.join([self.ncd.fname.get(),self.ncd.mname.get(),self.ncd.lname.get()])
        self.output_text("+ - Modified: " + old_name + ' (' + line[3] + ') -> ' + name + " (" + self.ncd.payment.get() + ")\n")

    def update_names(self):
        '''
        update names in edit Combobox
        '''
        self.populate_names()
        if len(self.names) == 0: self.names = ['']
        self.name_cb['values'] = self.names
        self.name_cb.current(0)

    def populate_names(self):
        try:
            clist = self.customers.get_list()
        except IOError:
            self.output_text("! - " + self.customers.filename + " open in another application.\n")
            return
        clist.sort(key = lambda x: ', '.join(x[0:3]).lower())
        self.names = []
        for line in clist:
            self.names.append(' '.join([line[1],line[2],line[0]]))

    def reset_values(self):
        self.fname.set('')
        self.mname.set('')
        self.lname.set('')
        # blow out the field every time this is created
        self.date.set(date.today().strftime("%m/%d/%Y"))
        self.payment_cb.set("Drop In")

    def add_customer(self, event=None):
        # validate and show errors
        if self.fname.get() == '':
            showerror("Error!", "First name field blank!")
        elif self.lname.get() == '':
            showerror("Error!", "Last name field blank!")
        elif self.mname.get() == '':
            showerror("Error!", "Middle initial field blank!")
        elif self.payment.get() not in ("Drop In", "Punch Card", "Monthly", "Inactive"):
            showerror("Error!", "Incorect Customer type!")
        elif not re.compile(r'[01]?\d/[0123]?\d/[12]\d{1,3}').search(self.date.get()):
            showerror("Error!", "Bad entry for date, use format mm/dd/yyyy")
        else:
            # do work
            name = ' '.join([self.fname.get(),self.mname.get(),self.lname.get()])
            old, row = self.customers.find(str(self.lname.get()).strip(), str(self.fname.get()).strip(),
                                           str(self.mname.get()).strip())
            new = [str(self.lname.get()).strip(), str(self.fname.get()).strip(), str(self.mname.get()).strip(),
                   str(self.payment.get()).strip(), datetime.strptime(self.date.get(), "%m/%d/%Y")]
            
            if not old: #add customer
                self.customers.add(new)
                self.output_text("+ - New Customer: " + name + " (" + self.payment.get() + ")\n")
                self.refresh()
            else:
                var = IntVar()
                
                diag = AlreadyExistsDialog(self.root, new, old, var)
                diag.show()
                if var.get() == 0: # edit
                    pass
                if var.get() == 1: # replace customer
                    self.customers.replace(row, new)
                    self.output_text("+ - Modified: " + name + " (" + self.payment.get() + ")\n")
                    self.refresh()
Beispiel #46
0
class JobUI(Toplevel):  # 编辑任务窗口
    def __init__(self, parent_window, job, parent_name, job_name):
        self.edit_job = Toplevel()
        Log()
        self.log = logging.getLogger("Data_Collect_Log")
        self.parent = parent_window
        self.edit_job.protocol("WM_DELETE_WINDOW", self.job_cancel)
        self.job_file_ext = '.dat'
        self.job_script_ext = '.bat'
        self.txt_text_job = StringVar()
        self.txt_text_task = StringVar()
        self.txt_text_desc = StringVar()
        self.txt_text_server = StringVar()
        self.txt_text_user = StringVar()
        self.txt_text_pwd = StringVar()
        self.txt_text_tablespace = StringVar()
        self.txt_text_script = StringVar()

        self.job_conf_content = None  # JOB配置内容
        self.job_script_content = None  # JOB脚本内容

        self.edit_job.geometry('600x520')
        self.edit_job.title(u'任务编辑')
        self.edit_job.iconbitmap('ico.ico')
        self.edit_job.resizable(width=False, height=False)

        entry_opt = {'column': 2, 'ipadx': 30, 'sticky': W}  # 文本框的字典GRID参数
        top_frame = Frame(self.edit_job)
        top_frame.configure(borderwidth=2, bg='gray')
        Label(top_frame, text="JOB", bg='gray').grid(row=0, column=1, sticky=W)
        self.combobox_Job_name = Combobox(top_frame,
                                          width=18,
                                          textvariable=self.txt_text_job,
                                          state='readonly')
        self.combobox_Job_name.grid(row=0, **entry_opt)
        Label(top_frame, text=u"任务名称", bg='gray').grid(row=1,
                                                       column=1,
                                                       sticky=W)
        self.entry_text_name = Entry(top_frame,
                                     textvariable=self.txt_text_task)
        self.entry_text_name.grid(row=1, **entry_opt)

        tip = Label(top_frame)
        tip.configure(text=u"任务名称不能为空,表空间用户名密码等信息并没有实际意义。仅仅是为了方便在主界面查看代码是否匹配!")
        tip.configure(bg='gray', wraplength=290, justify='left', fg='red')
        tip.grid(row=2, column=2, sticky=E, rowspan=3)
        Label(top_frame, text=u"任务描述", bg='gray').grid(row=2,
                                                       column=1,
                                                       sticky=W)
        self.entry_text_desc = Entry(top_frame,
                                     textvariable=self.txt_text_desc)
        self.entry_text_desc.grid(row=2, **entry_opt)
        Label(top_frame, text=u"服务器地址", bg='gray').grid(row=3,
                                                        column=1,
                                                        sticky=W)
        self.entry_text_server = Entry(top_frame,
                                       textvariable=self.txt_text_server)
        self.entry_text_server.grid(row=3, **entry_opt)
        Label(top_frame, text=u"用户名", bg='gray').grid(row=4,
                                                      column=1,
                                                      sticky=W)
        self.entry_text_user = Entry(top_frame,
                                     textvariable=self.txt_text_user)
        self.entry_text_user.grid(row=4, **entry_opt)
        Label(top_frame, text=u"密码", bg='gray').grid(row=5, column=1, sticky=W)
        self.entry_text_pwd = Entry(top_frame, textvariable=self.txt_text_pwd)
        self.entry_text_pwd.grid(row=5, **entry_opt)
        Label(top_frame, text=u"表空间", bg='gray').grid(row=6,
                                                      column=1,
                                                      sticky=W)
        self.entry_text_tablespace = Entry(
            top_frame, textvariable=self.txt_text_tablespace)
        self.entry_text_tablespace.grid(row=6, **entry_opt)
        Label(top_frame, text=u"脚本", bg='gray').grid(row=7, column=1, sticky=W)
        self.entry_text_script = ScrolledText(top_frame, width=64, height=25)
        self.entry_text_script.grid(row=7, **entry_opt)
        top_frame.pack(side=TOP)

        bottom_frame = Frame(self.edit_job)
        bottom_frame.configure(height=30, borderwidth=2)
        bottom_frame.pack_propagate(0)
        button_ok = Button(bottom_frame,
                           text=u"保 存",
                           command=self.check_entry_is_empty)
        button_ok.pack(side=LEFT, padx=150, ipadx=10)

        button_cancel = Button(bottom_frame,
                               text=u"取 消",
                               command=self.job_cancel)
        button_cancel.pack(
            side=LEFT,
            ipadx=10,
        )
        bottom_frame.pack(side=BOTTOM, fill=X)
        self.edit_job.update_idletasks()
        self.init_ui(job, parent_name, job_name)
        self.edit_job.deiconify()
        x, y = self.center(600, 520)
        self.edit_job.geometry('%dx%d+%d+%d' % (600, 520, x, y))
        self.edit_job.deiconify()
        self.edit_job.focus_force()

    def init_ui(self, job, parent, job_name):
        u"""
        根据传入的参数,决定窗口的初始状态
        :param job: 0-新建菜单点击创建 1-JOB树右键新建JOB菜单 2-双击JOB 3--菜单打开JOB菜单调用
        :param parent: 父节点
        :param job_name: 节点名称_job_name
        :return:
        """
        if job == 0:
            value_combobox = ManageJob.scan_all_job()
            tuple(value_combobox)
            self.combobox_Job_name['values'] = value_combobox
            self.parent.hide()
        elif job == 1:
            self.txt_text_job.set(job_name)
            self.combobox_Job_name.configure(state='disabled')
            self.parent.hide()
        elif job == 2:
            file_path = ManageJob.get_conf_path(parent, job_name)
            script_path = ManageJob.get_script_path(parent, job_name)
            try:
                self.job_conf_content = open(file_path).readlines()
                self.job_script_content = open(script_path).read()
                self.parent.hide()
            except Exception, e:
                self.log.error(parent + '_' + job_name + u'读取失败' +
                               e.message.decode('gbk'))
                tkMessageBox.showinfo(title=u'警告', message=e.message)
                self.edit_job.destroy()
            self.set_text_value(parent)
            self.combobox_Job_name.configure(state='disabled')
        elif job == 3:
            parent = job_name[job_name.find('Job') +
                              4:job_name.find('/JobConf')]
            job_name = os.path.split(job_name)[1][:-4]
            file_path = ManageJob.get_conf_path(parent, job_name)
            script_path = ManageJob.get_script_path(parent, job_name)
            self.job_conf_content = open(file_path).readlines()
            self.job_script_content = open(script_path).read()
            self.set_text_value(parent)
            self.parent.hide()
Beispiel #47
0
with open('settings\\logins.pcl') as filename:
    logins = pickle.load(filename)
    last_user = pickle.load(filename)

back = PhotoImage(file='static//interface//login.pbm')
frame = Canvas(root, relief=GROOVE)
frame.pack(side=TOP, fill=BOTH, expand=YES, padx=2, pady=2)
frame.create_image(0,0, anchor='nw', image=back)

frame2 = Frame(frame)
frame2.pack(pady=(40,0))

box = Combobox(frame2, justify=CENTER)
box['values'] = logins
box.current(logins.index(last_user))
box.grid(column=2, row=1)

Button(frame, text='Войти', command=login).pack(pady=(10,40))

passVar = StringVar()
entry_password = Entry(frame2, show="*", width=15, justify=CENTER,
                                                           textvariable=passVar)
entry_password.bind('<Return>', login)
entry_password.grid(column=2, row=2, sticky='we')

Label(frame2, text='Логин:').grid(column=1, row=1, sticky='we')
Label(frame2, text='Пароль:').grid(column=1, row=2, sticky='we')

#-----------------

Beispiel #48
0
def createWidgets():
    nRow = 0
    Frame1 = Frame(root, height=200, width=200)
    Frame1.grid(sticky=W)

    Label7 = Label(Frame1, text='(V1)类型说明:')
    Label7.grid(
        row=nRow,
        column=0,
    )
    Label7 = Label(Frame1, text='(0:oracle  / 1:SQL)')
    Label7.grid(
        row=nRow,
        column=1,
    )
    nRow += 1
    Label7 = Label(Frame1, text='数据库类型:')
    Label7.grid(
        row=nRow,
        column=0,
    )
    Dbtype = Entry(Frame1, textvariable=varDBType)
    Dbtype.grid(row=nRow, column=1)

    Label1 = Label(Frame1, text='数据库地址:')
    # Label1.pack(anchor=W)
    Label1.grid(row=nRow, column=0)
    IPInput = Entry(Frame1, textvariable=varIP)
    IPInput.grid(row=nRow, column=1)
    nRow += 1
    #
    Label2 = Label(Frame1, text='数据库名称:')
    Label2.grid(
        row=nRow,
        column=0,
    )
    ServerName = Entry(Frame1, textvariable=varDateBase)
    ServerName.grid(row=nRow, column=1)
    nRow += 1

    Label3 = Label(Frame1, text='用户名:')
    Label3.grid(
        row=nRow,
        column=0,
    )
    User = Entry(Frame1, textvariable=varUser)
    User.grid(row=nRow, column=1)
    nRow += 1

    Label4 = Label(Frame1, text='数据库密码:')
    Label4.grid(
        row=nRow,
        column=0,
    )
    DBPass = Entry(Frame1, show='*', textvariable=varPaswd)
    DBPass.grid(row=nRow, column=1)
    nRow += 1

    Label5 = Label(Frame1, text='接口地址:')
    Label5.grid(
        row=nRow,
        column=0,
    )
    WebSerIp = Entry(Frame1, textvariable=varWebSerIp)
    WebSerIp.grid(row=nRow, column=1)
    nRow += 1

    Label12 = Label(Frame1, text='        上传间隔:')
    Label12.grid(row=nRow, column=0)
    Input3 = Entry(Frame1, textvariable=varSleeptime)
    Input3.bind('<KeyRelease>', keyPress)
    Input3.grid(row=nRow, column=1)
    nRow += 1

    Frame2 = Frame(Frame1, height=50, width=200)
    Frame2.grid(sticky=W, row=nRow, column=1)

    nRow = 0
    BtnConnet = Button(Frame2, text='写入配置', command=Connet)
    BtnConnet.grid(row=nRow, column=0)

    Frame3 = Frame(root, height=50, width=300)
    Frame3.grid(sticky=N)

    LabMess = Label(Frame3, text='等待连接。。', font=13, fg='red')
    LabMess.grid(row=0, column=0)

    TestBtn = Button(Frame3,
                     text='数据库连接',
                     command=lambda: TestDBConnet(LabMess))
    TestBtn.grid(row=1, column=0)

    Btn1 = Button(Frame3, text='接口测试', command=lambda: IntfConnetTest(LabMess))
    Btn1.grid(row=1, column=2, padx=10)

    Btn2 = Button(Frame3,
                  text='开始上传',
                  command=lambda: Thread_SaveLoad(LabMess))
    Btn2.grid(row=1, column=4, padx=10)

    quitButton = Button(Frame3, text='关闭', command=Quit)
    quitButton.grid(row=1, column=5, padx=10)

    #接口部分
    nRow = 0
    Label8 = Label(Frame1, text='        接口参数: ')
    Label8.grid(row=nRow, column=2, columnspan=2)
    nRow += 1

    Label9 = Label(Frame1, text='        景区编码:')
    Label9.grid(row=nRow, column=2)
    IPInput = Entry(Frame1, textvariable=varParkCode)
    IPInput.grid(row=nRow, column=3)
    nRow += 1

    Label10 = Label(Frame1, text='        业务编码:')
    Label10.grid(row=nRow, column=2)
    combox1 = Combobox(
        Frame1,
        textvariable=varinfoCode,
        values=GetinfoCode(),
        width=18,
    )
    combox1.bind(
        "<<ComboboxSelected>>",
        comboxChanged,
    )
    combox1.grid(
        row=nRow,
        column=3,
    )
    nRow += 1

    Label11 = Label(Frame1, text='        存储过程:')
    Label11.grid(row=nRow, column=2)
    Input3 = Entry(Frame1, textvariable=varProc)
    Input3.grid(row=nRow, column=3)
    nRow += 2

    SaveBtn = Button(Frame1, text='保存存储过程', command=SaveProc)
    SaveBtn.grid(row=nRow, column=3)
Beispiel #49
0
class DATAin:
    def __init__(self, maestro):
        # Atributo de conteo'''
        self.botonClics = 0
        self.bandDATA = 3
        self.operacion=""
        self.cliente = ''
        self.Producto = ''
        self.alturaDATA = 0
        self.anchoDATA = 0
        self.largoDATA = 0
        self.Datos = []
        for i in range (7):
            self.Datos.append('')
            
        self.consoleSQL = PSQLmerma1()
        #gg = Tkk.Notebook(maestro)
        self.top = Toplevel(maestro)
        self.top.title('Introduce medidas de la caja')
        self.top.update_idletasks()
#        w = self.top.winfo_screenwidth()
#        h = self.top.winfo_screenheight()
#        size = tuple(int(_) for _ in self.top.geometry().split('+')[0].split('x'))
#        x = w/2 - size[0]/2
#        y = h/2 - size[1]/2
#        print size + (x, y)
#        
        self.top.geometry("+150+60")
        #self.top.iconbitmap('/home/pi/Desktop/ProgGUI/GUI/resources/ICO/IconoBCT.ico')
        
        #MARCO3 ESEL LINEZO DONDE SE DIBUJAN LAS PESTAÑAS
        self.marco3 = TTK.Notebook(self.top)

        # CREAMOS EL MARCO PARA CADA UNA DE LAS PESTAÑAS
        self.page1 = TTK.Frame(self.marco3)
        self.page2 = TTK.Frame(self.marco3)
        self.page3 = TTK.Frame(self.marco3)
        self.page4 = TTK.Frame(self.marco3)
        self.page5 = TTK.Frame(self.marco3)
       
        # AGREGAMOS EL MARCO A LAS PESTAÑAS Y SU NOMBRE
        self.marco3.add(self.page1, text='Dimensiones de la caja')
        self.marco3.add(self.page2, text='Descripción de la caja')
        self.marco3.add(self.page3, text='Descripción de la prueba')
        self.marco3.add(self.page4, text='Datos del cliente')
        self.marco3.add(self.page5, text='Resumen de datos')
        self.marco3.grid()
        
        # AGREGAGOS CONTENIDO A PESTAÑA 1
        self.IMGcaja = PhotoImage(file = '/home/pi/Desktop/InterfazG-BCT/resources/img/cajaDATA/caja.png')
        self.IMGancho= PhotoImage(file = '/home/pi/Desktop/InterfazG-BCT/resources/img/cajaDATA/anchoSelect.png')
        self.IMGlargo= PhotoImage(file = '/home/pi/Desktop/InterfazG-BCT/resources/img/cajaDATA/largoSelect.png')
        self.IMGalto = PhotoImage(file = '/home/pi/Desktop/InterfazG-BCT/resources/img/cajaDATA/altoSelect.png')
        
        self.cajaLB = Label(self.page1, image = self.IMGcaja)
        self.cajaLB.grid(row = 0, column = 4, rowspan = 5, columnspan = 3)
        
        self.txtLB = 'Seleccione un botón e ingrese \n las medidas en cm'
        self.LB = Label(self.page1, font =('Helvetica', 15), text = self.txtLB)
        self.LB.grid(row = 0, column = 0, columnspan = 4)
        
        self.CBdata = Text(self.page1, state="disabled", width=40, height=2, font=("Helvetica",15))
        self.CBdata.grid(row = 1, column = 0, columnspan = 4)
        
        self.anchoL = Label(self.page1, 
                            font =('Helvetica', 15), 
                            text = "")
        self.anchoL.grid(row =4, column = 4, sticky = 's')
        self.BTNancho = Button(self.page1, width=5, height=1, font=("Helvetica",15), text = 'Ancho', command =lambda: self.selectCB('an'))
        self.BTNancho.grid(row = 5, column = 4)
        self.largoL = Label(self.page1, 
                            font =('Helvetica', 15), 
                            text = "")
        self.largoL.grid(row =4, column = 5, sticky = 's')
        self.BTNlargo = Button(self.page1, width=5, height=1, font=("Helvetica",15), text = 'Largo', command =lambda: self.selectCB('la'))
        self.BTNlargo.grid(row = 5, column = 5)
        self.altoL  = Label(self.page1, 
                            font =('Helvetica', 15), 
                            text = "")
        self.altoL.grid(row =4, column = 6, sticky = 's')
        self.BTNalto = Button(self.page1, width=5, height=1, font=("Helvetica",15), text = 'Alto', command =lambda: self.selectCB('al'))
        self.BTNalto.grid(row = 5, column = 6)
        
        boton1 = self.crearBoton(1)
        boton2 = self.crearBoton(2)
        boton3 = self.crearBoton(3)
        boton4 = self.crearBoton(4)
        boton5 = self.crearBoton(5)
        boton6 = self.crearBoton(6)
        boton7 = self.crearBoton(7)
        boton8 = self.crearBoton(8)
        boton9 = self.crearBoton(9)
        boton0 = self.crearBoton(0,ancho=7)
        botonErase = self.crearBoton(u"\u232B",escribir=False)
        botonErase['background'] = "red"
        botonErase.grid(row = 2, column = 3)
        botonEnter = self.crearBoton(u"\u21B5",escribir=False)
        botonEnter['background'] = "green"
        botonEnter.grid(row = 3, column = 3)
        botondot = self.crearBoton('.')
        
        #Ubicación de los botones
        botones=[boton7, boton8, boton9,
                 boton4, boton5, boton6,
                 boton1, boton2, boton3,
                 boton0]
        contador=0
        for fila in range(2,5):
            for columna in range(3):
                botones[contador].grid(row=fila,column=columna)
                contador+=1
        #Ubicar el último botón al final
        botones[contador].grid(row=5,column=0,columnspan=2)
        botondot.grid(row = 5, column = 2)
        
        # AGREGAGOS CONTENIDO A PESTAÑA 2
        Label(self.page2, 
              font =('Helvetica', 15), 
              text = 'Seleccione:')\
              .grid(row = 0, column = 0,columnspan = 5)
              
        Label(self.page2, 
              font =('Helvetica', 15), 
              text = 'Estilo de caja')\
              .grid(row = 1, column = 0)
              
        self.listCaja = Combobox(self.page2,
                                 state="readonly",
                                 values = ["Caja troquelada", "Caja est" + u"\xe1" + "ndar"],
                                 font =('Helvetica', 15))
        self.listCaja.grid(row = 2, column = 0)
        Label(self.page2, 
              font =('Helvetica', 15), 
              text = '             ')\
              .grid(row = 2, column = 1)
        
        Label(self.page2, 
              font =('Helvetica', 15), 
              text = 'Tipo de flauta')\
              .grid(row = 1, column = 2)
        self.listFlauta = Combobox(self.page2,
                                   state="readonly",
                                   values = ["Corrugado sencillo B", "Corrugado sencillo C", "Corrugado sencillo E", "Doble corrugado BC", "Doble corrugado EB"],
                                   font =('Helvetica', 15))
        self.listFlauta.grid(row = 2, column = 2)
        Label(self.page2, 
              font =('Helvetica', 15), 
              text = '             ')\
              .grid(row = 2, column = 3)
              
              
        Label(self.page2, 
              font =('Helvetica', 15), 
              text = 'Dirección de la flauta')\
              .grid(row = 1, column = 4)
        self.listFlautaD= Combobox(self.page2,
                                   state="readonly",
                                   values = ["Horizontal", "Vertical"],
                                   font =('Helvetica', 15))
        self.listFlautaD.grid(row = 2, column = 4)
                                   
        Label(self.page2, 
              font =('Helvetica', 15), 
              text = '             ')\
              .grid(row = 3, column = 0, columnspan = 3)
        
        Label(self.page2, 
              font =('Helvetica', 15), 
              text = 'Grado del material')\
              .grid(row = 4, column = 0)
        self.listGradoM= Combobox(self.page2,
                                   state="readonly",
                                   values = ["No aplica", "20 ECT", "21 ECT", "23 ECT", "26 ECT", "29 ECT", "32 ECT", "44 ECT", "48 ECT", "50 ECT", "61 ECT", "71 ECT"],
                                   font =('Helvetica', 15))
        self.listGradoM.grid(row = 5, column = 0)
                                   
        Label(self.page2, 
              font =('Helvetica', 15), 
              text = 'Tipo de unión')\
              .grid(row = 4, column = 2)
        self.listUnion= Combobox(self.page2,
                                   state="readonly",
                                   values = ["Pegado", "Grapado", "Armado automático"],
                                   font =('Helvetica', 15))
        self.listUnion.grid(row = 5, column = 2)
        
        # AGREGAMOS CONTEIDO A PAGE3
        Label(self.page3, 
              font =('Helvetica', 15), 
              text = 'Método de cierre')\
              .grid(row = 0, column = 0)
        self.listCierre= Combobox(self.page3,
                                   state="readonly",
                                   values = ["Conforme a la TAPPI T 804", "Otro", "No aplica"],
                                   font =('Helvetica', 15))
        self.listCierre.grid(row = 1, column = 0)
                                   
        Label(self.page3, 
              font =('Helvetica', 15), 
              text = '             ')\
              .grid(row = 0, column = 1)
              
        Label(self.page3, 
              font =('Helvetica', 15), 
              text = 'Orientación de la prueba')\
              .grid(row = 0, column = 2)
        self.listOrientaC= Combobox(self.page3,
                                   state="readonly",
                                   values = ["Arriba a abajo", "Extremo a extremo", "Lado a lado"],
                                   font =('Helvetica', 15))
        self.listOrientaC.grid(row = 1, column = 2)
        
        self.IMGbct = Image.open(file = '/home/pi/Desktop/InterfazG-BCT/resources/img/cajaDATA/CajaBIedit.png')
        
        self.cajaBCT = Label(self.page3, image = self.IMGbct)
        self.cajaBCT.grid(row = 2, column = 0, columnspan = 3)
        
        # AGREGAMOS CONTENIDO A PAGE 4
        self.txtLB = 'Ingresar datos o buscar por número de pedido'
        self.state = TTK.Label(self.page4, font =('Helvetica', 15), text = self.txtLB)
        self.state.grid(row = 0, column = 0, columnspan = 12)
        
        boton1 = self.crearBotonP4(1)
        boton2 = self.crearBotonP4(2)
        boton3 = self.crearBotonP4(3)
        boton4 = self.crearBotonP4(4)
        boton5 = self.crearBotonP4(5)
        boton6 = self.crearBotonP4(6)
        boton7 = self.crearBotonP4(7)
        boton8 = self.crearBotonP4(8)
        boton9 = self.crearBotonP4(9)
        boton0 = self.crearBotonP4(0)
        
        botonQ = self.crearBotonP4('Q')
        botonW = self.crearBotonP4('W')
        botonE = self.crearBotonP4('E')
        botonR = self.crearBotonP4('R')
        botonT = self.crearBotonP4('T')
        botonY = self.crearBotonP4('Y')
        botonU = self.crearBotonP4('U')
        botonI = self.crearBotonP4('I')
        botonO = self.crearBotonP4('O')
        botonP = self.crearBotonP4('P')
        botonA = self.crearBotonP4('A')
        botonS = self.crearBotonP4('S')
        botonD = self.crearBotonP4('D')
        botonF = self.crearBotonP4('F')
        botonG = self.crearBotonP4('G')
        botonH = self.crearBotonP4('H')
        botonJ = self.crearBotonP4('J')
        botonK = self.crearBotonP4('K')
        botonL = self.crearBotonP4('L')
        botonNN= self.crearBotonP4('Ñ')
        botonZ = self.crearBotonP4('Z')
        botonX = self.crearBotonP4('X')
        botonC = self.crearBotonP4('C')
        botonV = self.crearBotonP4('V')
        botonB = self.crearBotonP4('B')
        botonN = self.crearBotonP4('N')
        botonM = self.crearBotonP4('M')
        botondot = self.crearBotonP4('.')
        botonguion = self.crearBotonP4('-')
        botonguionb = self.crearBotonP4(',')
        botonErase = self.crearBotonP4(u"\u232B",escribir=False)
        botonErase['background'] = "red"
        botonErase.grid(row = 3, column = 11)
        botonEnter = self.crearBotonP4(u"\u21B5",escribir=False,alto=2)
        botonEnter['background'] = "green"
        botonEnter.grid(row = 1, column = 11, rowspan = 2, sticky = 's')
        botonSpace = Button(self.page4, text=u"\u2423", width=5, height=1, font=("Helvetica",15), command=lambda:self.clickP4(' ',True))
        botonSpace.grid(row = 4, column = 11)
        
        #Ubicación de los botones
        botones= [boton1, boton2, boton3, boton4, boton5, boton6, boton7, boton8, boton9, boton0,
                  botonQ, botonW, botonE, botonR, botonT, botonY, botonU, botonI, botonO, botonP, 
                  botonA, botonS, botonD, botonF, botonG, botonH, botonJ, botonK, botonL, botonNN, 
                  botonZ, botonX, botonC, botonV, botonB, botonN, botonM, botondot, botonguion, botonguionb]
        contador=0
        for fila in range(1,5):
            for columna in range(10):
                botones[contador].grid(row=fila,column=columna)
                contador+=1
        
        self.ChkSe = IntVar()
        self.RBCliente = Radiobutton(self.page4, text = 'Cliente',font =('Helvetica', 15), variable = self.ChkSe, value = 1)
        self.RBCliente.grid(row = 5, column = 2, columnspan = 2, sticky = 'w')
        
        self.RBProducto = Radiobutton(self.page4, text = 'Producto',font =('Helvetica', 15), variable = self.ChkSe, value = 2)
        self.RBProducto.grid(row = 5, column = 4, columnspan = 2, sticky = 'w')
        
        self.RBBuscar = Radiobutton(self.page4, text = 'Buscar por pedido',font =('Helvetica', 15), variable = self.ChkSe, value = 3)
        self.RBBuscar.grid(row = 5, column = 6, columnspan = 3, sticky = 'w')
        
        self.CBdata2 = Text(self.page4, state="disabled", width=40, height=1, font=("Helvetica",15))
        self.CBdata2.grid(row = 6, column = 0, columnspan = 12)
                
        self.clienteL = TTK.Label(self.page4, font =('Helvetica', 15), text = 'Cliente:')
        self.clienteL.grid(row = 7, column = 0, columnspan = 11, sticky = 'w')
        
        self.ProductoL = TTK.Label(self.page4, font =('Helvetica', 15), text = 'Producto:')
        self.ProductoL.grid(row = 8, column = 0, columnspan = 11, sticky = 'w')
        
        # AGREGAMOS CONTENIDO A PAGE 5
        Label(self.page5, 
              font =('Helvetica', 15), 
              text = '*                                                                                                                                                *').grid(row = 0,
#              text = '123456789_123456789_123456789_123465789_123456789_123456789_123456789_123456789_12',
              #text = '____________________________').grid(row = 0,
                                                                     column = 0,
                                                                     columnspan = 3)
        Label(self.page5, 
              font =('Helvetica', 15),
              text = '_________________________________________').grid(row = 0,
                                                                     column = 0,)
        
        Label(self.page5, 
              font =('Helvetica', 15),
              text = '_________________________________________').grid(row = 0,
                                                                     column = 1)
#        Label(self.page5, 
#              font =('Helvetica', 15),
#              text = '___________________________').grid(row = 0,
#                                                                     column = 2)
        Label(self.page5, 
              font =('Helvetica', 15), 
              text = 'Verifique los datos ingresado:').grid(row = 0,
                                                                     column = 0,
                                                                     columnspan = 2)
        self.StxtCliente = StringVar(value = '*')
        self.txtCliente = Label(self.page5, font = ('Helvetica', 15, 'italic'), text = '*Cliente:')
        self.txtCliente.grid(row = 1, column = 0, sticky = 'w')
        self.txtClienteL = Label(self.page5, font = ('Helvetica', 15), textvariable = self.StxtCliente)
        self.txtClienteL.place(x = 79, y = 28)
        
        self.StxtProducto = StringVar(value = '*')
        self.txtProducto = Label(self.page5, font = ('Helvetica', 15, 'italic'), text = '*Producto: ')
        self.txtProducto.grid(row = 2, column = 0, columnspan = 2, sticky = "w")
        self.txtProductoL = Label(self.page5, font = ('Helvetica', 15), textvariable = self.StxtProducto)
        self.txtProductoL.place(x = 99, y = 56)
        
        self.StxtLargo = StringVar(value = '*')
        self.txtLargo = Label(self.page5, font = ('Helvetica', 15, 'italic'), text = '*Largo:')
        self.txtLargo.grid(row = 3, column = 0, sticky = "w")
        self.txtLargoL = Label(self.page5, font = ('Helvetica', 15), textvariable = self.StxtLargo)
        self.txtLargoL.place(x= 69, y = 84)
        
        self.StxtAlto = StringVar(value = '*')
        self.txtAlto = Label(self.page5, font = ('Helvetica', 15, 'italic'), text = '*Alto:')
        self.txtAlto.place(x = 310, y = 84)
        self.txtAltoL = Label(self.page5, font = ('Helvetica', 15), textvariable = self.StxtAlto)
        self.txtAltoL.place(x = 363, y = 84)
        
        self.StxtAncho = StringVar(value = '*')
        self.txtAncho = Label(self.page5, font = ('Helvetica', 15, 'italic'), text = '*Ancho: ')
        self.txtAncho.place(x= 590, y = 84)
        self.txtAnchoL = Label(self.page5, font = ('Helvetica', 15), textvariable = self.StxtAncho)
        self.txtAnchoL.place(x= 666, y = 84)
        
        self.StxtStlCj = StringVar(value = '*')
        self.txtStlCj = Label(self.page5, font = ('Helvetica', 15, 'italic'), text = '*Estilo caja:')
        self.txtStlCj.grid(row = 4, column = 0, sticky = "w")
        self.txtStlCjL = Label(self.page5, font = ('Helvetica', 15), textvariable = self.StxtStlCj)
        self.txtStlCjL.place(x= 110, y = 112)
        
        self.StxtTpFlt = StringVar(value = '*')
        self.txtTpFlt = Label(self.page5, font = ('Helvetica', 15, 'italic'), text = '*Tipo de flauta:')
        self.txtTpFlt.grid(row = 4, column = 1, sticky = "w")
        self.txtTpFltL = Label(self.page5, font = ('Helvetica', 15), textvariable = self.StxtTpFlt)
        self.txtTpFltL.place(x= 594, y = 112)
        
        self.StxtDrccnFlt = StringVar(value = '*')
        self.txtDrccnFlt = Label(self.page5, font = ('Helvetica', 15, 'italic'), text = '*Dirección de la flauta: ')
        self.txtDrccnFlt.grid(row = 5, column = 0, sticky = "w")
        self.txtDrccnFltL = Label(self.page5, font = ('Helvetica', 15), textvariable = self.StxtDrccnFlt)
        self.txtDrccnFltL.place(x= 216, y = 140)
        
        self.StxtGrdMtrl = StringVar(value = '*')
        self.txtGrdMtrl = Label(self.page5, font = ('Helvetica', 15, 'italic'), text = '*Grado del material: ')
        self.txtGrdMtrl.grid(row = 5, column = 1, sticky = "w")
        self.txtGrdMtrlL = Label(self.page5, font = ('Helvetica', 15), textvariable = self.StxtGrdMtrl)
        self.txtGrdMtrlL.place(x= 640, y = 140)
        
        
        self.StxtTpUnn = StringVar(value = '*')
        self.txtTpUnn = Label(self.page5, font = ('Helvetica', 15, 'italic'), text = '*Tipo de unión: ')
        self.txtTpUnn.grid(row = 6, column = 0, sticky = "w")
        self.txtTpUnnL = Label(self.page5, font = ('Helvetica', 15), textvariable = self.StxtTpUnn)
        self.txtTpUnnL.place(x= 138, y = 168)
        
        self.StxtMtdCrr = StringVar(value = '*')
        self.txtMtdCrr = Label(self.page5, font = ('Helvetica', 15, 'italic'), text = '*Método de cierre: ')
        self.txtMtdCrr.grid(row = 6, column = 1, sticky = "w")
        self.txtMtdCrrL = Label(self.page5, font = ('Helvetica', 15), textvariable = self.StxtMtdCrr)
        self.txtMtdCrrL.place(x= 623, y = 168)
        
        self.StxtOrntcn = StringVar(value = '*')
        self.txtOrntcn = Label(self.page5, font = ('Helvetica', 15, 'italic'), text = '*Orientación de la prueba: ')
        self.txtOrntcn.grid(row = 7, column = 0, sticky = "w")
        self.txtOrntcnL = Label(self.page5, font = ('Helvetica', 15), textvariable = self.StxtOrntcn)
        self.txtOrntcnL.place(x= 243, y = 197)
        
        cc = Button(self.page5, font = ('Helvetica', 15, "bold"), text = 'Cerrar', bg = "red", command = self.cerrarB)#.place(x = 20, y = 20)
        cc.grid(row = 8, column = 0, columnspan = 2)
        
        # OBTENER LO QUE CONTIENEN CADA LISTA
        self.listCaja.bind("<<ComboboxSelected>>", self.getList)
        self.listCierre.bind("<<ComboboxSelected>>", self.getList)
        self.listFlauta.bind("<<ComboboxSelected>>", self.getList)
        self.listFlautaD.bind("<<ComboboxSelected>>", self.getList)
        self.listGradoM.bind("<<ComboboxSelected>>", self.getList)
        self.listOrientaC.bind("<<ComboboxSelected>>", self.getList)
        self.listUnion.bind("<<ComboboxSelected>>", self.getList)
        
        self.top.protocol("WM_DELETE_WINDOW", self.cerrar)
        
    def motion(self, event):
        self.posy.set(event.y)
        self.posx.set(event.x)
        
    def selectCB(self,selecc):
        if selecc == 'al':
            self.LB['text'] = 'Usted selecciono alto'
            self.cajaLB['image'] = self.IMGalto
            self.bandDATA = 0
        elif selecc == 'an':
            self.LB['text'] = 'Usted selecciono ancho'
            self.cajaLB['image'] = self.IMGancho
            self.bandDATA = 1
        elif selecc == 'la':
            self.LB['text'] = 'Usted selecciono largo'
            self.cajaLB['image'] = self.IMGlargo
            self.bandDATA = 2
        
    def crearBoton(self, valor, escribir=True, ancho=5, alto=1):
        return Button(self.page1, text=valor, width=ancho, height=alto, font=("Helvetica",15), command=lambda:self.click(valor,escribir))
        
    def crearBotonP4(self, valor, escribir=True, ancho=5, alto=1):
        return Button(self.page4, text=valor, width=ancho, height=alto, font=("Helvetica",15), command=lambda:self.clickP4(valor,escribir))
        
    def conteo(self):
        self.botonClics += 1
        self.btnCLK['text'] = 'Clics totales = ' + str(self.botonClics)
        
        
    def click(self, texto, escribir):
        if not escribir:
            if texto==u"\u21B5" and self.operacion!="" and self.bandDATA != 3:
                if self.bandDATA == 0:
                    try:
                        self.alturaDATA = float(self.operacion)
                        self.LB['text'] = 'Usted ingreso ' + str(self.alturaDATA) + 'cm en altura'
                        self.altoL['text'] = str(self.alturaDATA) + 'cm'
                        self.StxtAlto.set(str(self.alturaDATA) + 'cm')
                        self.changeTXT(self.StxtAlto, str(self.alturaDATA) + 'cm', self.txtAlto, 'Alto:')
                    except ValueError:
                        self.LB['text'] = 'Atención \n El dato ingresado no es un número válido,\n favor de verificar'
                        
                elif self.bandDATA == 1:
                    try:
                        self.anchoDATA = float(self.operacion)
                        self.LB['text'] = 'Usted ingreso ' + str(self.anchoDATA) + 'cm en ancho'
                        self.changeTXT(self.StxtAncho, str(self.anchoDATA) + 'cm', self.txtAncho, 'Ancho:')
                        self.anchoL['text'] = str(self.anchoDATA) + 'cm'
                    except ValueError:
                        self.LB['text'] = 'Atención \n El dato ingresado no es un número válido,\n favor de verificar'
                elif self.bandDATA == 2:
                    try:
                        self.largoDATA = float(self.operacion)
                        self.LB['text'] = 'Usted ingreso ' + str(self.largoDATA ) + 'cm en largo'
                        self.changeTXT(self.StxtLargo, str(self.largoDATA ) + 'cm', self.txtLargo, 'Largo:')
                        self.largoL['text'] = str(self.largoDATA ) + 'cm'
                    except ValueError:
                        self.LB['text'] = 'Atención \n El dato ingresado no es un número válido,\n favor de verificar'
                print 'Hola desde borrar'
                self.operacion = ''
                self.limpiarPantalla()
            elif texto==u"\u232B":
                self.operacion=""
                self.limpiarPantalla()
        #Mostrar texto
        else:
            self.operacion+=str(texto)
            self.mostrarEnPantalla(texto)
        return
    
    def clickP4(self, texto, escribir):
        self.ChkSel = int(self.ChkSe.get())
        print self.ChkSel
        if not escribir:
            if texto==u"\u21B5" and self.operacion!="" and self.ChkSel != 0:
                print 'gg'
                if self.ChkSel == 1:
                    self.cliente = self.operacion
                    self.clienteL['text'] = 'Cliente: ' + str(self.cliente)
                    self.changeTXT(self.StxtCliente, str(self.cliente), self.txtCliente, 'Cliente:')
                elif self.ChkSel == 2:
                    self.Producto = self.operacion
                    self.ProductoL['text'] = 'Producto: ' + str(self.Producto)
                    self.changeTXT(self.StxtProducto, str(self.Producto), self.txtProducto, 'Producto:')
                elif self.ChkSel == 3:
                    self.top.iconify()
                    self.consoleSQL.consulta('pedido', str(self.operacion))
                    try:
                        self.cliente = self.consoleSQL.cliente
                        self.clienteL['text'] = 'Cliente: ' + str(self.cliente)
                        self.changeTXT(self.StxtCliente, str(self.cliente), self.txtCliente, 'Cliente:')
                        self.Producto = self.consoleSQL.producto
                        self.ProductoL['text'] = 'Producto: ' + str(self.Producto)
                        self.changeTXT(self.StxtProducto, str(self.Producto), self.txtProducto, 'Producto:')
                    except:
                        tkMessageBox.showerror('Atención','No se encontró el pedido favor de verificar')
                self.operacion = ''
                self.limpiarPantalla(2)
            elif texto==u"\u232B":
                self.operacion=""
                self.limpiarPantalla(2)
            elif self.ChkSel == 0:
                self.top.iconify()
                tkMessageBox.showerror("Atención", 'Debe seleccionar una opción')
        #Mostrar texto
        else:
            self.operacion+=str(texto)
            self.mostrarEnPantalla(texto, 2)
        self.top.deiconify()
        return
    
    def changeTXT(self, StringVarTXT, setStr, LabelTXT, txtLabel):
        StringVarTXT.set(setStr)
        LabelTXT['text'] = txtLabel
        LabelTXT['font'] = ('Helvetica', 15, "bold")
        
    def limpiarPantalla(self, cb = 1):
        if cb ==2:
            self.CBdata2.configure(state="normal")
            self.CBdata2.delete("1.0", END)
            self.CBdata2.configure(state="disabled")
        else:
            self.CBdata.configure(state="normal")
            self.CBdata.delete("1.0", END)
            self.CBdata.configure(state="disabled")
        return
    

    def mostrarEnPantalla(self, valor, cb = 1):
        if cb == 2:
            self.CBdata2.configure(state="normal")
            self.CBdata2.insert(END, valor)
            self.CBdata2.configure(state="disabled")
        else:
            self.CBdata.configure(state="normal")
            self.CBdata.insert(END, valor)
            self.CBdata.configure(state="disabled")
        return
    
    def getList(self, event):
        self.CheckList(self.listCaja, 0, self.StxtStlCj, 'Estilo caja: ', self.txtStlCj)
        self.CheckList(self.listFlauta, 1, self.StxtTpFlt, 'Tipo de flauta: ', self.txtTpFlt)
        self.CheckList(self.listFlautaD, 2, self.StxtDrccnFlt, 'Dirección de  la flauta: ', self.txtDrccnFlt)
        self.CheckList(self.listGradoM, 3, self.StxtGrdMtrl, 'Grado del material: ', self.txtGrdMtrl)
        self.CheckList(self.listUnion, 4, self.StxtTpUnn, 'Tipo de unión: ', self.txtTpUnn)
        self.CheckList(self.listCierre, 5, self.StxtMtdCrr, 'Método de cierre: ', self.txtMtdCrr)
        self.CheckList(self.listOrientaC, 6, self.StxtOrntcn, 'Orientación de la prueba: ', self.txtOrntcn)
        #hola
        
    def CheckList(self, lista, num_list, StrVarL, txt, labelTXT,):
        gg = lista.get()
        print gg
        if gg != '':
            self.Datos[num_list] = lista.get()
            if num_list == 0:
                if self.Datos[0] == (u'Caja est\xe1ndar'):
                    self.Datos[0] = str('Caja estándar')
            elif num_list == 4:
                if self.Datos[4] == (u'Armado autom\xe1tico'):
                    self.Datos[4] = ('Armado automático')
            StrVarL.set(self.Datos[num_list])
            labelTXT['text'] = txt
            labelTXT['font'] = ('Helvetica', 15, "bold")
            
        
    def cerrar(self):
        self.top.iconify()
        tkMessageBox.showinfo("Atención", "Si desea salir, debe hacerlo desde el botón ubicado en la pestaña de Resumen de datos.")
        self.top.deiconify()
        
    def cerrarB(self):
        self.top.iconify()
        respuesta=tkMessageBox.askyesno("Atención", "Usted esta a punto de salir, ¿Los datos ingresados son los correctos?")
        if respuesta==True:
            self.top.destroy()
        try:
            self.top.deiconify()
        except:
            print "Ventana cerrada"
            
#ventana = Tk()
#final = DATAin(ventana)
#ventana.mainloop()
Beispiel #50
0
class TimeEntryWidget(Frame):
    """Widget to handle starting and stopping the current time entry"""

    def __init__(self, parent, projects, onCreation=None):
        Frame.__init__(self, parent)

        self.onCreation = onCreation

        self.time = StringVar()
        self.time.set("00:00:00")
        self.timeEntry = None

        self.projects = projects.values()
        self.projects.sort(key=lambda x: x.name)

        l = Label(self, text="Description")
        l.grid(row=0, column=0)

        self.description = StringVar()
        e = Entry(self, textvariable=self.description, font=("Helvetica", 16))
        e.grid(row=1, column=0)

        l = Label(self, text="Project")
        l.grid(row=0, column=1)

        values = map(lambda x: x.name, self.projects)
        self.projectChooser = Combobox(self, values=values, font=("Helvetica", 16))
        self.projectChooser.grid(row=1, column=1)

        self.timeEntryClock = Label(self, textvariable=self.time, font=("Helvetica", 16))
        self.timeEntryClock.grid(row=1, column=2)

        self.submitText = StringVar()
        self.submitText.set("Start")
        self.submit = Button(self, textvariable=self.submitText, command=self.start, font=("Helvetica", 16))
        self.submit.grid(row=1, column=3, padx=10)

    def selectedProject(self):
        return self.projects[self.projectChooser.current()]

    def start(self):
        self.submitText.set("Stop")
        self.submit["command"] = self.stop
        project = self.selectedProject()
        self.timeEntry = project.startTimeEntry(self.description.get())
        self.onCreation(self.timeEntry)
        self._tick()

    def stop(self):
        self.submitText.set("Start")
        self.submit["command"] = self.start
        self.timeEntry.stop()
        self.timeEntry = None
        self.description.set("")

    def _tick(self):
        if self.timeEntry:
            duration = datetime.datetime.now() - self.timeEntry.data["start"]
            self.time.set(time.strftime("%H:%M:%S", time.gmtime(duration.seconds)))
            self.after(1000, self._tick)
        else:
            self.time.set("00:00:00")
Beispiel #51
0
class ReportsFrame(Frame):
    def __init__(self,master,customers,payments,output_text):
        Frame.__init__(self,master)
        self.customers = customers
        self.payments = payments
        self.master = master
        self.output_text = output_text

        self.year_months = find_years_months(getcwd()) # use cwd, this should be set

        self.year = StringVar()
        self.month = StringVar()
        self.years = sorted(self.year_months.keys())
        self.months = []

        lf = LabelFrame(self, text="Generate Report")
        lf.grid(padx=5,pady=5,row=0,column=0,sticky='ew')

        Label(lf,text="Year: ").grid(row=0,column=0,sticky='e',padx=(10,0),pady=(10,2))
        Label(lf,text="Month: ").grid(row=1,column=0,sticky='e',padx=(10,0),pady=2)

        self.year_cb = Combobox(lf,textvariable=self.year,width=12,values=self.years,state='readonly')
        self.month_cb = Combobox(lf,textvariable=self.month,width=12,values=self.months,state='readonly')
        
        self.year_cb.grid(row=0,column=1,sticky='w',padx=(0,10),pady=(10,2))
        self.month_cb.grid(row=1,column=1,sticky='w',padx=(0,10),pady=2)

        btn = Button(lf,text="Save Report",command=self.report,width=30)
        btn.grid(row=2,column=0,columnspan=2,sticky='n',pady=(2,10),padx=10)

        #configure the grid to expand
        self.columnconfigure(0,weight=1)
        lf.rowconfigure(0,weight=1)
        lf.rowconfigure(1,weight=1)
        lf.columnconfigure(0,weight=1)
        lf.columnconfigure(1,weight=1)

        self.year_cb.bind('<<ComboboxSelected>>',self.year_selected)

        self.update() #update the values

    def report(self):
        '''
        generate the report, run by clicking Button
        '''
        if self.year.get() is '':
            self.output_text("! - Please Select a Year")
            return
        if self.month.get() is '':
            self.output_text("! - Please select a Month")
            return

        year = self.year.get()
        inputf = 'jim_data' + year + '.xlsx'
        month = self.month.get()
        outputf_def = month + year + '_report.xlsx'
        outputf = tkFileDialog.asksaveasfilename(parent=self,
            defaultextension='.xlsx', initialfile=outputf_def)
        if outputf is '': return #file not selected

        #output report
        month_report(inputf,month,year,outputf,self.customers,self.payments)

        self.output_text("* - " + self.month.get() + ' ' + self.year.get() + ' report saved to: ' + outputf + '\n')

        # print stat(outputf)

        if sys.platform == 'darwin':
            system('open ' + outputf + ' &')
        else:
            system(outputf) # open the file

    def update(self):
        '''
        method for updating values when things change
        '''
        self.year_months = find_years_months(getcwd()) # use cwd, this should be set
        self.years = sorted(self.year_months.keys())
        self.months = ['']
        if len(self.years) == 0: self.years = ['']
        self.year_cb['values'] = self.years
        self.month_cb['values'] = self.months
        self.month_cb.current(0)

    def year_selected(self,event=None):
        '''
        run when year is year is selected 
        '''
        self.months = self.year_months[self.year.get()]
        self.month_cb['values'] = self.months
        self.month_cb.current(0)
class Preferences_win(Toplevel):
    def __init__(self, parent):
        Toplevel.__init__(self)

        img = ImageTk.PhotoImage(file=os.path.join(os.path.dirname(__file__),
                                                   'Icons/LMS8001_PLLSim.png'))
        self.tk.call('wm', 'iconphoto', self._w, img)

        self.parent = parent
        if (sys.platform == 'win32'):
            font_paths = matplotlib.font_manager.win32InstalledFonts(
                fontext='ttf')
            self.font_names = []
            for font_path in font_paths:
                font_inst = matplotlib.ft2font.FT2Font(font_path)
                font_prop = matplotlib.font_manager.ttfFontProperty(font_inst)
                self.font_names.append(font_prop.name)
        elif (sys.platform == 'linux2'):
            font_list = matplotlib.font_manager.get_fontconfig_fonts()
            self.font_names = [
                matplotlib.font_manager.FontProperties(fname=fname).get_name()
                for fname in font_list
            ]
        else:
            print 'Unsupported OS type. Exiting Preferences Window.'
            tkMessageBox.showinfo('Unsupported OS type',
                                  'Exiting Preferences Window')
            self.destroy()

        self.initUI()
        center_Window(self)
        self.protocol("WM_DELETE_WINDOW", self.on_Quit)

    def on_OK(self):
        self.on_Apply()
        self.on_Quit()

    def on_Apply(self):
        self.parent.line_color = self.combobox_color.get()
        self.parent.font_name = self.combobox_fonts.get()
        maplotlib_font = {'family': self.parent.font_name}
        matplotlib.rc('font', **maplotlib_font)

    def on_Quit(self):
        self.parent.Pref_win = None
        self.destroy()

    def initUI(self):
        self.title('Preferences')
        self.rowconfigure(0, pad=6)
        self.rowconfigure(1, pad=1)
        self.rowconfigure(2, pad=6)
        self.columnconfigure(0, pad=1)
        self.columnconfigure(1, pad=1)
        self.columnconfigure(2, pad=1)

        label1 = Label(self, text='Graph Font')
        self.combobox_fonts = Combobox(self, values=self.font_names, width=16)
        self.combobox_fonts.current(
            self.font_names.index(self.parent.font_name))
        label1.grid(row=0, column=0, sticky=W)
        self.combobox_fonts.grid(row=0, column=1, columnspan=2, sticky=W)

        label2 = Label(self, text='Line Color')
        self.combobox_color = Combobox(self,
                                       values=self.parent.line_colors,
                                       width=8)
        self.combobox_color.current(
            self.parent.line_colors.index(self.parent.line_color))
        label2.grid(row=1, column=0, sticky=W)
        self.combobox_color.grid(row=1, column=1, columnspan=2, sticky=W)

        buttonOK = Button(self, text='OK', command=self.on_OK, width=16)
        buttonApply = Button(self,
                             text='Apply',
                             command=self.on_Apply,
                             width=16)
        buttonQuit = Button(self, text='Quit', command=self.on_Quit, width=16)
        buttonOK.grid(row=2, column=0, sticky=W + E + S)
        buttonApply.grid(row=2, column=1, sticky=W + E + S)
        buttonQuit.grid(row=2, column=2, sticky=W + E + S)
Beispiel #53
0
    restart = gui.gui_init()
    while restart:
        restart = gui.gui_init()


root = Tk()
root.overrideredirect(True)
x = (root.winfo_screenwidth() - 600) / 2
y = (root.winfo_screenheight() - 400) / 2
root.geometry('600x400+%d+%d' % (x, y))

with open('settings\\logins.pcl') as filename:
    logins = pickle.load(filename)
    last_user = pickle.load(filename)

back = PhotoImage(file='static//interface//login.pbm')
frame = Canvas(root, relief=GROOVE)
frame.pack(side=TOP, fill=BOTH, expand=YES, padx=2, pady=2)
frame.create_image(0,0, anchor='nw', image=back)

box = Combobox(frame)
box['values'] = logins
box.current(logins.index(last_user))
box.grid(column=0, row=1)

Button(frame, text='Войти', command=login).grid(column=0, row=3, columnspan=2, pady=20)
Button(frame, text='Выход', command=root.destroy).grid(column=0, row=8, columnspan=2, pady=40)

root.mainloop()

# выбор фона и файл настроек, очиcтка списка логинов
Beispiel #54
0
class DicoGIS(Tk):
    def __init__(self):
        u"""
        Main window constructor
        Creates 1 frame and 2 labelled subframes
        """

        # basics settings
        Tk.__init__(self)               # constructor of parent graphic class
        self.title(u'DicoGIS {0}'.format(DGversion))

        self.li_raster_formats = ['ecw', 'geotiff']

        # notebook
        self.nb = Notebook(self)
        self.FrProg = Labelframe(self,
                                 name='progression',
                                 text='gui_prog')
        self.FrOutp = Labelframe(self,
                                 name='output',
                                 text='gui_fr4')
        # tabs
        self.tab_files = Frame(self.nb)    # tab_id = 0
        self.tab_sgbd = Frame(self.nb)          # tab_id = 1
        self.tab_webservices = Frame(self.nb)   # tab_id = 2
        self.tab_isogeo = Frame(self.nb)        # tab_id = 3
        self.tab_about = Frame(self.nb)        # tab_id = 4


        ## TAB 1: FILES
        self.nb.add(self.tab_files,
                    text='gui_files', padding=3)
        # frame: path folder
        self.FrPath = Labelframe(self.tab_files,
                                 name='files',
                                 text='gui_fr1')
        self.labtarg = Label(self.FrPath, text='gui_path')
        self.target = Entry(master=self.FrPath, width=35)
        self.browsetarg = Button(self.FrPath,       # browse button
                                 text='gui_choix',
                                 command=lambda: self.setpathtarg(),
                                 takefocus=True)
        self.browsetarg.focus_force()               # force the focus on

        # widgets placement
        self.labtarg.grid(row=1, column=1, columnspan=1,
                          sticky="NSWE", padx=2, pady=2)
        self.target.grid(row=1, column=2, columnspan=1,
                         sticky="NSWE", padx=2, pady=2)
        self.browsetarg.grid(row=1, column=3,
                             sticky="NSWE", padx=2, pady=2)

        # frame: filters
        self.FrFilters = Labelframe(self.tab_files,
                                    name='filters',
                                    text='filters')
        # formats options
        self.opt_shp = IntVar(self.FrFilters)   # able/disable shapefiles
        self.opt_tab = IntVar(self.FrFilters)   # able/disable MapInfo tables
        self.opt_kml = IntVar(self.FrFilters)   # able/disable KML
        self.opt_gml = IntVar(self.FrFilters)   # able/disable GML
        self.opt_geoj = IntVar(self.FrFilters)  # able/disable GeoJSON
        self.opt_gxt = IntVar(self.FrFilters)  # able/disable GXT
        self.opt_egdb = IntVar(self.FrFilters)  # able/disable Esri FileGDB
        self.opt_spadb = IntVar(self.FrFilters)  # able/disable Spatalite DB
        self.opt_rast = IntVar(self.FrFilters)  # able/disable rasters
        self.opt_cdao = IntVar(self.FrFilters)  # able/disable CAO/DAO files
        self.opt_pdf = IntVar(self.FrFilters)   # able/disable Geospatial PDF
        self.opt_lyr = IntVar(self.FrFilters)   # able/disable Geospatial Lyr
        self.opt_mxd = IntVar(self.FrFilters)   # able/disable Geospatial MXD
        self.opt_qgs = IntVar(self.FrFilters)   # able/disable Geospatial QGS

        # format choosen: check buttons
        caz_shp = Checkbutton(self.FrFilters,
                              text=u'.shp',
                              variable=self.opt_shp)
        caz_tab = Checkbutton(self.FrFilters,
                              text=u'.tab',
                              variable=self.opt_tab)
        caz_kml = Checkbutton(self.FrFilters,
                              text=u'.kml',
                              variable=self.opt_kml)
        caz_gml = Checkbutton(self.FrFilters,
                              text=u'.gml',
                              variable=self.opt_gml)
        caz_geoj = Checkbutton(self.FrFilters,
                               text=u'.geojson',
                               variable=self.opt_geoj)
        caz_gxt = Checkbutton(self.FrFilters,
                              text=u'.gxt',
                              variable=self.opt_gxt)
        caz_egdb = Checkbutton(self.FrFilters,
                               text=u'Esri FileGDB',
                               variable=self.opt_egdb)
        caz_spadb = Checkbutton(self.FrFilters,
                                text=u'Spatialite',
                                variable=self.opt_spadb)
        caz_rast = Checkbutton(self.FrFilters,
                               text=u'rasters ({0})'.format(', '.join(self.li_raster_formats)),
                               variable=self.opt_rast)
        caz_cdao = Checkbutton(self.FrFilters,
                               text=u'CAO/DAO',
                               variable=self.opt_cdao)
        caz_pdf = Checkbutton(self.FrFilters,
                              text=u'Geospatial PDF',
                              variable=self.opt_pdf)
        caz_lyr = Checkbutton(self.FrFilters,
                              text=u'.lyr',
                              variable=self.opt_lyr)
        caz_mxd = Checkbutton(self.FrFilters,
                              text=u'.mxd',
                              variable=self.opt_mxd)
        caz_qgs = Checkbutton(self.FrFilters,
                              text=u'.qgs',
                              variable=self.opt_qgs)
        # widgets placement
        caz_shp.grid(row=1,
                     column=0,
                     sticky="NSWE",
                     padx=2, pady=2)
        caz_tab.grid(row=1,
                     column=1,
                     sticky="NSWE",
                     padx=2, pady=2)
        caz_kml.grid(row=1,
                     column=2,
                     sticky="NSWE",
                     padx=2, pady=2)
        caz_gml.grid(row=1,
                     column=3,
                     sticky="NSWE",
                     padx=2, pady=2)
        caz_geoj.grid(row=1,
                      column=4,
                      sticky="NSWE",
                      padx=2, pady=2)
        caz_gxt.grid(row=1,
                     column=7,
                     sticky="NSWE",
                     padx=2, pady=2)
        caz_pdf.grid(row=1,
                     column=5,
                     columnspan=2,
                     sticky="NSWE",
                     padx=2, pady=2)
        caz_rast.grid(row=2,
                      column=0,
                      columnspan=2,
                      sticky="NSWE",
                      padx=2, pady=2)
        caz_egdb.grid(row=2,
                      column=2,
                      columnspan=2,
                      sticky="NSWE",
                      padx=2, pady=2)
        caz_cdao.grid(row=2,
                      column=4,
                      columnspan=1,
                      sticky="NSWE",
                      padx=2, pady=2)
        caz_spadb.grid(row=2,
                       column=5,
                       columnspan=2,
                       sticky="NSWE",
                       padx=2, pady=2)
        caz_lyr.grid(row=3,
                     column=0,
                     columnspan=2,
                     sticky="NSWE",
                     padx=2, pady=2)
        caz_mxd.grid(row=3,
                     column=1,
                     columnspan=2,
                     sticky="NSWE",
                     padx=2, pady=2)
        caz_qgs.grid(row=3,
                     column=2,
                     columnspan=2,
                     sticky="NSWE",
                     padx=2, pady=2)


        # frames placement
        self.FrPath.grid(row=3, column=1, padx=2, pady=2,
                 sticky="NSWE")
        self.FrFilters.grid(row=4, column=1, padx=2, pady=2,
                    sticky="NSWE")

        # tab 2: database
        self.nb.add(self.tab_sgbd,
                    text='gui_database', padding=3)





        # tab 3: webservices
        self.nb.add(self.tab_webservices,
                    text='gui_webservices', padding=3)



        ## TAB 4: ISOGEO
        self.nb.add(self.tab_isogeo,
                    text='gui_Isogeo', padding=3)


        ## TAB 5: ABOUT
        self.nb.add(self.tab_about,
                    text='gui_about', padding=3)


        ## MAIN FRAME
        # Welcome message
        self.welcome = Label(self,
                             text='hola test',
                             foreground="red2")

        # Progression bar
        self.status = StringVar(self.FrProg, '')
        # widgets
        self.prog_layers = Progressbar(self.FrProg,
                                       orient="horizontal")
        Label(master=self.FrProg,
              textvariable=self.status,
              foreground='DodgerBlue').pack()
        # widgets placement
        self.prog_layers.pack(expand=1, fill='both')

        # Output configuration
        # widgets
        self.nameoutput = Label(self.FrOutp,
                                text='gui_fic')
        self.output = Entry(self.FrOutp, width=35)
        # widgets placement
        self.nameoutput.grid(row=0, column=1,
                             sticky="NSWE", padx=2, pady=2)
        self.output.grid(row=0, column=2, columnspan=2,
                         sticky="NSWE", padx=2, pady=2)

        # Image
        self.icone = PhotoImage(file=r'../data/img/DicoGIS_logo.gif')
        Label(self,
              borderwidth=2,
              image=self.icone).grid(row=1,
                                     rowspan=4,
                                     column=0,
                                     padx=2,
                                     pady=2,
                                     sticky=W)
        # credits
        s = Style(self)
        s.configure('Kim.TButton', foreground='DodgerBlue', borderwidth=0)
        Button(self,
               text='by @GeoJulien\nGPL3 - 2015',
               style='Kim.TButton',
               command=lambda: open_new('https://github.com/Guts/DicoGIS')).grid(row=4,
                                                                                 padx=2,
                                                                                 pady=2,
                                                                                 sticky="WE")
        # language switcher
        self.ddl_lang = Combobox(self,
                                 values=['fr', 'en'],
                                 width=5)

        # grid placement
        self.val = Button(self,
                          text='gui_go',
                          state=ACTIVE,
                          command=lambda: self.process())
        self.can = Button(self, text='gui_quit',
                          command=lambda: self.destroy())
        self.welcome.grid(row=1, column=1, columnspan=1, sticky="NS",
                          padx=2, pady=2)
        self.ddl_lang.grid(row=1, column=1, sticky="NSE", padx=2, pady=2)
        self.nb.grid(row=2, column=1)
        self.FrProg.grid(row=3, column=1, sticky="NSWE", padx=2, pady=2)
        self.FrOutp.grid(row=4, column=1, sticky="NSWE", padx=2, pady=2)
        self.val.grid(row=5, column=1, columnspan=2,
                      sticky="NSWE", padx=2, pady=2)
        self.can.grid(row=5, column=0, sticky="NSWE", padx=2, pady=2)
Beispiel #55
0
class Game:

    version = "4.0"

    def __init__(self):
        self.root = Tk()
        self.initgui()
        self.gridgui()
        self.configurewidgets()

    def initgui(self):
        self.root.title("Tick tack toe")
        self.root.resizable(False, False)
        self.frame_board = Frame(self.root, bg="black")
        self.canvas = Canvas(self.frame_board,
                             width=600,
                             height=600,
                             bg="beige")

        self.frame_options = Frame(self.root)
        self.button_setup = Button(self.frame_options, text="Setup", width=10)
        self.button_start = Button(self.frame_options, text="Start", width=10)
        self.button_reset = Button(self.frame_options, text="Reset", width=10)
        self.button_reload = Button(self.frame_options,
                                    text="Load Bots",
                                    width=10)
        self.button_test = Button(self.frame_options, text="Test", width=10)

        self.entry_test = Entry(self.frame_options, width=10)

        self.label1 = Label(self.frame_options, text="Player 1")
        self.label2 = Label(self.frame_options, text="Player 2")
        self.combo1 = Combobox(self.frame_options, state="readonly")
        self.combo2 = Combobox(self.frame_options, state="readonly")

        self.entry_shape1 = Entry(self.frame_options, width=5)
        self.entry_shape2 = Entry(self.frame_options, width=5)

        self.label_size = Label(self.frame_options, text="Board Size")
        self.entry_size = Entry(self.frame_options, width=10)

        self.label_movements = Label(self.frame_options, text="Steps")
        self.movements = Listbox(self.frame_options, width=25, height=15)

        self.chainVar = 0
        self.button_chain = Button(self.frame_options,
                                   text="Show Chains",
                                   width=10)

        self.button_help = Button(self.frame_options, text="?", width=3)
        self.label_version = Label(self.frame_options,
                                   text="Version v" + self.version)

    def gridgui(self):
        self.frame_board.grid(row=0, column=0, padx=5, pady=5)
        self.canvas.grid(padx=5, pady=5)

        self.frame_options.grid(row=0, column=1, padx=5, pady=5)
        self.button_reload.grid(pady=5, columnspan=2)
        self.button_setup.grid(pady=5, columnspan=2)
        self.button_start.grid(pady=5, columnspan=2)
        self.button_test.grid(row=3, column=0, pady=5)
        self.entry_test.grid(row=3, column=1, pady=5)

        self.label1.grid(row=4, column=0, stick=W, pady=5)
        self.entry_shape1.grid(row=4, column=1)
        self.combo1.grid(stick=W, pady=5, columnspan=2)
        self.label2.grid(row=6, column=0, stick=W, pady=5)
        self.entry_shape2.grid(row=6, column=1)
        self.combo2.grid(stick=W, pady=5, columnspan=2)

        self.label_size.grid(row=8, stick=W, pady=5, columnspan=2)
        self.entry_size.grid(row=8, stick=E, pady=5, columnspan=2)

        self.button_chain.grid(columnspan=2)

        self.button_reset.grid(columnspan=2)

        self.label_movements.grid(columnspan=2)
        self.movements.grid(columnspan=2)
        self.label_version.grid(row=14, column=0, pady=5)
        self.button_help.grid(row=14, column=1, pady=5)

    def configurewidgets(self):
        self.reset(None)

        self.button_reload.bind("<ButtonRelease-1>", self.reloadbots)
        self.button_reset.bind("<ButtonRelease-1>", self.reset)
        self.button_chain.bind("<ButtonRelease-1>", self.drawChains)
        self.button_help.bind("<ButtonRelease-1>", self.helpGit)

    def helpGit(self, event):
        webbrowser.open("https://github.com/OmerCinal/Tic-Tac-Toe")

    def reloadbots(self, event):
        path = os.path.dirname(os.path.realpath(__file__))
        files = [
            f.split(".")[0] for f in os.listdir(path)
            if (os.path.isfile(path + "/" + f) and (f.split(".")[-1] == "py"))
        ]

        if "Game" in files:
            files.remove("Game")

        self.modules = dict(
            map((lambda x: (x.__name__, x)), map(__import__, files)))

        self.combo1["values"] = self.modules.keys()
        self.combo2["values"] = self.modules.keys()
        self.combo1.current(0)
        self.combo2.current(0)

        self.updateButtons()

    def setup(self, event):
        if not hasattr(self, "modules"):
            self.root.bell()
            return
        error = ""
        try:
            self.name1 = self.combo1.get()
            self.shape1 = self.entry_shape1.get()
            self.player1 = getattr(self.modules[self.name1], self.name1)(0, 1,
                                                                         2)
        except:
            error += " 1 "

        try:
            self.name2 = self.combo2.get()
            self.shape2 = self.entry_shape2.get()
            self.player2 = getattr(self.modules[self.name2], self.name2)(0, 2,
                                                                         1)
        except:
            error += " 2 "

        if error:
            self.message("Error with the following players:" + error)
            return

        self.size = self.validateSize(self.entry_size.get())
        self.movements.delete(0, END)

        if not self.size:
            self.message(
                "Board size cannot contain letters\nand it must be an even number"
            )
            return

        self.drawboard(self.size)
        self.board = [[0] * self.size for _ in range(self.size)]
        self.updateButtons()

    def drawboard(self, size):
        space = 50
        start = (space * 3) / 2
        board = self.canvas
        board.delete(ALL)

        for i in range(size):
            board.create_text(space * (i + 2),
                              space,
                              text=str(i),
                              anchor=W,
                              tag="coord",
                              font=50)
            board.create_text(space,
                              space * (i + 2),
                              text=str(i),
                              anchor=W,
                              tag="coord",
                              font=50)

        for i in range(size + 1):
            board.create_line(start,
                              start + space * i,
                              start + space * size,
                              start + space * i,
                              tag="line",
                              width=2.0,
                              fill="goldenrod")
            board.create_line(start + space * i,
                              start,
                              start + space * i,
                              start + space * size,
                              tag="line",
                              width=2.0,
                              fill="goldenrod")

    def start(self, event):
        if not hasattr(self, "board"):
            self.message("Please Set the game first")
            return
        self.board = [[0] * self.size for _ in range(self.size)]

        self.player1.board = self.board
        self.player2.board = self.board

        score1, score2, steps = self.playOnce(self.player1,
                                              self.player2,
                                              record=True)

        self.drawboard(self.size)
        self.updateboard()

        self.movements.delete(0, END)
        for step in steps:
            self.movements.insert(END, step)

        self.canvas.create_text(300,
                                25,
                                text="".join(
                                    (self.shape1, ": ", str(score1), ";  ",
                                     self.shape2, ": ", str(score2))))

    def test(self, event):
        if not hasattr(self, "board"):
            self.message("Please Set the game first")
            return

        try:
            testrange = self.validateInt(self.entry_test.get())
        except:
            self.message("Number of tests can only be integers")
            return

        clear = self.canvas.delete
        write = self.canvas.create_text
        update = self.canvas.update
        scores1 = [0] * testrange
        scores2 = [0] * testrange
        turn = True

        for step in range(testrange):
            self.board = [[0] * self.size for _ in xrange(self.size)]
            self.player1.board = self.board
            self.player2.board = self.board
            if turn:
                scores1[step], scores2[step] = self.playOnce(
                    self.player1, self.player2)
                turn = False
            else:
                scores2[step], scores1[step] = self.playOnce(
                    self.player2, self.player1)
                turn = True

            if step % 10 == 0:
                clear(ALL)
                write(300,
                      100,
                      text="".join(
                          ("Games played: %", str(
                              (step * 100.0) / testrange))),
                      font=50)
                update()

        avg1 = sum(scores1) / len(scores1)
        avg2 = sum(scores2) / len(scores2)
        wins1, wins2, ties = 0, 0, 0

        for p1, p2 in zip(scores1, scores2):
            if p1 > p2:
                wins1 += 1
            elif p1 < p2:
                wins2 += 1
            else:
                ties += 1

        result = [
            "Results:", "", self.name1 + " (" + self.shape1 + ")",
            self.name2 + " (" + self.shape2 + ")", "",
            "Player:\t" + self.shape1 + ",\t" + self.shape2,
            "Wins:  \t" + str(wins1) + ",\t" + str(wins2),
            "Avg:   \t" + str(avg1) + ",\t" + str(avg2),
            "Ties:  \t" + str(ties), "",
            "Winner: " + (self.shape1 if wins1 > wins2 else self.shape2)
        ]

        self.canvas.delete(ALL)
        self.canvas.create_text(100,
                                100,
                                text="\n".join(result),
                                anchor=NW,
                                font=50)

    def playOnce(self, player1, player2, record=False, show=False):
        play1 = player1.play
        play2 = player2.play

        if record:
            step = 1
            steps = []
        while not self.endgame():
            x1, y1 = play1()
            self.board[x1][y1] = 1

            x2, y2 = play2()
            self.board[x2][y2] = 2

            if show:
                self.updateboard()

            if record:
                steps.append("".join(
                    (str(step), "- ", self.shape1, ": (", str(x1),
                     ", ", str(y1), "); ", self.shape2, ": (", str(x2), ", ",
                     str(y2), ")")))
                step += 1

        s1, s2 = self.getScores(1, 2)
        if record:
            return s1, s2, steps
        return s1, s2

    def updateboard(self):
        write = self.canvas.create_text
        rng = range(self.size)
        space = 50
        self.canvas.delete("shape")

        for x in rng:
            for y in rng:
                if self.board[x][y] == 1:
                    write(space * (y + 2),
                          space * (x + 2),
                          text=self.shape1,
                          tags=("shape1", "shape"),
                          font=("Times", 20, "bold"))
                elif self.board[x][y] == 2:
                    write(space * (y + 2),
                          space * (x + 2),
                          text=self.shape2,
                          tags=("shape2", "shape"),
                          font=("Times", 20, "bold"))

    def reset(self, event):
        self.canvas.delete(ALL)
        if hasattr(self, "modules"): del self.modules
        if hasattr(self, "board"): del self.board
        self.combo1["values"] = ("None")
        self.combo2["values"] = ("None")
        self.combo1.current(0)
        self.combo2.current(0)
        self.entry_size.delete(0, END)
        self.entry_test.delete(0, END)
        self.entry_shape1.delete(0, END)
        self.entry_shape2.delete(0, END)
        self.entry_size.insert(END, "10")
        self.entry_shape1.insert(END, "X")
        self.entry_shape2.insert(END, "O")
        self.entry_test.insert(END, "1000")
        self.movements.delete(0, END)

        msg = """
        Tic Tac Toe
        
        1-Load the bots inside the directory by pressing "Load Bots"
        2-Configure the game and press "Setup"
        3-"Start" for one game
          "Test" for # of games

        Click the question mark for more information
        """
        self.canvas.create_text(100, 100, text=msg, font=100, anchor=W)

        self.updateButtons()

    def message(self, msg):
        self.canvas.delete(ALL)
        self.canvas.create_text(300, 100, text=msg, font=20)
        self.root.bell()

    def updateButtons(self):
        if hasattr(self, "modules"):
            self.button_setup["state"] = NORMAL
            self.button_setup.bind("<ButtonRelease-1>", self.setup)
        else:
            self.button_setup["state"] = DISABLED
            self.button_setup.unbind("<ButtonRelease-1>")
        if hasattr(self, "board"):
            self.button_start["state"] = NORMAL
            self.button_test["state"] = NORMAL
            self.button_start.bind("<ButtonRelease-1>", self.start)
            self.button_test.bind("<ButtonRelease-1>", self.test)
        else:
            self.button_start["state"] = DISABLED
            self.button_test["state"] = DISABLED
            self.button_start.unbind("<ButtonRelease-1>")
            self.button_test.unbind("<ButtonRelease-1>")

    def getScores(self, p1, p2):
        def getHorizontal(x, y, p):
            x1, x2 = x, x
            while x1 > 0:
                if self.board[x1 - 1][y] == p:
                    x1 -= 1
                else:
                    break

            while x2 < self.size - 1:
                if self.board[x2 + 1][y] == p:
                    x2 += 1
                else:
                    break

            return (x1, y, x2, y) if (x2 - x1) > 1 else 0

        def getVertical(x, y, p):
            y1, y2 = y, y
            while y1 > 0:
                if self.board[x][y1 - 1] == p:
                    y1 -= 1
                else:
                    break

            while y2 < self.size - 1:
                if self.board[x][y2 + 1] == p:
                    y2 += 1
                else:
                    break

            return (x, y1, x, y2) if (y2 - y1) > 1 else 0

        def getDiagonal1(x, y, p):
            x1, y1, x2, y2 = x, y, x, y
            while x1 > 0 and y1 > 0:
                if self.board[x1 - 1][y1 - 1] == p:
                    x1 -= 1
                    y1 -= 1
                else:
                    break

            while x2 < self.size - 1 and y2 < self.size - 1:
                if self.board[x2 + 1][y2 + 1] == p:
                    x2 += 1
                    y2 += 1
                else:
                    break

            return (x1, y1, x2, y2) if ((x2 - x1 > 1) or (y2 - y1 > 1)) else 0

        def getDiagonal2(x, y, p):
            x1, y1, x2, y2 = x, y, x, y
            while x1 < self.size - 1 and y1 > 0:
                if self.board[x1 + 1][y1 - 1] == p:
                    x1 += 1
                    y1 -= 1
                else:
                    break

            while x2 > 0 and y2 < self.size - 1:
                if self.board[x2 - 1][y2 + 1] == p:
                    x2 -= 1
                    y2 += 1
                else:
                    break

            return (x1, y1, x2, y2) if ((x2 - x1 > 1) or (y2 - y1 > 1)) else 0

        self.chains = {p1: [], p2: []}  #p:[ (x1,y1,x2,y2) ]
        rng = range(len(self.board))

        for x in rng:
            for y in rng:
                player = self.board[x][y]

                hor = getHorizontal(x, y, player)
                ver = getVertical(x, y, player)
                crs1 = getDiagonal1(x, y, player)
                crs2 = getDiagonal2(x, y, player)

                self.chains[player].extend(
                    filter((lambda x: x and (x not in self.chains[player])),
                           [hor, ver, crs1, crs2]))

        scores = {p1: 0, p2: 0}

        for player in self.chains:
            for chain in self.chains[player]:
                length = max(chain[2] - chain[0], chain[3] - chain[1]) + 1
                scores[player] += sum(range(3, length + 1))

        return scores[p1], scores[p2]

    def drawChains(self, event):
        if self.canvas.find_withtag("chain"):
            self.canvas.delete("chain")
            return
        if not self.canvas.find_withtag("shape") or not hasattr(
                self, "chains"):
            return
        space = 50
        start = 2 * space
        colors = {1: "red", 2: "blue"}
        for p in self.chains:
            for x1, y1, x2, y2 in self.chains[p]:
                self.canvas.create_line(start + y1 * space,
                                        start + x1 * space,
                                        start + y2 * space,
                                        start + x2 * space,
                                        fill=colors[p],
                                        tag="chain",
                                        state=NORMAL,
                                        width=5.0)

    def endgame(self):
        for row in self.board:
            if not all(row):
                return False
        return True

    @staticmethod
    def validateSize(val):
        try:
            if int(val) % 2 == 0:
                return int(val)
            return False
        except:
            return False

    @staticmethod
    def validateInt(val):
        try:
            return int(val)
        except:
            return False
Beispiel #56
0
class Application(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.root = master
        self.root.title('company_info(Version:v1.0.3   Author:qing.guo)')
        self.root.geometry('720x460')
        self.root.resizable(0, 0)  # 禁止调整窗口大小
        self.root.protocol("WM_DELETE_WINDOW", self.close)
        self.root.iconbitmap(get_path('company.ico'))

    def creatWidgets(self):
        frame_left = Frame(self.root, width=360, height=460, bg='#C1CDCD')
        frame_right = Frame(self.root, width=360, height=460, bg='#C1CDCD')
        frame_left.grid_propagate(0)
        frame_right.propagate(0)
        frame_right.grid_propagate(0)
        frame_left.grid(row=0, column=0)
        frame_right.grid(row=0, column=1)

        self.v1 = StringVar()
        self.v2 = StringVar()

        Label(frame_left, text=u"选择数据类型:", bg='#C1CDCD').grid(row=0,
                                                              column=0,
                                                              pady=10,
                                                              padx=5)
        self.cb1 = Combobox(frame_left, width=30, textvariable=self.v1)
        self.cb1.grid(row=0,
                      column=1,
                      columnspan=2,
                      ipady=1,
                      padx=5,
                      pady=10,
                      sticky=W)
        self.cb1['values'] = [
            u'公司id', u'公司名称', u'机器人32位id或uid', u'服务器32位id或uid'
        ]
        self.cb1.current(0)

        Label(frame_left, text=u"输入查询数据 :", bg='#C1CDCD').grid(row=1,
                                                               column=0,
                                                               pady=10,
                                                               padx=5)
        Entry(frame_left, width=33, textvariable=self.v2).grid(row=1,
                                                               column=1,
                                                               columnspan=2,
                                                               padx=2,
                                                               pady=10,
                                                               ipady=2,
                                                               sticky=W)
        self.b1 = Button(frame_left,
                         text=u"查询归属公司id",
                         command=self.test1,
                         bg='#C1CDCD')
        self.b1.grid(row=2, column=1, padx=5, pady=8)
        self.b2 = Button(frame_left,
                         text=u"查询公司服务器",
                         command=self.test2,
                         bg='#C1CDCD')
        self.b2.grid(row=3, column=1, padx=5, pady=8)

        self.b3 = Button(frame_left,
                         text=u"查询公司机器人",
                         command=self.test3,
                         bg='#C1CDCD')
        self.b3.grid(row=4, column=1, padx=5, pady=8)

        self.b4 = Button(frame_left,
                         text=u"查询公司人员信息",
                         command=self.test4,
                         bg='#C1CDCD')
        self.b4.grid(row=5, column=1, padx=5, pady=8)

        self.b5 = Button(frame_left,
                         text=u"查询部门人员信息",
                         command=self.test5,
                         bg='#C1CDCD')
        self.b5.grid(row=6, column=1, padx=5, pady=8)

        self.b6 = Button(frame_left,
                         text=u"查询剩余可用服务器",
                         command=self.test6,
                         bg='#C1CDCD')
        self.b6.grid(row=7, column=1, padx=5, pady=8)

        self.b7 = Button(frame_left,
                         text=u"查询剩余可用机器人",
                         command=self.test7,
                         bg='#C1CDCD')
        self.b7.grid(row=8, column=1, padx=5, pady=8)

        self.b8 = Button(frame_left,
                         text=u"删除当前公司所有信息",
                         command=self.test8,
                         bg='#C1CDCD')
        self.b8.grid(row=9, column=1, padx=5, pady=8)

        #Scrollbar
        scrollbar = Scrollbar(frame_right, bg='#C1CDCD')
        scrollbar.pack(side=RIGHT, fill=Y)
        self.text_msglist = Text(frame_right,
                                 yscrollcommand=scrollbar.set,
                                 bg='#C1CDCD')
        self.text_msglist.pack(side=RIGHT, fill=BOTH)
        scrollbar['command'] = self.text_msglist.yview
        self.text_msglist.tag_config('green', foreground='#008B00')
        self.text_msglist.tag_config('blue', foreground='#0000FF')
        self.text_msglist.tag_config('red', foreground='#FF3030')

    def test(self, flag):
        r = redis.StrictRedis(host='58.60.230.238',
                              port=6278,
                              db=0,
                              password='******',
                              encoding='utf-8',
                              socket_timeout=5)
        self.com = comp.Company(flag, r, app)
        self.com.setDaemon(True)
        self.com.start()

    def check(self, flag):
        r = redis.StrictRedis(host='58.60.230.238',
                              port=6278,
                              db=0,
                              password='******',
                              encoding='utf-8',
                              socket_timeout=5)
        self.v3 = StringVar()
        window = Toplevel(self, bg='#C1CDCD')
        window.title('check permission')
        window.geometry('400x100')
        window.resizable(0, 0)  # 禁止调整窗口大小
        Label(window, text=u'请输入操作密码:', bg='#C1CDCD').grid(row=0,
                                                           column=0,
                                                           pady=10,
                                                           padx=5)
        e = Entry(window, width=30, textvariable=self.v3)
        e.grid(row=0, column=1, padx=5, pady=10, sticky=W)
        e.focus()
        self.v3.set('')
        r.set('comp_pwd', 'qhkj_987', nx=True)

        def check_pwd():
            input_pwd = self.v3.get()
            redis_pwd = r.get('comp_pwd')
            if input_pwd == redis_pwd:
                if flag == 6:
                    self.b6.config(state='disabled')
                    self.test(6)
                elif flag == 7:
                    self.b7.config(state='disabled')
                    self.test(7)
                elif flag == 8:
                    self.b8.config(state='disabled')
                    self.test(8)
            else:
                self.text_msglist.insert(END, "输入密码错误\n", 'red')
            window.destroy()

        Button(window, text=u"确定", width=20, command=check_pwd,
               bg='#C1CDCD').grid(row=1, column=1, pady=10, padx=5)
        window.protocol("WM_DELETE_WINDOW", window.destroy)

    def test1(self):
        self.b1.config(state='disabled')
        self.test(1)

    def test2(self):
        self.b2.config(state='disabled')
        self.test(2)

    def test3(self):
        self.b3.config(state='disabled')
        self.test(3)

    def test4(self):
        self.b4.config(state='disabled')
        self.test(4)

    def test5(self):
        self.b5.config(state='disabled')
        self.test(5)

    def test6(self):
        self.check(6)

    def test7(self):
        self.check(7)

    def test8(self):
        self.check(8)

    def close(self):
        self.root.quit()
        self.root.destroy()