Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Estructuras de C en Python
#1
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
Responder
#2
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
Responder
#3
(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.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)