Das hier sollte dir helfen:
Code: Alles auswählen
import sys
from PyQt5.Qt import QApplication
if __name__ == "__main__":
app = QApplication(sys.argv)
print("Text:", app.clipboard().text())
print("MimeData:", app.clipboard().mimeData().html())
Die Text-Repräsentation scheint nur die kleinstmögliche Darstellungslösung zu sein. Damit kannst du deine Tabelle dann auch in einem Editor einfügen.
LibreOffice schmeißt den Kram im HTML-Format in die Zwischenablage. Das heißt, dass du das auch tun kannst, wenn du eine Tabelle in der Zwischenablage haben möchtest, die man einfach in LibreOffice Writer einfügen kann. Du musst ihm dann aber sagen, dass das HTML und nicht Text ist, damit LibreOffice das entsprechend verarbeiten kann. Sonst würde der HTML-Formattext eingefügt werden (was ja in bestimmten Situationen auch sinnvoll ist.)
Mit Qt kannst du ein QMimeData-Objekt erstellen, das nimmt mit set_html() HTML-Quelltext an und setzt den MimeType korrekt. QClipboard kennt dann setMimeData() um das in die Zwischenablage zu tun.
An eine Instanz von QClipboard kommst du, indem du auf einem beliebigen QObject clipboard() aufrufst.
Die wichtigen klassen in Qt:
QClipboard und
QMimeData.
Wie das bei der von dir verwendeten Bibliothek für die Zwischenablage ist, weiß ich leider nicht. Möglicherweise unterstützt sie nur Plain-Text.
Edit:
Und weil heute so ein wundervoller Tag ist und ich das gerade spannend fand:
Code: Alles auswählen
import sys
from PyQt5.Qt import QApplication, QMimeData
HTML = """
<html>
<table>
<tr>
<td><b>Spalte 1</b></td>
<td><b>Spalte 2</b></td>
</tr>
<tr>
<td>Olaf</td>
<td>Klaus</td>
</tr>
</table>
</html>
"""
if __name__ == "__main__":
app = QApplication(sys.argv)
data = QMimeData()
data.setHtml(HTML)
app.clipboard().setMimeData(data)
print("Text:", app.clipboard().text())
print("MimeData:", app.clipboard().mimeData().html())
Das kann man dann einfach einfügen.
Edit 2:
Wenn
clipboard aus pipy verwendest, verwendet das intern einfach nur
pyperclip und da steht:
Currently only handles plaintext.
Dann wird das damit nicht gehen.