You should be able to run the serial ports without needing threads. The main mechanism from Tk is that you can have a subroutine called every x ms. That sub services the ports using non-blocking calls. As long as you do what you need within the sub quickly (less than several hundred ms), all will be fine. If you want some help on that please show your serial port code.
It would be helpful if you explained a bit more about the protocol that you are using over the serial port. And a bit more about how the GUI fits into what the application does.
I'm not sure what you are doing with this other script that you call with open3. Again some code would be helpful.