Seite 1 von 1

Zwischenablage verändern

Verfasst: Mittwoch 15. Juli 2020, 22:56
von erynur
Hallo Leute,

ich versuche mich gerade daran die Zwischenablage auszulesen, den String zu verändern und wieder in die Zwischenablage zu schreiben, damit ich den veränderten Inhalt dann woanders einfügen kann.

Nach ein bisschen rumsuchen und probieren habe ich mich für die TkInter Variante entschieden.

Code: Alles auswählen

from tkinter import Tk

root = Tk()
root.withdraw()

def clipboard_get():
    data = str(root.clipboard_get())
    print(f"typ data get:" + str(type(data)))
    print(f"inhalt data get: " + data)
    return data

def clipboard_set(data):
    print(f"typ data set: " + str(type(data)))
    print(f"inhalt data set: " + data)
    new_data = data.replace("-", "")
    print(f"typ new_data set: " + str(type(new_data)))
    print(f"inhalt new_data set: " + new_data)
    root.clipboard_clear()
    root.clipboard_append(new_data)
    root.update()

old_data = ""
print(f"typ old_data: " + str(type(old_data)))
print(f"inhalt old_data: "+ old_data)
try:
    #while True:
    data = clipboard_get()
    print(f"data :" + data)
    if old_data != data:
        old_data = data
        clipboard_set(data)
    else:
        print(f"else")
    #continue
except:
    print(f"error")
    root.destroy()
Soweit was ich erreicht habe.
Einmal hat das Programm auch funktioniert, nur dass der veränderte String nicht in der Zwischenablage gespeichert wurde.
Seitdem habe ich aber das Problem das es nichtmal in den "try:" Block geht ?!

Ich weiß das generelle "except" ist nicht gern gesehen, ich habe das erstmal nur drin um zu sehen wo der Fehler liegt.

Hat jemand eine Idee wo der Fehler liegt?!


Über Hilfe wäre ich sehr dankbar

Re: Zwischenablage verändern

Verfasst: Donnerstag 16. Juli 2020, 01:09
von __blackjack__
@erynur: Solche ”nachten” ``except``\s sind nicht gerne gesehen weil sie gerade *verhindern* das man das wahre Problem zu Gesicht bekommt. Also weg damit und schauen was dann passiert.

Warum hast Du überall f vor Zeichenketten geschrieben die dann letztlich gar keine Formatierungen enthalten?

Re: Zwischenablage verändern

Verfasst: Donnerstag 16. Juli 2020, 19:29
von erynur

Code: Alles auswählen

c:\Users\geier\Dropbox\Surface\python>python clipboard.py
typ old_data: <class 'str'>
inhalt old_data:
Traceback (most recent call last):
  File "clipboard.py", line 26, in <module>
    data = clipboard_get()
  File "clipboard.py", line 7, in clipboard_get
    data = str(root.clipboard_get())
  File "C:\Python\lib\tkinter\__init__.py", line 865, in clipboard_get
    return self.tk.call(('clipboard', 'get') + self._options(kw))
_tkinter.TclError: CLIPBOARD selection doesn't exist or form "STRING" not defined
Das ist neu.
Den Fehler hatte ich schonmal, war dann aber nach dem str() verschwunden ?!

Jetzt habe ich erstmal wieder was wo ich ansetzen kann.

Re: Zwischenablage verändern

Verfasst: Donnerstag 16. Juli 2020, 20:16
von erynur
Dank deinem Hinweis "scheint" das Programm nun erstmal das zu tun was es soll, die Zwischenablage auslesen und den Text verändern.
Nur kann ich darauf nicht weiter Zugreifen.

Wenn ich das veränderte Ergebnis irgendwo einfügen möchte ist die Zwischenablage leer?!
Handelt es sich bei dem TkInter - Clipboard um eine andere Zwischenablage als die, auf die Windows zugreift?

Re: Zwischenablage verändern

Verfasst: Samstag 22. August 2020, 16:47
von Schmiedezwerg
Hallo,
Ich bin zwar blutiger Anfänger, und blicke bei deinem Programm noch nicht durch, aber evtl. habe ich eine Anregung für dich.
Ich habe ein ähniches Problen mit der Zwischenablage gehabt.
Dann aber Pyperclip gefunden und es funktioniert ganz easy und zuverlässig.
Mein Programm zu auslesen:

import os
import pyperclip

s = pyperclip.paste()
# pyperclip.copy(s)

os.system(r"C:\DL\youtube-dl.exe "+(s))

Lacht bitte nicht wenn es am Thema vorbeigeht, bin eben noch Anfänger.
LG
Bernd

Re: Zwischenablage verändern

Verfasst: Samstag 22. August 2020, 22:42
von Sirius3
@Schmiedezwerg: s ist ein schlechter Name für eine Variable, weil sei nichts sagend. os.system stimmte man nicht verwenden. Die Klammern um s sind unnötig. Setze Code um Forum in code-Rags </>.

Code: Alles auswählen

import subprocess
import pyperclip

url = pyperclip.paste()
# pyperclip.copy(url)

subprocess.run([r"C:\DL\youtube-dl.exe", url])