Seite 1 von 2

Variablen mit mehreren Zeilen

Verfasst: Freitag 27. Januar 2012, 16:07
von seelosp
Hallo,
ich habe ein Problem. Ich möcht eine Variable mit mehreren Zeilen erstellen.
Das klappt auch. Nur bei dieser methode kommt "Syntax error":

Code: Alles auswählen

    grösse = name3.get()+x+name4.get()
    file = "from tkinter import* \n\
    window = Tk() \n\
    window.geometry (\""+grösse+"\")\n\
    window.title (\""+name1.get()+"\")\n\
    text5 = Label (window, text = \""+name2.get())+"\")\n\
    text5.place (x=10,y=30)"
    print (file)
Danke im Vorraus!
seelosp

Re: Variablen mit mehreren Zeilen

Verfasst: Freitag 27. Januar 2012, 16:23
von Barabbas
Hallo,

das ist ja ein ziemliches Durcheinander von Anführungszeichen, Escape-Zeichen etc. Warum nutzt du nicht einfach triple-Quotes ("""test""")? Die gehen über Zeilenenden hinweg, so dass du die nicht maskieren musst und du kannst auch " und ' darin ganz normal verwenden.

lg,

brb

Re: Variablen mit mehreren Zeilen

Verfasst: Freitag 27. Januar 2012, 16:28
von seelosp
Sorry,
bin leider anfänger :D
ein beispiel bitte :(

Re: Variablen mit mehreren Zeilen

Verfasst: Freitag 27. Januar 2012, 16:37
von derdon

Code: Alles auswählen

file = """from tkinter import *
    window = Tk()
    window.geometry({0})
    window.title({1})
    text5 = Label(window, text={2})
    text5.place(x=10,y=30)""".format(
        grösse, name1.get(), name2.get())
(ungetestet, Angaben sind wie immer ohne Gewähr)

Ich nehme an, du verwendest Python3. Ansonsten wäre der Name grösse ja ungültig. Du solltest dich (nach Durcharbeitung des Tutorials) mit dem Thema String-Formatting beschäftigen.

Re: Variablen mit mehreren Zeilen

Verfasst: Freitag 27. Januar 2012, 16:41
von seelosp
Barabbas hat geschrieben:Hallo,

das ist ja ein ziemliches Durcheinander von Anführungszeichen, Escape-Zeichen etc. Warum nutzt du nicht einfach triple-Quotes ("""test""")? Die gehen über Zeilenenden hinweg, so dass du die nicht maskieren musst und du kannst auch " und ' darin ganz normal verwenden.

lg,

brb
Das wäre zwar einfacher,
aber bei meinem Proplem hilft das auch nicht :( .
Ich glaube das ist das proplem:
Python kann in die Mehrzeilige Variable keine anderen Variablen einfügen
(bsp.

Code: Alles auswählen

file = "Hi\n\
Hi"+bsp+"hi"
)
+bsp+ klappt nicht.

Re: Variablen mit mehreren Zeilen

Verfasst: Freitag 27. Januar 2012, 16:44
von seelosp
derdon hat geschrieben:

Code: Alles auswählen

file = """from tkinter import *
    window = Tk()
    window.geometry({0})
    window.title({1})
    text5 = Label(window, text={2})
    text5.place(x=10,y=30)""".format(
        grösse, name1.get(), name2.get())
(ungetestet, Angaben sind wie immer ohne Gewähr)

Ich nehme an, du verwendest Python3. Ansonsten wäre der Name grösse ja ungültig. Du solltest dich (nach Durcharbeitung des Tutorials) mit dem Thema String-Formatting beschäftigen.
Cool! Danke,
werde es gleich testen!

Re: Variablen mit mehreren Zeilen

Verfasst: Freitag 27. Januar 2012, 17:56
von BlackJack
@seelosp: Warum generierst Du Quelltext? Das ist in der Regel keine gute Idee.

Re: Variablen mit mehreren Zeilen

Verfasst: Freitag 27. Januar 2012, 18:53
von seelosp
Warum keine gute Idee?
An derdon: Danke! es funktioniert super!

Re: Variablen mit mehreren Zeilen

Verfasst: Freitag 27. Januar 2012, 18:57
von seelosp
BlackJack hat geschrieben:@seelosp: Warum generierst Du Quelltext? Das ist in der Regel keine gute Idee.
Ich habe ein Programm geschrieben das den Quellcode für ein Message-Fenster generiert!
Funktioniert super! :mrgreen:

Re: Variablen mit mehreren Zeilen

Verfasst: Freitag 27. Januar 2012, 19:07
von pillmuncher
seelosp hat geschrieben:Ich habe ein Programm geschrieben das den Quellcode für ein Message-Fenster generiert!
Warum sollte jemand sowas tun wollen? Wenn er noch seine sieben Zwetschgen beieinander hat? Warum nicht einfach:

Code: Alles auswählen

import tkinter

def make_window(size, name_a, name_b):
    window = tkinter.Tk()
    window.geometry(size)
    window.title(name_a)
    text5 = tkinter.Label(window, text=name_b)
    text5.place(x=10,y=30)
    return window

my_window = make_window(grösse, name1.get(), name2.get())
Anders ausgedrückt: vermutlich möchtest du lernen, was Funktionen sind, wie man sie verwendet, und wie man sie baut.

Re: Variablen mit mehreren Zeilen

Verfasst: Freitag 27. Januar 2012, 19:10
von seelosp
pillmuncher hat geschrieben:
seelosp hat geschrieben:Ich habe ein Programm geschrieben das den Quellcode für ein Message-Fenster generiert!
Warum sollte jemand sowas tun wollen? Wenn er noch seine sieben Zwetschgen beieinander hat? Warum nicht einfach:

Code: Alles auswählen

import tkinter

def make_window(size, name_a, name_b):
    window = tkinter.Tk()
    window.geometry(size)
    window.title(name_a)
    text5 = tkinter.Label(window, text=name_b)
    text5.place(x=10,y=30)
    return window

my_window = make_window(grösse, name1.get(), name2.get())
Anders ausgedrückt: vermutlich möchtest du lernen, was Funktionen sind, wie man sie verwendet, und wie man sie baut.
So kann man es Ausdrücken. Das Programm erleichtert mir aber auch die arbeit bei anderen
Programmen :D

Re: Variablen mit mehreren Zeilen

Verfasst: Freitag 27. Januar 2012, 19:14
von seelosp
Hab's fertig!
Will aber noch ein paar funktionen einfügen :D
Download: https://rapidshare.com/files/2308101578 ... builder.py

Re: Variablen mit mehreren Zeilen

Verfasst: Freitag 27. Januar 2012, 19:45
von BlackJack
Weil sicher nicht jeder Lust hat eine Datei *dort* herunter zu laden: http://paste.pocoo.org/show/541750/

Re: Variablen mit mehreren Zeilen

Verfasst: Freitag 27. Januar 2012, 19:55
von seelosp
Danke so geht das "downloaden" besser :D

Re: Variablen mit mehreren Zeilen

Verfasst: Freitag 27. Januar 2012, 19:56
von theo.puke
In dem Code gibt es ja überhaubt kein Fehlerhandling. Da muss man noch ein paar try und catch Ausdrücke verwenden.

Re: Variablen mit mehreren Zeilen

Verfasst: Freitag 27. Januar 2012, 20:20
von BlackJack
@seelosp: Wieso erleichtert das die Arbeit bei anderen Programmen?

Du solltest ganz dringend von `place()` weg kommen, denn Deine GUI funktioniert sonst nur bei Dir zuverlässig. Bei einer anderen Bildschirmauflösung, anderen Schriftgrössen oder -arten, anderen Themes, usw. passen diese absoluten Positionen nicht unbedingt. Bei mir sieht das zum Beispiel gerade so aus:
Bild

Noch nicht unbenutzbar, aber auch nicht schön.

Der Test-Code ist falsch, denn es darf innerhalb eines Programms immer nur ein Exemplar von `Tk` geben. Wenn man ein zweites erstellt, ist das Verhalten undefiniert und kann von komisch bis harter Programmabsturz gehen. Weitere Fenster neben dem Hauptfenster muss man mit `Toplevel` erstellen.

Den Sternchen-Import sollte man auch lassen. Damit holst Du Dir alle Namen aus dem Modul in den Namensraum des importierenden Moduls. Spätestens wenn Du noch andere Module so importierst wird es irgend wann unübersichtlich, weil man nicht mehr so einfach heraus finden kann, welcher Name aus welchem Modul stammt. Ausserdem passieren dann auch mal schnell Namenskollisionen. Bei `tkinter` und `PIL` ist zum Beispiel `Image` beliebter Kandidat dafür.

Re: Variablen mit mehreren Zeilen

Verfasst: Samstag 28. Januar 2012, 00:17
von nomnom
theo.puke hat geschrieben:In dem Code gibt es ja überhaubt kein Fehlerhandling. Da muss man noch ein paar try und catch Ausdrücke verwenden.
Wo soll denn da ein Fehler auftreten?

Re: Variablen mit mehreren Zeilen

Verfasst: Samstag 28. Januar 2012, 09:31
von seelosp
BlackJack hat geschrieben:@seelosp: Wieso erleichtert das die Arbeit bei anderen Programmen?

Du solltest ganz dringend von `place()` weg kommen, denn Deine GUI funktioniert sonst nur bei Dir zuverlässig. Bei einer anderen Bildschirmauflösung, anderen Schriftgrössen oder -arten, anderen Themes, usw. passen diese absoluten Positionen nicht unbedingt. Bei mir sieht das zum Beispiel gerade so aus:
Bild

Noch nicht unbenutzbar, aber auch nicht schön.

Der Test-Code ist falsch, denn es darf innerhalb eines Programms immer nur ein Exemplar von `Tk` geben. Wenn man ein zweites erstellt, ist das Verhalten undefiniert und kann von komisch bis harter Programmabsturz gehen. Weitere Fenster neben dem Hauptfenster muss man mit `Toplevel` erstellen.

Den Sternchen-Import sollte man auch lassen. Damit holst Du Dir alle Namen aus dem Modul in den Namensraum des importierenden Moduls. Spätestens wenn Du noch andere Module so importierst wird es irgend wann unübersichtlich, weil man nicht mehr so einfach heraus finden kann, welcher Name aus welchem Modul stammt. Ausserdem passieren dann auch mal schnell Namenskollisionen. Bei `tkinter` und `PIL` ist zum Beispiel `Image` beliebter Kandidat dafür.
Sorry... aber ich habe schon mal ein Programm mit 10 Tk()s geschrieben :wink:

Re: Variablen mit mehreren Zeilen

Verfasst: Samstag 28. Januar 2012, 09:34
von seelosp
Soll ich stattdessen pack() benutzen? Und wie ändert man dort die Position?

Re: Variablen mit mehreren Zeilen

Verfasst: Samstag 28. Januar 2012, 10:27
von BlackJack
@seelosp: Bei `pack()` kann man angeben an welcher Seite des Container-Widgets platziert werden soll, und bei `grid()` an welcher Reihe/Spalte im Gitter. Man darf innerhalb eines Container-Widgets nur eine Layout-Methode verwenden, und bei `place()` sollte man immer die gleiche Seite wählen. Und wo es Sinn macht oder nötig ist, kann man `Frame`\s als Container-Widgets zum Gruppieren einführen.