Seite 1 von 1
copy und paste in textbox
Verfasst: Freitag 5. August 2016, 13:33
von coethen25
Hallo, ich habe erst vor kurzem angefangen, in Python zu programmieren. Jetzt habe ich mir ein kleines Programm gebastelt, in welchem die Umlaute und einige andere Zeichen von normalem Text in HTML-Zeichen (ä ... usw.) oder in Unicode Dezimal umgewandelt werden. Die Eingabe und Ausgabe erfolgt in Textboxen. Komisch ist nur, dass ich in der Textbox nicht mit der rechten Maustaste kopieren und einfügen kann. Dazu muss ich Strg+C und Strg+V nehmen. Beim markieren des Textes ist es genau umgedreht: Das geht nur mit der Maus und nicht über Strg+A.
Woran könnte das liegen? :K
Re: copy und paste in textbox
Verfasst: Freitag 5. August 2016, 13:44
von Kebap
Hallo coethen25, willkommen im Forum und bei Python!
Es hilft bei der Fehlersuche ungemein, wenn du uns den Code zeigst.
Am besten ist es, nicht den kompletten Code hier einzustellen, sondern nur ein möglichst kurzes aber lauffähiges Beispiel, das das gleiche Problem verursacht.
Möglicherweise fällt dir beim Reduzieren deines Codes schon etwas auf, das dich selbst zur Lösung führt. Das passiert zumindest oft so.
Viel Spaß noch beim Programmieren!

Re: copy und paste in textbox
Verfasst: Freitag 5. August 2016, 14:02
von coethen25
Naja, da reicht eigentlich eine ganz einfache Textbox, um mein Problem darzustellen.
Code: Alles auswählen
#!/usr/bin/env python3.5
from tkinter import *
root = Tk()
root.title("Test")
f1 = Frame(root, bg="moccasin", bd="4", relief=GROOVE)
f1.pack()
tb = Text(f1, width=60, height=15, bg="white", fg="black", font="Helvetia 12")
tb.pack()
root.mainloop()
Führ das Programm aus und schreib oder kopier mal Text in die textbox und dann versuch mal über die rechte Maustaste zu kopieren bzw. mit der Tastatur über Strg+A alles zu markieren.
Mein Programm läuft ja super, aber eben copy und paste geht nicht über die rechte Maustaste und markieren nicht mit der Tastatur.
Re: copy und paste in textbox
Verfasst: Freitag 5. August 2016, 14:39
von BlackJack
@coethen25: Tk ist halt Tk. Das stammt aus einer anderen Zeit als die GUI-Elemente die Du von anderen GUI-Rahmenwerken gewohnt bist. Strg+A bringt den Cursor an den Anfang und markiert nicht den Inhalt und ein Kontextmenü gibt es nicht.
Guckst Du hier:
http://www.tcl.tk/man/tcl8.4/TkCmd/entry.htm#M63 unter Punkt [10] (Strg+A - Cursor an den Anfang) und [13] (Strg+/ - alles selektieren).
Re: copy und paste in textbox
Verfasst: Freitag 5. August 2016, 14:58
von coethen25
Danke, sieht wohl so aus, als ob ich damit leben muss

und mit der Tastatur kopieren und einfügen muss. Halbsoschlimm!!

Re: copy und paste in textbox
Verfasst: Freitag 5. August 2016, 18:55
von Kebap
Damit leben, naja. Wenn es dir wichtig ist, es gibt auch andere GUI-Frameworks neben TK, die etwas "mehr" Funktionalität anbieten.
Re: copy und paste in textbox
Verfasst: Montag 8. August 2016, 12:05
von coethen25
Danke für diesen Hinweis! Wie gesagt, ich habe erst vor kurzem mit Python begonnen. Dann werd ich mal schauen, was es noch so außer tkinter gibt.
Re: copy und paste in textbox
Verfasst: Montag 8. August 2016, 18:26
von Flano
Code: Alles auswählen
import tkinter as tk
def cut():
tb.event_generate("<<Cut>>")
return "break"
def copy():
tb.event_generate("<<Copy>>")
return "break"
def paste():
tb.event_generate("<<Paste>>")
return "break"
def popup(event):
menu_edit.post(event.x_root, event.y_root)
root = tk.Tk()
root.title("Test")
menubar = tk.Menu(root)
menu_edit = tk.Menu(menubar)
menu_edit.add_command(label='Cut', command=cut)
menu_edit.add_command(label='Copy', command=copy)
menu_edit.add_command(label='Paste', command=paste)
f1 = tk.Frame(root, bg="moccasin", bd="4", relief=tk.GROOVE)
f1.pack()
tb = tk.Text(f1, width=60, height=15, bg="white", fg="black", font="Helvetia 12")
tb.pack()
tb.bind("<Button-3>", popup)
root.mainloop()
So funktioniert "copy, cut, paste" bei mir, mit der rechten Maustaste. Bei Windows markiert <Strg+A> den ganzen Text, bei Linux bringt es den Cursor an den Anfang. Leider nicht einheitlich Plattformübergreifend.
Viele Grüße
Flano
Re: copy und paste in textbox
Verfasst: Dienstag 9. August 2016, 10:52
von coethen25
@Fiano Danke Dir, so klappt es wunderbar! Nur muss ich aufpassen, weil ich ja zwei Textboxen habe (Eingabe u. Ausgabe), dass ich für die Eingabebox (eg) nur die paste-funktion benutze und für die Ausgabe(ag) nur die copy-funktion. Packe ich beide Funktionen in beide Boxen, wird auch, wenn ich den Text in die Eingabe einfüge, der Text in die Ausgabe eingefügt.
Code: Alles auswählen
def cut():
eg.event_generate("<<Cut>>")
ag.event_generate("<<Cut>>")
return "break"
def copy():
ag.event_generate("<<Copy>>")
return "break"
def paste():
eg.event_generate("<<Paste>>")
return "break"
Die Funktion cut habe ich in beide Boxen geschrieben.Das ist ganz gut so. Nochmals Danke!
Re: copy und paste in textbox
Verfasst: Dienstag 9. August 2016, 11:02
von BlackJack
@coethen25: Es wäre wohl eher sinnvoll die Funktionen zu parametrisieren und das jeweilige `Text`-Exemplar als Argument zu übergeben. Also am ehesten eine eigene Klasse von `Text` abzuleiten. Das alles als ”Funktionen” auf Modulebene zu haben und auf globalen Variablen zu operieren ist sowieso total unsauber. Zu GUI-Programmierung gehört in Python objektorientierte Programmierung (OOP).
Re: copy und paste in textbox
Verfasst: Mittwoch 10. August 2016, 11:46
von coethen25
@BlackJack Deine Anregungen helfen mir echt weiter beim Python lernen! Habs jetzt geschafft, wie gesagt als totaler Anfänger, das ganze Konstrukt in eine Klasse zu schreiben, so dass es auch funktioniert. Eigene Klassen von den Textboxen zu schreiben, wird wohl nun mein nächstes Ziel sein.