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:
[code]
#include<windows.h>
void gotoxy(short col, short row)
{
HANDEL h=GetStdHandel(STD_OUTPUT_HANDEL);
COORD position={col,row};
SetConsoleCursorPosition(h,position);
}
[/code]
y mi código en Python:
Código:
[code]
import ctypes

STD_INPUT_HANDLE = -10
STD_OUTPUT_HANDLE = -11
STD_ERROR_HANDLE = -12

std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)

def gotoxy(x, y):
   bool = ctypes.windll.kernel32.SetConsoleCursorPosition(std_out_handle, colorstruct)
   return bool
   
[/code]
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:

Código:
import ctypes

class COORD(ctypes.Structure):
    _fields_ = [
        ("X", ctypes.c_short),
        ("Y", ctypes.c_short),
    ]

coord = COORD(50, 30)
print(coord.X, coord.Y)

En tu caso, sería:

Código:
ctypes.windll.kernel32.SetConsoleCursorPosition(std_out_handle, COORD(x, y))

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
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:

Código:
import ctypes

class COORD(ctypes.Structure):
   _fields_ = [
       ("X", ctypes.c_short),
       ("Y", ctypes.c_short),
   ]

coord = COORD(50, 30)
print(coord.X, coord.Y)

En tu caso, sería:

Código:
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)