Foros Python

Versión completa: Estructuras de C en Python
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola, estando desarrollando mi librería, pyANSI, tratando de añadir soporte de la funcion gotoxy para que funcione en el deficiente CMD,
Trato de acceder a la funcion del kernel de windows con ctypes, la cual es SetConsoleCursorPosition()
Pero el problema es que su último parámetro es una estructura dónde están las coordenadas x, y.
Este es el código de C que trato portear:

Código:
  1. #include<windows.h>
  2. void gotoxy(short col, short row)
  3. {
  4. HANDEL h=GetStdHandel(STD_OUTPUT_HANDEL);
  5. COORD position={col,row};
  6. SetConsoleCursorPosition(h,position);
  7. }
y mi código en Python:
Código:
  1. import ctypes
  2.  
  3. STD_INPUT_HANDLE = -10
  4. STD_OUTPUT_HANDLE = -11
  5. STD_ERROR_HANDLE = -12
  6.  
  7. std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
  8.  
  9. def gotoxy(x, y):
  10.    bool = ctypes.windll.kernel32.SetConsoleCursorPosition(std_out_handle, colorstruct)
  11.    return bool
  12.    
Nótese que colorstruct no existe ya que no tengo idea como hacer estruturas de tipo C en Python.
Saludos
Hola, esta es la forma en la que se crean estructuras de C desde Python:

  1. import ctypes
  2.  
  3. class COORD(ctypes.Structure):
  4. _fields_ = [
  5. ("X", ctypes.c_short),
  6. ("Y", ctypes.c_short),
  7. ]
  8.  
  9. coord = COORD(50, 30)
  10. print(coord.X, coord.Y)


En tu caso, sería:

  1. ctypes.windll.kernel32.SetConsoleCursorPosition(std_out_handle, COORD(x, y))


Saludos
(24-08-2018, 09:46 PM)Francisco escribió: [ -> ]Hola, esta es la forma en la que se crean estructuras de C desde Python:

  1. import ctypes
  2.  
  3. class COORD(ctypes.Structure):
  4.    _fields_ = [
  5.        ("X", ctypes.c_short),
  6.        ("Y", ctypes.c_short),
  7.    ]
  8.  
  9. coord = COORD(50, 30)
  10. print(coord.X, coord.Y)


En tu caso, sería:

  1. ctypes.windll.kernel32.SetConsoleCursorPosition(std_out_handle, COORD(x, y))


Saludos
Gracias! Me funciono.