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
copy und paste in textbox
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!
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!
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Naja, da reicht eigentlich eine ganz einfache Textbox, um mein Problem darzustellen.
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.
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()
Mein Programm läuft ja super, aber eben copy und paste geht nicht über die rechte Maustaste und markieren nicht mit der Tastatur.
@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).
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).
Damit leben, naja. Wenn es dir wichtig ist, es gibt auch andere GUI-Frameworks neben TK, die etwas "mehr" Funktionalität anbieten.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
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()
Viele Grüße
Flano
Zuletzt geändert von Anonymous am Montag 8. August 2016, 19:58, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
@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.
Die Funktion cut habe ich in beide Boxen geschrieben.Das ist ganz gut so. Nochmals Danke!
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"
Zuletzt geändert von Anonymous am Dienstag 9. August 2016, 10:59, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
@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).
@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.