I don't have a Quick861DW either, and only use Linux (no Windows on any of my machines), but would gladly help if I could.
I've investigated using Python as an UI to a external microcontroller connected via USB/serial, quite deeply but limited to Linux.
In particular, I would recommend using a query-response protocol using plain ol' ASCII text, and a separate Python thread managing the communication (in blocking fashion), communicating with the UI using a Queue; all in Python 3. This has shown me to be the absolutely most robust, while extremely straightforward, to implement. I would recommend a very simple protocol, something like
command-letter [ integer-value ] newlinefor commands from host to 861DW, and
command-letter [ integer-value ] newlinefor successful responses, duplicating the received command (but note that you do want to
regenerate it from the parsed values, instead of just resending the contents of the buffer you parsed the data from, so that the sender can detect transmission/logic/parsing errors!); and
'!' command-letter [ integer-value ] ':' error-message newlinefor error/failure responses. This is easy to implement on both ends, and allows easy upgrade/extension path forwards for other devices.
Put the communication code in a separate module, and test it via a command-line interface, or by running it interactively in the Python shell. If you need to develop the UI in parallel, put it in a separate program, not connected to the communication code, during initial development. (Sometimes that kind of parallel development helps you decide what kind of interfaces the communication module should provide.)
Personally, I would put the serial port enumeration and access code in an OS-dependant module, because I really don't like the interfaces the existing ones provide, and on all non-Windows systems, it is better/easier to just use
termios instead of any of the cross-platform serial implementations. (You use the termios to put the tty -- the character device the kernel exposes for the serial port functionality -- in "raw" mode, and optionally a read/write timeout in deciseconds (units of 0.1 seconds). It's very few lines of Python, and works like a charm.)
I didn't reply earlier, although I thought about it, because you are obviously on Windows, and I don't use Windows at all, and the serial port low-level management code tends to be the Achilles' heel, make or break the application. My opinion of not using the existing libraries is contrary to just about everyone else I know, but it is only because they are not nearly as robust as a very simple low-level tty/termios based one is on Linux. On Windows, it might be different; I dunno.