Python: copiando desde el portapapeles usando tkinter sin mostrar la ventana

Ejecutando Python 3.4 en Windows 7.

Necesito copiar lo que está almacenado en el portapapeles a una variable en mi progtwig de python. He visto en Stack Overflow que se puede hacer con pywin32 o tkinter. Ya que tkinter es parte de la biblioteca estándar de Python, decidí que esa era la mejor de las dos ya que el usuario no tendrá que instalar un módulo externo. Aquí está el código para obtener los datos del portapapeles en tkinter:

import tkinter number = tkinter.Tk().clipboard_get() 

Esto funciona bien, excepto que aparece una ventana tkinter en blanco cada vez que se ejecuta.

1) ¿Por qué sucede esto? Normalmente, tkinter no muestra nada hasta que se ejecuta tk (). Mainloop ().

2) ¿Hay alguna forma de evitar que esta ventana se abra? Si no, supongo que solo usaré pywin32

La ventana es creada por tkinter.Tk() (u otros elementos que necesitan ventana) no por tk().mainloop() . Mainloop mantiene el progtwig en funcionamiento.

Tal vez intente Pyperclip o portapapeles

Esto funciona bien, excepto que aparece una ventana tkinter en blanco cada vez que se ejecuta.

Puedes ocultar esta ventana:

 from tkinter import Tk root = Tk() root.withdraw() number = root.clipboard_get() 

Yo tuve el mismo problema. Esto me funcionó en Windows 7, Python 2.7. Ahora solo tengo una ventana.

 from Tkinter import * root = Tk() cliptext = root.clipboard_get() lab=Label(root, text = cliptext) lab.pack() root.mainloop() 
 AnnoyingWindow = Tk() ClipBoard = AnnoyingWindow.clipboard_get() AnnoyingWindow.destroy() print(ClipBoard) 

Aquí hay una función de Python basada en esta respuesta que reemplaza / devuelve el texto del portapapeles usando Tkinter , un módulo Python incorporado, sin mostrar la ventana.

 def use_clipboard(paste_text=None): import tkinter # For Python 2, replace with "import Tkinter as tkinter". tk = tkinter.Tk() tk.withdraw() if type(paste_text) == str: # Set clipboard text. tk.clipboard_clear() tk.clipboard_append(paste_text) try: clipboard_text = tk.clipboard_get() except tkinter.TclError: clipboard_text = '' r.update() # Stops a few errors (clipboard text unchanged, command line program unresponsive, window not destroyed). tk.destroy() return clipboard_text 

Una pequeña desventaja con el uso de este método basado en Tkinter es que utiliza una ventana rápidamente oculta que no es ideal, pero esto no debería ser perceptible.
Esta respuesta utiliza el contenido de mi respuesta original en la pregunta de desbordamiento de stack Cómo copiar / obtener una imagen en el portapapeles con Python (acepto Tkinter para texto) .

Realmente lo haces sin tkinter y de una manera mucho más simple:

 import pyperclip clipboard_content = pyperclip.paste() 
 number.withdraw() #this hides the ui for the object 

Simplemente agregue este comando al principio cuando cree su objeto TKinter y ocultará la interfaz de usuario. Vea esta pregunta similar.