Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - XD YO

#1
Hola, estaba viendo como hacer Interfases gráficas con Tkinter usando clases, y estaba creando un sencillo programa para ver por donde va el asunto :).

Código (python) [Seleccionar]

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
from Tkinter import*
import tkFont

def donothing():
   filewin = Toplevel(self)
   button = Button(filewin, text="Funcion sin asignar")
   button.pack()

class V_ecol(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master) #generando un marco
        self.grid() #empaquetando usando grid
        self.createWidgets()#llama a un metodo que crea lo que contendra la ventana.
        self.menus#Lama un metodo que crea un menu
    def createWidgets(self):
        #generacion del contenido de la interfaz
        self.quitButton = Button ( self, text="Salir", command=self.quit )
        self.quitButton.grid() #empaquetar boton
        #generando un tipo de letra para un Label
        helv36 = tkFont.Font ( family="Helvetica", size=36, weight="bold")
        # Un label
        self.etiqueta1 = Label(self,text="Una cadena",font=helv36, fg="red")
        #generando otro label
        self.etiqueta2 = Label(self,text="Otra cadena")
        #colocando los labels
        self.etiqueta1.grid(row=1, column=0, columnspan=2, rowspan=2)
        self.etiqueta2.grid(row=0,column=1)
    def menus(self):       
        self.menubar = Menu(self)
        self.filemenu = Menu(self.menubar, tearoff=0)
        self.filemenu.add_command(label="Nuevo", command=donothing,  )
        self.filemenu.add_command(label="Salir", command=self.quit,)
        self.menubar.add_cascade(label="Archivo", menu=self.filemenu)
        self.configure(menu=menubar)

#**********inicio del main**********************
app = V_ecol() # generando una instancia de la clase Application
app.master.title("Ventana") # definiendo titulo de la ventana principal
app.mainloop() # a la espera de eventos


El problema radica en que no aparece el menu

¿Que estoy haciendo mal?


PD.
Han escuchado de Pmw
#2
Scripting / Re: python o Perl ??
26 Abril 2010, 01:42 AM
Cita de: biribau
La reflectividad de python tambien es de mucha ayuda a veces, y sus scripts por eso de su "limpieza" son mas hackeables

No lo voy a negar, como en Perl puedes hacer lo mismo de diferentes maneras, es un reto entender algo que a escrito otro programador que no es "de tu escuela", y eso lo hace mas difícil de  hackear, por eso es mejor para la Web.

Python al ser mas limpio es mejor para compartir código y que otros puedan entenderlo.

PD:

Cita de: Leo Gutiérrez.
PD : Es Perl, no PEARL.

Ups!  :-[ :-[, perdón,  :-[ :-[
Estaba escribiendo tan rápido que no me di cuenta de que le añadí una "a" a Perl, bueno, ya lo corregí...
#3
Scripting / Re: python o Perl ??
23 Abril 2010, 05:20 AM
Sobre Python:

Su principales puntos a favor son que es fácil de aprender y te obliga a escribir código legible (es fuertemente tipado).

CitarPython más matematico

De hecho, sobre eso, esta considerado Python como alternativa libre a MATLAB por sus bibliotecas SciPy &  Numerical Python, razón por la cual es mas utilizado en el ámbito de las ciencias exactas.

Sobre Perl:

CitarPerl es un lenguaje muy entretenido por su facilidad para sus sockets, expresiones regulares, creacion exploits.

CitarAhora Python para webs... lamentablemente solo he escuchado comentarios negativos en cuanto a velocidad se refiere, en este lado aun le supera Perl y PHP. Otra cosita muy pocos hostings actualmente ofrecen soporte tanto modular como cgi en Python para el desarrollo web, sin embargo ofrecen soporte para scripts en perl.

Perl es un veterano de Internet, y tiene gran velocidad (si se compara con Python), y puede manejar grandes volúmenes de datos



En lo personal prefiero Python por ser sencillo y poderoso, pero Perl tiene su encanto  ;-)
#4
Supongo que solo me queda responder lo de Tkinter...
Aqui en la wiki de python:
http://wiki.python.org/moin/GuiProgramming

En la parte:

GUI Design Tools and IDEs

Espero que te sirva.. :D
#5
Lo diré de esta forma....

Código (python) [Seleccionar]
print "Python"

tal vez luego me anime a aprender C  ;-) ;D
#6
Buenas tardes.

Como no tenia nada mejor que hacer, solo grabarme algunas formulas de estadística, decidí crear un código en Python para realizar esos tres cálculos (Promedio Varianza y Desviación estándar), solo introduciendo los números separándolos por una coma

El código es el siguiente:
Código (python) [Seleccionar]

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
######Este es un "corto" programa para
######Calcular promedio; varianza y desviación estándar
######################################
def _promedio():
    vcdda = cadenadedatos.get()
    vforlis = "["+vcdda+"]" ###esto me crea una cadena para formar mi lista
    lista = eval(vforlis) #esto trasforma mi cadena en lista
    A = len(lista)
    suma=0
    if A>1:
        for i in lista:
            suma += i
        p = ((suma+0.0)/(A+0.0))
        vpp = Label(ventana, text="El promedio es de=\n"+str(p), justify=CENTER)
        vpp.grid(row=3, column=2,)
    else:
        tkMessageBox.showerror("Datos insuficientes", "No han sido incluidos suficientes datos como para realizar el promedio.\nIntrodusca más datos; gracias")
######################################
def _varianza():
    vcdda = cadenadedatos.get()
    vforlis = "["+vcdda+"]" ###esto me crea una cadena para formar mi lista
    lista = eval(vforlis) #esto trasforma mi cadena en lista
    lista2 = []
    A = len(lista)
    suma=0
    varis=0
    if A>1:
        for i in lista:
            suma += i
        p = ((suma+0.0)/(A+0.0))
        for j in range((A)):
            sumat = (lista[j]-p)**2
            lista2.append(sumat)
        for k in lista2:
            varis += k
        vari = varis
        va = ((vari+0.0)/(A+0.0))
        vp = Label(ventana, text="La varianza es de=\n"+str(va), justify=CENTER)
        vp.grid(row=4, column=2,)
    else:
        tkMessageBox.showerror("Datos insuficientes", "No han sido incluidos suficientes datos como para realizar la varianza.\nIntrodusca más datos; gracias")
###########################
def _desest():
    vcdda = cadenadedatos.get()
    vforlis = "["+vcdda+"]" ###esto me crea una cadena para formar mi lista
    lista = eval(vforlis) #esto trasforma mi cadena en lista
    lista2 = []
    A = len(lista)
    suma=0
    varis=0
    if A>1:
        for i in lista:
            suma += i
        p = ((suma+0.0)/(A+0.0))
        for j in range((A)):
             sumat = (lista[j]-p)**2
            lista2.append(sumat)
        for k in lista2:
            varis += k
        vari = varis
        va = sqrt((vari+0.0)/(A+0.0))
        vb = Label(ventana, text="La desviacion estandar es de=\n"+str(va), justify=CENTER)
        vb.grid(row=5, column=2,)
    else:
        tkMessageBox.showerror("Datos insuficientes", "No han sido incluidos suficientes datos como para realizar la desviación estándar.\n introduzca más datos; gracias")
####################
from math import*
from Tkinter import*
import tkMessageBox


ventana = Tk()
ventana.title("Cálculos estadísticos básicos")
####Definiendo algunas variables###
cadenadedatos = StringVar()
li = "Introduzca datos separándolos con una coma\nluego, pulse el botón del calculo a realizar\nGracias."
oA="Promedio"
oB="Varianza"
oC="Desviación\nEstándar"
#####Elementos de ventana####
ll = Label(ventana, text=li)
eli = Entry(ventana, textvariable=cadenadedatos, xscrollcommand=5)
b1 = Button(ventana, text=oA, command=_promedio)
b2 = Button(ventana, text=oB, command=_varianza)
b3 = Button(ventana, text=oC, command=_desest)
#### Conlocandolos en la grilla######
ll.grid(row=0, column=1, columnspan=3)
eli.grid(row=1, column=2)
b1.grid(row=2, column=1)
b2.grid(row=2, column=2)
b3.grid(row=2, column=3)
ventana.mainloop()


Y aquí unas vistas del programa:

Se aceptan sugerencias.  :D
#7
Gracias Novlucker.  :D

La razón por la que pregunto es que el programa comienza a crecer y se vuelve un poco "testarudo"

Gracias
#8
Buenas noches, Otra vez soy yo <s>molestando</s> preguntando sobre una duda.

Cuando un programa comienza a crecer, que es lo mas conveniente; hacer todas las funciones importantantes globales dentro del programa principal o definirlas cuando se nesesiten o no, organizar los programas en clases o en funciones dentro de funciones (y creo que es mil veces mejor en clases, pero no se).

Tambien agradeceria mucho, sus consejos en cosas que no haya considerando.

De antemano gracias:

#9
yo me perdi  XD

Ya sabia que era algún error tonto y simple, muchas gracias  ;-) ;D
#10
Bueno, ya me habia dado por vencido, cuando buscando como incluir dentro de un Canva elementos, me encontre con este precioso ejemplo en http://effbot.org/zone/editing-canvas-text-items.htm

Código (python) [Seleccionar]

from Tkinter import *

class AutoScrollbar(Scrollbar):
   # a scrollbar that hides itself if it's not needed.  only
   # works if you use the grid geometry manager.
   def set(self, lo, hi):
       if float(lo) <= 0.0 and float(hi) >= 1.0:
           # grid_remove is currently missing from Tkinter!
           self.tk.call("grid", "remove", self)
       else:
           self.grid()
       Scrollbar.set(self, lo, hi)
   def pack(self, **kw):
       raise TclError, "cannot use pack with this widget"
   def place(self, **kw):
       raise TclError, "cannot use place with this widget"

#
# create scrolled canvas

al = Tk()
al.columnconfigure(0,weight=1)
al.rowconfigure(0,weight=1)

header = Frame(al)
header.pack(side= TOP, expand = YES)

htxt = Label(header,text='TOP TOP TOP... this is the TOP')
htxt.pack()

footer = Frame(al)
footer.pack(side = BOTTOM, expand = YES)

ftxt = Label(footer,text='BOTTOM BOTTOM BOTTOM... this is the BOTTOM!')
ftxt.pack()
########
root = LabelFrame(al, bd=2, text='Data',relief='groove',padx=5, pady=5)
root.pack(side = TOP, expand = YES)

vscrollbar = AutoScrollbar(root)
vscrollbar.grid(row=0, column=1, sticky=N+S)
hscrollbar = AutoScrollbar(root, orient=HORIZONTAL)
hscrollbar.grid(row=1, column=0, sticky=E+W)

canvas = Canvas(root,
               yscrollcommand=vscrollbar.set,
               xscrollcommand=hscrollbar.set)
canvas.grid(row=0, column=0, sticky=N+S+E+W)

vscrollbar.config(command=canvas.yview)
hscrollbar.config(command=canvas.xview)

# make the canvas expandable
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

# create canvas contents

frame = Frame(canvas)
frame.rowconfigure(1, weight=1)
frame.columnconfigure(1, weight=1)

rows = 20
for i in range(1,rows):
   for j in range(1,20):
       button = Button(frame, padx=7, pady=7, text="[%d,%d]" % (i,j))
       button.grid(row=i, column=j, sticky='news')

canvas.create_window(0, 0, anchor=NW, window=frame)

frame.update_idletasks()

canvas.config(scrollregion=canvas.bbox("all"))

root.mainloop()


Todos los elementos estan perfectamente dentro de un labelframe, lo que lo hace bastante comodo, y lo que significa, que solo tengo que colocar los elementos con definicion en el interiro del labelframe, lo cual me parece muy bien  ;-)