Zwischenablage verändern

Fragen zu Tkinter.
Antworten
erynur
User
Beiträge: 6
Registriert: Donnerstag 11. April 2019, 13:46

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
"""
Code by: erynur
Contact: erynur0@gmail.com

Feel free to use this code for personal or educational purpose
"""
Benutzeravatar
__blackjack__
User
Beiträge: 13238
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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?
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
erynur
User
Beiträge: 6
Registriert: Donnerstag 11. April 2019, 13:46

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.
"""
Code by: erynur
Contact: erynur0@gmail.com

Feel free to use this code for personal or educational purpose
"""
erynur
User
Beiträge: 6
Registriert: Donnerstag 11. April 2019, 13:46

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?
"""
Code by: erynur
Contact: erynur0@gmail.com

Feel free to use this code for personal or educational purpose
"""
Schmiedezwerg
User
Beiträge: 2
Registriert: Samstag 22. August 2020, 16:39
Wohnort: Wilhelmshaven

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
Sirius3
User
Beiträge: 17825
Registriert: Sonntag 21. Oktober 2012, 17:20

@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])
Antworten