Jump to content

Python, die verpasste Chance?


Recommended Posts

vor 43 Minuten schrieb Egoist:

Super Albert,

 

das sieht doch schon ganz gut aus! Du hast nur die führenden ''' vergessen mitzukopieren,

so dass nun der Startkommentar als Code und der Code als Kommentar erscheint.

 

Auch Du überrascht mich mit einem Vorstoss in Richtung tkinter. Eine Gui können wir sehr gut gebrauchen!

Bisher habe ich davon keine Ahnung, daher die dumme Frage:

Ist win.mainloop() schon vordefiniert in tkinter, oder fehlt nur ein Teil des Programms?

 

Hallo Egoist,

 

Ich habe versucht, die Erklärungen zum GUI-Code hier nach dem Zitat unterzubringen. Es ging wieder nicht.

Mein Account ist irgendwie im Eimer!

Wie komme ich nur an Paroli ran?

Albert

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 9 Minuten schrieb Dr. Manque:

Ich habe versucht, die Erklärungen zum GUI-Code hier nach dem Zitat unterzubringen. Es ging wieder nicht. 

 

Die Forensoft zickt oft rum, daher empfiehlt es sich erst ein paar Leerzeilen zu  erstellen und dann in der Mitte zwischen den leeren Zeilen ein Zitat oder Codeblock auszulösen.

Ich denke nicht, dass Dein Account kaputt ist.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Minuten schrieb novice:

Bitte JA :)

 

Ok, da Albert grad Malesche hat und der Code ja auch von ihm grad gepostet wurde, erlaube ich es mir mit dem Hinweis auf seine Urheberschaft.

 

"""
Spyder Editor

This is a temporascry ript file.
"""
#========================
# imports
#========================
import tkinter as tk
from tkinter import ttk

# Erzeuge eine Instanz
win = tk.Tk()

# Füge einen Titel hinzu
win.title("Meine erste GUI")

# Enable resizing x-dimension, disable y-dimension
win.resizable(True, True)

# Labels hinzufügen
label1 = ttk.Label(win, text="Enter a Plein-Nr.:")
label1.grid(column=0, row=5)

label2 = ttk.Label(win, text="********** User Interface für Roulette-Tests **********")
label2.grid(column=0, row=0)
label3 = ttk.Label(win, text="*******************************************************")
label3.grid(column=0, row=1)

# Button Click Event Function
def click_me1():
    action1.configure(text= 'Hallo ' + name.get())
    label1.configure(foreground='red')
    label1.configure(text=" rotes Label ")
# Button Click Event Function
def click_me2():
    action2.configure(text= " Button2 wurde geklickt")
    label1.configure(foreground='blue')
    label1.configure(text=" blaues Label ")

# Ein Text Widget hinzufügen
name = tk.StringVar()
name_entered = ttk.Entry(win, width=4, textvariable=name)  
name_entered.grid(column=1, row=5)  
# Einen Button hinzufügen
action1 = ttk.Button(win,  text="Ok!", command=click_me1)
action1.grid(column=2, row=5)

# Einen 2. Button hinzufügen
action2 = ttk.Button(win,  text="Permtest vom Ende", command=click_me2)
action2.grid(column=0, row=7)
# Einen 3. Button hinzufügen
action3 = ttk.Button(win,  text="Permtest von oben", command="")
action3.grid(column=1, row=7)
# Einen 4. Button hinzufügen
action4 = ttk.Button(win,  text="Pooltest", command="")
action4.grid(column=12, row=7)

# Setze den Cursor in die Textbox
name_entered.focus()
#==================
#  GUI-Start
#==================
win.mainloop()

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 27 Minuten schrieb novice:

grob überflogen!!!

 

Cool, malst Du wirklich die Permanenzen mit der Hand auf Papier? (sieht so aus)

 

Wenn es stimmt, was ich zu sehen glaube, sind das 3 kleine Striche pro Coup, also eine Mörderarbeit...

 

Das kriegen wir auf alle Fälle mit Python einfacher und umweltschonender in den Griff :D

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb Egoist:

Nachtrag:  Super Albert, Dein GUI läuft hier erste Sahne! 

 

Noch Nachtrag:

 

ich hab mal ein bisschen mit tkinter und Deinem S_cript herumgespielt.

Dabei sind mir einige Dinge aufgefallen:

 

Es wird in Zeilen und Spalten gedacht, so ähnlich wie bei Excel.

Die Label werden in eine Fensterinstanz eingefügt mit der anfänglichen Spaltenbreite des breitesten Spaltenmitglieds.

Man kann mehr als ein Fenster aufrufen, schliesst man aber das jüngste, geht das ältere auch zu.

Leider läuft dann die *.mainloop() des älteren Fensters noch weiter, man hat aber kein GUI mehr, um was zu machen...

 

Fängt man mit dem links oben liegenden Label nicht bei 0 , 0 an, sondern bei zB 10, 10, dann werden die Zeilen 0-9 und die Spalten 0-9 links oben herausgeschoben.

Interessant... Bestimmt kann man auch nach dem Start einer *.mainloop() Funktion noch Label hinzufügen und löschen.

Das muss ich noch testen...

 

Auch wenn tkinter einen etwas altbackenen Eindruck macht, so scheint es durch seine Klarheit zu bestechen.

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

An dieser Stelle habe ich mal rumgespielt:

 

# Erzeuge eine Instanz
win = tk.Tk()
win2 = tk.Tk()              # hier habe ich eine 2. Instanz eingebaut

# Füge einen Titel hinzu
win.title("Meine erste GUI")
win2.title("Test")          # und auch einen Titel vergeben
# Enable resizing x-dimension, disable y-dimension
win.resizable(True, True)
                            # hier fehlte win2.resizable(True, True) ,
							# habs halt nicht eingebaut,
							# das Fenster ist trotzdem resizable (scheint default zu sein).
# Labels hinzufügen
label1 = ttk.Label(win, text="Enter a Plein-Nr.:")
label1.grid(column=0, row=5)

label2 = ttk.Label(win, text="**")
label2.grid(column=0, row=0)
label3 = ttk.Label(win, text="**")
label3.grid(column=0, row=1)
label4 = ttk.Label(win, text="**")
label4.grid(column=1, row=2)
label5 = ttk.Label(win2, text="*****")  #das geht nur, wenn man ein 2.Fenster namens win2 definiert hat, hatte ich aber gemacht.
label5.grid(column=10, row=10)

Man beachte, bei Label5 sind Zeile und Spalte 10, trotzdem taucht das Label links oben auf.

Die Spalten 0-9 und die Zeilen 0-9 scheinen keine Ausdehnung zu haben...

 

Vermutlich ist es wichtig, dann auch win2.mainloop aufzurufen. Habs noch nicht ohne probiert.

 

Das kommt ganz unten in den Text:

 

#==================
#  GUI-Start
#==================
win.mainloop()
win2.mainloop()

 

Wenn man das geänderte Programm laufen lässt, sieht Alberts GUI natürlich gerupft aus, aber

jetzt tragt mal eine ganz lange Zahl in das Eingabefeld ein und drückt ENTER.

Dann noch auf den Knopf mit Hallo drücken...

 

Der Hallo-Knopf wird breiter und damit seine ganze Spalte... Klasse...

 

 

Viel Spass mit Python

wünscht Euch Ego

 

p.s.: Zum Schliessen bitte erst das Fenster mit den Buttons schliessen und danach das Fenster Test.

        Sonst bleibt vielleicht Müll im Speicher.

pps.: Erstaunlicherweise braucht man win2.mainloop() nicht aufzurufen, das 2. Fenster kommt trotzdem hoch und kann in der Grösse verändert werden.

         Der oben beschriebene Knopf mit "Hallo" heisst zu Beginn "OK!"

         Erst nach dem ersten Anklicken wird der Text und damit die Breite der Spalte verändert.

         Das geht auch wieder schmaler, wenn die Eingabe wieder kürzer ist und man dort wieder drückt.

 

 

bearbeitet von Egoist
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 15 Stunden schrieb Egoist:

 

Hallo Ego,

 

Du machst das hier so gut! Du variierst und experimentierst auch gleich!

Man könnte eine Kooperation in Sachen Rouletteprogrammierung aufziehen, wie ich sie mir seit 12 Jahren wünsche und nun das:

Gestern habe ich bis nachts halb 2 Uhr erfolglos darum gekämpft, 10 Zeilen Erklärungstext abzuschicken.

Auch über PN hat es nicht geklappt. Womit hab' ich das bloß verdient?

Mein neuer Versuch heute ging auch wieder schief. Der "Antworten"-Button wird zu "Speichern", färbt sich grau und es geht nicht weiter.

Albert

Über "Bearbeiten" probiere ich eine Ergänzung:

 

 

bearbeitet von Dr. Manque
Ergänzung
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 23 Minuten schrieb Dr. Manque:

Gestern habe ich bis nachts halb 2 Uhr erfolglos darum gekämpft, 10 Zeilen Erklärungstext abzuschicken.

Auch über PN hat es nicht geklappt. Womit hab' ich das bloß verdient?

Mein neuer Versuch heute ging auch wieder schief. Der "Antworten"-Button wird zu "Speichern", färbt sich grau und es geht nicht weiter.

Albert

 

Sorry, es gab noch einige technische Probleme nach dem Umzug zu einem ganz neuen Server-Anbieter, der am 3.7. durchgeführt wurde. Falls weitere Probleme auftreten sollten, dann am besten im Test-Unterforum darauf hinweisen oder PN bzw. Mail an mich. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 34 Minuten schrieb Paroli:

 

Sorry, es gab noch einige technische Probleme nach dem Umzug zu einem ganz neuen Server-Anbieter, der am 3.7. durchgeführt wurde. Falls weitere Probleme auftreten sollten, dann am besten im Test-Unterforum darauf hinweisen oder PN bzw. Mail an mich. 

Vielleicht kann jemand diese Fehlermeldung interpretieren?:

Fehlermeldung2.gif.0f829cdfa6b4d5b7590c8de4c166cb85.gif

Danach färbt sich der "Speichern"-Button grau und es passiert nichts mehr.

Albert

Link zu diesem Kommentar
Auf anderen Seiten teilen


(Fast) Alle Chancen

 

Mehr aus optischen Gründen, okay der Rechner erspart sich ein wenig Rechenarbeit der Vorteil ist aber minimal, alle Chancen nach dem gleichen Prinzip.

Korrigiert (tp/ts)

zahl= int(input("Zahl eingeben:"))

kess= (0, 32, 15, 19, 4, 21, 2, 25, 17, 34, 6, 27, 13, 36, 11, 30, 8, 23, 10, 5, 24, 16, 33, 1, 20, 14, 31, 9, 22, 18, 29, 7, 28, 12, 35, 3, 26)
rono= (0,"R","N","R","N","R","N","R","N","R","N","R","N","R","N","R","N","R","N","R","N","R","N","R","N","R","N","R","N","R","N","R","N","R","N","R","N")
paip= (0,"P","I","I","P","I","P","I","I","P","P","I","I","P","I","P","P","I","P","I","P","P","I","I","P","P","I","I","P","P","I","I","P","P","I","I","P")
mapa= (0,"G","K","G","K","G","K","G","K","G","K","G","K","G","K","G","K","G","K","K","G","K","G","K","G","K","G","K","G","K","G","K","G","K","G","K","G")
dou = (0, 3, 2, 2, 1, 2, 1, 3, 2, 3, 1, 3, 2, 3, 1, 3, 1, 2, 1, 1, 2, 2, 3, 1, 2, 2, 3, 1, 2, 2, 3, 1, 3, 1, 3, 1, 3)
col = (0, 2, 3, 1, 1, 3, 2, 1, 2, 1, 3, 3, 1, 3, 2, 3, 2, 2, 1, 2, 3, 1, 3, 1, 2, 2, 1, 3, 1, 3, 2, 1, 1, 3, 2, 3, 2)
trs = (0, 31, 13, 19, 1, 19, 1, 25, 13, 31, 1, 25, 13, 31, 7, 25, 7, 19, 7, 1, 19, 13, 31, 1, 19, 13, 31, 7, 19, 13, 25, 7, 25, 7, 31, 1, 25)
trp = (0, 31, 13, 19, 4, 19, 1, 25, 16, 34, 4, 25, 13, 34, 10, 28, 7, 22, 10, 4, 22, 16, 31, 1, 19, 13, 31, 7, 22, 16, 28, 7, 28, 10, 34, 1, 25)
sek = ("Z","Z","Z","G","G","G","G","G","O","O","O","K","K","K","K","K","K","K","K","K","K","K","K","O","O","O","O","O","G","G","G","G","G","G","G","G","G")
kesselzahl=kess.index(zahl)
rn = rono[kesselzahl]
pi = paip[kesselzahl]
mp = mapa[kesselzahl]
do = dou[kesselzahl]
co = col[kesselzahl]
tp = trp[kesselzahl]
tr = trs[kesselzahl]
se = sek[kesselzahl]

und nein, natürlich nicht händisch eingetippt sondern ein Tabellenkalkulationsprogramm arbeiten lassen

 

Servus

bearbeitet von wiensschlechtester
Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 6.7.2018 um 14:12 schrieb Egoist:

ich bin schwer begeistert! Du hast hier die erste Funktion definiert!

Ebenso hingerissen bin ich von Deiner Entdeckung, QPython.

 

Hallo Ego,

 

danke für die lobenden Worte, obwohl eine Fkt zu erstellen zum Glück nicht die hohe Kunst ist.

 

Bezüglich QPython ist das Standard-App nicht wirklich das Benutzerfreundlichste, man merkt schon das Alter von Python, vielleicht teste ich mal andere.

 

Servus

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 22 Stunden schrieb novice:

Wenn Bedarf besteht, setz ich über DISCORD eine Gruppe auf - damit man vor  den Grützköppen Ruhe hat :cowboy:

Hallo novice,

 

ist vielleicht für später eine gute Idee, doch derzeit dient dieser thread auch noch zu Anwerbung von Mitstreitern, da muss man das Kommunikationsbedürfnis von einigen Querschreibern in Kauf nehmen.

 

Servus

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 33 Minuten schrieb wiensschlechtester:

Mehr aus optischen Gründen, okay der Rechner erspart sich ein wenig Rechenarbeit der Vorteil ist aber minimal, alle Chancen nach dem gleichen Prinzip.

 

 

Hallo Wiener,

 

das sieht sehr übersichlich aus, danke für die Mitarbeit!

 

Ich bin mir nicht ganz sicher, aber vielleicht sollte man die Konstanten noch ein wenig roulettespezifischer nennen,

wenn das Inhalt eines Moduls wird.

Im importierenden Python_s_cript kann man ja bei Bedarf noch Umbenennen.

 

Mir fiel auf, dass "trp und trs" in der Zeile vertauscht wurden (nicht die Daten, nur die Bezeichnungen).

Und ich würde mir wünschen, dass es (zusätzlich) Tabellen gibt, in denen die Werte schon numerisch vorliegen,

also roulRS mit Werten von +1 für Rot und -1 für Schwarz.

Damit kann man durch einen Plot die Abweichungen über die Zeit und durch einen Mittelwert, Min, Max über alles einen Status bilden.

 

Ansonsten sind Deine Tabellen sehr gut geeignet das erste RouletteModul.py zu bilden.

 

Eigentlich wollte ich jetzt etwas weitermachen, bekam aber gerade einen Anruf und muss weg...

 

 

Bis später,

Ego

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 34 Minuten schrieb Egoist:

Ich bin mir nicht ganz sicher, aber vielleicht sollte man die Konstanten noch ein wenig roulettespezifischer nennen,

wenn das Inhalt eines Moduls wird.

 

Hallo Ego,

Wollte kurze Bezeichnungen verwenden, aber als Projektleiter, gratuliere als Erster zur offiziellen Benennung ;-),  überlasse ich es Dir wie Du die Klassen und derren Bestandteile bennenst.

vor 34 Minuten schrieb Egoist:

also roulRS mit Werten von +1 für Rot und -1 für Schwarz.

 

Der Gedanke gefällt mir weniger, da ich auch gerne Chancen untereinander mische, und so muß ich mir für jede merken welche positiv oder negativ ist, und Chancenkombinationen beschrieb ich gerne immer mit Strings, z.B. der Klassiker Rouge+Impair = RI.

 

vor 34 Minuten schrieb Egoist:

Mir fiel auf, dass "trp und trs" in der Zeile vertauscht wurden (nicht die Daten, nur die Bezeichnungen).

schau ich mir an - okay hast recht - korrigiert

 

Seruvs

bearbeitet von wiensschlechtester
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Stunden schrieb wiensschlechtester:

er Gedanke gefällt mir weniger, da ich auch gerne Chancen untereinander mische, und so muß ich mir für jede merken welche positiv oder negativ ist, und Chancenkombinationen beschrieb ich gerne immer mit Strings, z.B. der Klassiker Rouge+Impair = RI.

 

Hey Wiener,

 

ich verstehe Deinen Einwand sehr gut. Aber auch ich habe das Problem mit dem Merken natürlich bedacht.

Daher ging ich nach folgender, bisher ungenannten, Konvention vor:

  • Man nehme die Plein "1" (das ist natürlich willkürlich von mir gewählt)
  • 1 ist Rot bzw Rouge
  • 1 ist Ungerade bzw Impair
  • 1 ist Tief bzw Manque
  • Also bekommen alle EC der 1 eine +1 in den entsprechenden Chancen.
  • Folglich sind Noir, Pair und Passe bzw  Schwarz, Gerade und Hoch = -1
  • Die Namen der von mir bezeichneten Listen hiessen deshalb auch roulRS oder roulTH und nicht roulSR etc.
    denn der erste Buchstabe steht für die +1 und der zweite für die -1

Es spricht überhaupt nichts dagegen Deine Tabellen so zu lassen und die numerischen Tabellen davon abzuleiten.

 

Die numerische Methode hätte aber an einigen Stellen Vorteile, ohne gleichzeitig Nachteile zu produzieren.

Wollte man zB die von Dir genannte Kombination mehrerer EC nutzen, könnte man zB alles binär codieren.

Dann hätte die 1 in RS das Bit 0 und die 1 in UG das Bit 1 usw.

Die Zero müsste man immer vermeiden, also ist die 0 immer ein Nullevent.

 

Jetzt wo ich es hinschreibe, fallen mir allerdings auch noch Probleme ein, die die binäre Darstellung erzeugt.

Das fängt schon bei dem Vorzeichen an, das Binärzahlen nicht kennen.

 

Das alles ist aber fortgeschritter Brainfuck, der momentan nicht interessiert.

 

Es sollte alle Tabellen geben, die man nachher sinnvoll nutzen mag.

Aus Speicherplatzgründen sollten leicht erstellbare Tabellen aber erst zur Laufzeit entstehen, wenn man sie nutzen will.

 

Deine vordefinierten Tabellen, die besser menschenlesbar sind und damit besser wartbar, sollten Standard bleiben.

 

vor 5 Stunden schrieb wiensschlechtester:

als Projektleiter, gratuliere als Erster zur offiziellen Benennung ;-),

 

Danke für die Gratulation, aber ich wollte lieber aktiv mitmachen, als in anderer Leute Suppe zu spucken.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 8 Stunden schrieb Dr. Manque:

Vielleicht kann jemand diese Fehlermeldung interpretieren?:

Fehlermeldung2.gif.0f829cdfa6b4d5b7590c8de4c166cb85.gif

Danach färbt sich der "Speichern"-Button grau und es passiert nichts mehr.

Albert

 

Hallo Albert,

 

es gibt hier (und in anderen Foren?) eine eingestellte Zeit, die besagt, wie lange man einen Beitrag noch "verbessern" kann.

Wenn Dein Beitrag also nicht moved (bewegt) or deleted (gelöscht) wurde, dann too much time may have passed since it was posted

(das bedeutet, die eingestellte Zeit ist abgelaufen).

 

Zusätzlich gibt es für Codeblöcke einen Editierschutz, der einsetzt, sobald Du ihn gesendet hast.

Ich kann mir sehr gut Sicherheitsaspekte als Grund vorstellen.

 

Die Sicherheit ist zwar immer noch gefährdet, weil man bösartigen Code posten könnte,

aber den sehen vorher alle, die was davon verstehen und könnten Alarm schlagen.

Der Editierschutz hilft gegen Trolle, die den Code zitieren und verändern könnten.

 

Ist alles nur meine Meinung, ich hoffe, Deine Probleme haben sich inzwischen gelegt.

 

Wenn Du ein neues Posting abschicken willst, kontrolliere bitte vorher, ob der <code> Block in Ordnung ist.

Er ist nachträglich nicht änderbar (vielleicht kann man ihn löschen und neu aufmachen? Weiss ich aber nicht).

 

 

Gruss vom Ego

bearbeitet von Egoist
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 3 Stunden schrieb Egoist:

Es sollte alle Tabellen geben, die man nachher sinnvoll nutzen mag.

Aus Speicherplatzgründen sollten leicht erstellbare Tabellen aber erst zur Laufzeit entstehen, wenn man sie nutzen will.

 

Deine vordefinierten Tabellen, die besser menschenlesbar sind und damit besser wartbar, sollten Standard bleiben.

 

Hi Wurstvernichter,

 

ich gehe diesbezüglich von meiner Erfahrung aus. Wenn man Prognosen erstellt, und diese natürlich wieder kontrolliert, sowie GuV rechnet,  mit mehr als einer Chance verwendete ich bevorzugt Strings zur Prognosedarstellung, ist einfach und nachvollziehbar.

 

Das schöne ist, bei meiner Art, man kann seine künstlichen Chancen einfach zusammenstellen....

 

Da ich nicht weiß, wie Du für Roulette bis jetzt programmiert hattest, kann ich Deinen Gedankengängen nicht ganz folgen.

 

Da fällt mir mal die Frage ein wie es weitergeht?

 

1) Das prinzipelle Einlesen hast Du ja schon einmal gemacht, Verfeinerungen kommen sicherlich noch später.

 

2) Chancen haben wir auch schon bestimmt.

 

3) Jetzt würde der eigentliche Roulette-System-Test oder einfach stochern in der Masse erfolgen - Dazu schreiben wir ja den ganzen Schmafu, damit der User dies leichter bewerkstelligen kann. Somit klammern wir diesen Punkt aus.

 

4) In 3 werden also die Chancen bestimmt welche man betrachten will, oder Satz für Satz einzelne Prognosen mit unterschiedlichen Chancen und Einsatzhöhen bestimmt. Jetzt muß man Treffer oder Nichttreffer pro Coup auswerten. Ich nenne diesen Punkt einmal Prognosenkontrolle.

 Wie gehen wir damit um?

 Wir bekommen also einen String als Prognose wildes Beispiel: "Rouge - 3 Stk"+"Plein 0 - 1 Stk"+"TS1 - 1 Stk" 

(Für alle Klugscheißer - dient nur als Text und nicht als Satz- oder Systembeispiel)

"Stk" können wir weglassen

Chancen nur mir 3 Zeichen beschreiben z.B.: rou, pl0, pl1, dt1, co3, ts1...

Nach einer Chance vier Stellen, für die Phantasten unter uns, beschreibt die Einsatzhöhe, also haben wir einen String wie folgt "rou0001pl00001ts10001"

Somit kann man beliebig viele Einsätze in den String hineinschaufeln.

 

Passt dies jeden? In der bis jetzt kleinen Pythongruppe. Natürlich sollt davor noch @Egoist die Namen der Klasse und aller Elemene bestimmen

 

gn8

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie ist deine Meinung dazu?

Du kannst jetzt schreiben und dich später registrieren. Bereits registrierter Teilnehmer? Dann melde dich jetzt an, um einen Kommentar zu schreiben.
Hinweis: Dein Beitrag wird nicht sofort sichtbar sein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Neu erstellen...