class Main_app: def __init__(self, master): self.main_frame = tk.Frame(master, bg='#c8c8c8') self.main_frame.grid(ipadx=2, ipady=2, padx=2, pady=2) self.remitente = tk.StringVar() self.number = tk.StringVar() self.captcha = tk.StringVar() self.browser = get_browser() self.personal = Personal() self.show_captcha() '''Etiqueta del número''' self.cod_label = tk.Label(self.main_frame, text="Número de destino", bg='#c8c8c8') self.cod_label.grid(row=1, column=1, sticky=tk.W) '''Caja de entrada del número''' self.ent_number = tk.Entry(self.main_frame, width=10, textvariable=self.number, bd=2, relief=tk.GROOVE) self.ent_number.grid(row=1, column=2, sticky=tk.W + tk.E) self.ent_number.focus_set() '''Etiquetas de ejemplo de número''' self.ejemplo_label = tk.Label(self.main_frame, text="código de area sin el 0\n y el número sin el 15", bg='#c8c8c8') self.ejemplo_label.grid(row=2, column=1, sticky=tk.N) self.ejemplo_label = tk.Label(self.main_frame, text="por ejemplo\n 3874567890", bg='#c8c8c8') self.ejemplo_label.grid(row=2, column=2, sticky=tk.N) '''Etiqueta del remitente''' self.remitente_label = tk.Label(self.main_frame, text="Tu Nombre", bg='#c8c8c8') self.remitente_label.grid(row=1, column=3, sticky=tk.E) '''Caja de entrada para el remitente''' self.ent_remitente = tk.Entry(self.main_frame, width=10, textvariable=self.remitente, bd=2, relief=tk.GROOVE) self.ent_remitente.grid(row=1, column=4, sticky=tk.W + tk.E) '''Etiqueta del mensaje''' self.msje_label = tk.Label(self.main_frame, text="Mensaje", bg='#c8c8c8') self.msje_label.grid(row=2, column=3, sticky=tk.W) '''Entrada de texto para el mensaje''' self.ent_msje = tk.Text(self.main_frame, width=25, height=4, wrap="word", bd=2, relief=tk.GROOVE) self.ent_msje.grid(row=2, column=4) self.ent_msje.bind("<KP_Enter>", self.keypress_return) '''Etiqueta del captcha''' self.cap_label = tk.Label(self.main_frame, text="Palabra de verificación", bg='#c8c8c8') self.cap_label.grid(row=3, column=1, sticky=tk.E) '''Caja de entrada para el captcha''' self.ent_captcha = tk.Entry(self.main_frame, width=4, textvariable=self.captcha, bd=2, relief=tk.GROOVE) self.ent_captcha.grid(row=3, column=3, sticky=tk.W) self.ent_captcha.bind("<Return>", self.keypress_return) self.ent_captcha.bind("<KP_Enter>", self.keypress_return) '''Boton para enviar''' self.hi_there = tk.Button(self.main_frame, text="Enviar", command=self.send, relief=tk.FLAT, bg='#c8c8c8', bd=0) self.hi_there.grid(row=3, column=4) def keypress_return(self, event): self.send() def comprobar_cadena(self, cadena, longitud): for caracter in cadena: if caracter in '0123456789': pass else: return False if len(cadena) == longitud: return True else: return False def send(self): mensaje = self.ent_msje.get("1.0", tk.END) number = self.number.get() if not self.comprobar_cadena(number, 10): message = 'Número incorrecto, debe tener 10 números' showerror(title='Error', message=message) return 0 remitente = self.remitente.get() captcha = self.captcha.get() if not self.comprobar_cadena(captcha, 4): message = 'Captcha incorrecto, debe tener 4 números' showerror(title='Error', message=message) return 0 if self.personal.send(number, captcha, mensaje, remitente): self.clean() else: message = 'Captcha incorrecto' showerror(title='Error', message=message) self.show_captcha() def clean(self): self.captcha.set('') self.ent_msje.delete("1.0", tk.END) self.ent_msje.focus_set() self.show_captcha() return 0 def show_captcha(self): imagen = Image.open(self.personal.get_captcha()) self.photo = ImageTk.PhotoImage(imagen) '''Imagen del captcha''' self.captcha_label = tk.Label(self.main_frame, image=self.photo, bd=0) self.captcha_label.photo = self.photo self.captcha_label.grid(row=3, column=2, sticky=tk.W) return 0
class Main(QtGui.QDialog): """La ventana principal de la aplicación.""" def __init__(self): QtGui.QDialog.__init__(self) # Cargamos la interfaz desde el archivo .ui uifile = os.path.join(os.path.abspath(os.path.dirname(__file__)), "sms.ui") uic.loadUi(uifile, self) self.loadContactos() self.listContactos() self.personal = Personal() self.show_captcha() self.mensaje_text.setFocus() self.validation() loadContactos = _loadContactos """Metodos para manejar lista de contactos""" def saveContactos(self): "Guarda las contactos a disco" f = open(os.path.expanduser("~/.contactos"), "w") f.write(json.dumps(self.contactos)) f.close() def listContactos(self): "Muestra las contactos en la lista" self.contactoList.clear() for nombre, url in self.contactos: self.contactoList.addItem(nombre) @QtCore.pyqtSlot() def on_add_clicked(self): addDlg = AddContacto(self) r = addDlg.exec_() if r: # O sea, apretaron "Add" self.contactos.append((unicode(addDlg.name.text()), unicode(addDlg.number.text()))) self.saveContactos() self.listContactos() @QtCore.pyqtSlot() def on_edit_clicked(self): "Edita el contacto actualmente seleccionado" curIdx = self.contactoList.currentRow() name, number = self.contactos[curIdx] editDlg = EditContacto(self) editDlg.name.setText(name) editDlg.number.setText(number) r = editDlg.exec_() if r: # O sea, apretaron "Save" self.contactos[curIdx] = [unicode(editDlg.name.text()), unicode(editDlg.number.text())] self.saveContactos() self.listContactos() self.contactoList.setCurrentRow(curIdx) @QtCore.pyqtSlot() def on_remove_clicked(self): "Borra el contacto actualmente seleccionado" curIdx = self.contactoList.currentRow() del (self.contactos[curIdx]) self.saveContactos() self.listContactos() def on_contactoList_clicked(self): curIdx = self.contactoList.currentRow() name, number = self.contactos[curIdx] self.number_entry.setText(number) if self.mensaje_text.toPlainText(): if self.sender_entry.text(): if self.captcha_entry.text(): self.send.setFocus() else: self.captcha_entry.setFocus() else: self.sender_entry.setFocus() else: self.mensaje_text.setFocus() """Metodos para enviar el mensaje""" def validation(self): self.number_entry.setMaxLength(10) self.captcha_entry.setMaxLength(4) re = QtCore.QRegExp("^[0-9]*$") validator = QtGui.QRegExpValidator(re, None) self.captcha_entry.setValidator(validator) self.number_entry.setValidator(validator) @QtCore.pyqtSlot() def renew_captcha(self): self.show_captcha() self.captcha_entry.clear() self.captcha_entry.setFocus() @QtCore.pyqtSlot() def clean_all(self): self.mensaje_text.clear() self.captcha_entry.clear() self.mensaje_text.setFocus() self.show_captcha() @QtCore.pyqtSlot() def show_captcha(self): imagenpath = self.personal.get_captcha() imagen = Qt.QPixmap(imagenpath) self.captcha.setPixmap(imagen) @QtCore.pyqtSlot() def send_sms(self): mensaje = self.mensaje_text.toPlainText() mensaje = unicode(mensaje) remitente = self.sender_entry.text() remitente = unicode(remitente) numero = self.number_entry.text() if numero.length() != 10: QtGui.QMessageBox.information(self, u"Error", u"Número incorrecto") return 2 captcha = self.captcha_entry.text() if self.personal.send(numero, captcha, mensaje, remitente): return 0 else: return 1 @QtCore.pyqtSlot() def on_send_clicked(self): answer = self.send_sms() if not answer: self.clean_all() elif answer == 1: QtGui.QMessageBox.warning(self, u"Error", u"Captcha incorrecto") self.renew_captcha() else: self.number_entry.setFocus()