Platzhalter in einer Message Box

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Python86
User
Beiträge: 8
Registriert: Donnerstag 9. Juli 2015, 09:35

Hallo Liebe Community,

die Platzhalter für print Anweisungen sind wie folgt:

Code: Alles auswählen

a=Ich
b=bin
c=15

print("%s"%a,"%s"%b,%i"%c)
Ich bin 15

Ich versuche Platzhalter für Message Boxen zu erstellen, kriege es aber nicht hin,

z.B.

Code: Alles auswählen

 ctypes.windll.user32.MessageBoxA(0,"Ich bin 15","Mein Alter",1)

 ctypes.windll.user32.MessageBoxA(0,"%s"%a,"%s"%b,%i"%c,1) ->funktioniert nicht 
die VBA methode ebenfalls nicht:

Code: Alles auswählen

 ctypes.windll.user32.MessageBoxA(0,"& a &"& b &"& c &,1)
Weis einer die Lösung? :K

Könnt ihre gegebenenfalls eine MessageBox Variante empfehlen bei der man solche Platzhalter platzieren kann? :K

Bei Tkinter und co. habe ich ebenfalls keine Lösung gefunden. :K

Vielen Dank für eure Hife :roll:
Zuletzt geändert von Anonymous am Donnerstag 9. Juli 2015, 15:05, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@Python86: Das erste Programm ist syntaktisch nicht korrekt, so kann das also nicht funktionieren und selbst wenn man die ganzen offensichtlichen Fehler korrigiert ist es Unsinn bei einem `print()` jedes Argument für sich alleine per ``%``-Operator in eine Zeichenkette zu formatieren die ausschliesslich aus dem Platzhalter besteht. Das heisst selbst für den `print()`-Fall hast Du die Verwendung noch nicht richtig verstanden. Zumal man bei neuem Python-Quelltext in der Regel auch eher die `format()`-Methode (oder für Einzelwerte die `format()`-Funktion) verwenden würde anstatt des ``%``-Operators.

Aufrufe raten funktioniert selten und Syntax raten schon mal gar nicht. Der ``&``-Operator hat in Python eine ganz andere Bedeutung als in VBA (und in C wieder eine ganz andere).

Ich würde falls da nichts wichtiges gegen spricht eher Tk für die Anzeige von einem Nachrichtenfenster verwenden statt etwas Low-Level-Windows-eigenes. Es gäbe da in Python 3 beispielsweise `tkinter.messagebox.showinfo()`.

Dein Platzhalterproblem ist aber grundsätzlich unabhängig davon ob Du nun `print()`, Windows-Fenster, Tk, oder eine andere GUI verwendest. Du musst bei allen eine Zeichenkette mit dem Text übergeben und in so eine Zeichenkette die Werte hineinformatieren. Wie gesagt, bietet sich da die `format()`-Methode auf Zeichenketten an.
Python86
User
Beiträge: 8
Registriert: Donnerstag 9. Juli 2015, 09:35

@BlackJack

Sorry du hast recht.

Hier ein Beispiel das auch klappt:

Code: Alles auswählen

R=15*20

print ("Die Zahl beträgt %.2f"%(R))
Wie kann ich dieses Beispiel in einer Msgbox ausgeben?

Vielen Dank
BlackJack

@Python86: In dem Du das Ergebnis der Zeichenketteformatierung an der entsprechenden Stelle als Argument übergibst. Zum Beispiel als `message`-Argument bei einem `showinfo()`-Aufruf aus dem entsprechenden tkinter-Modul. Das ist jetzt aber wirklich *einfach*.
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Trenne mal dein Problem in zwei kleinere Probleme. In der ersten Zeile erzeugst du den kompletten Text, der (mit print oder Message Box) angezeigt werden soll. Diesen speicherst du in einer Variable. In der zweiten Zeile erst benutzt du dann diese Variable, um den gewünschten Text an sein Ziel zu übergeben. Mir scheint, an dieser Stelle geht bei dir vielleicht etwas schief. Komplizierte Probleme in kleinere und lösbare zu teilen, ist eine häufige Aufgabe beim Programmieren. Bist du wirklich 15 Jahre? Jedenfalls herzlich willkommen bei Python!
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.
Python86
User
Beiträge: 8
Registriert: Donnerstag 9. Juli 2015, 09:35

@Kebap

Nein bin 29 Jahre :-).

Ich habe es gestern hinbekommen:

Code: Alles auswählen

def Mbox(title, text, style):
    ctypes.windll.user32.MessageBoxA(0, text, title, style)

zahl1=10.1234568
zahl2=25
text=("%.2f und %i")%(zahl1,zahl2)
            
Mbox("Probe", text, 0)
Analog geht das geht es auch mit easygui. Tkinter konnte bei meiner Problemstellung leider nicht helfen

Nochmals Danke an Alle für die Tips
Antworten