Hallo,
ich habe ein kleines Pogramm geschrieben, dass nichts anderes machen soll als ein paar .txt Dateien überprüfen und mir bei gegebenem Anlass das Ergebnis der Prüfung in einer tkmessagebox anzeigen.
Soll heißen: Ich möchte keine GUI im eigentlichen Sinne, kein Anwendungsfenster im Hintergrund oder sowas, nur eine einfache MessageBox, die wieder verschwindet, wenn ich OK gedrückt habe.
Mit wxWidgets war das ganze auch kein Problem, aber das ist mir für ein derart kleines Programm zu groß und ich habe gelesen, dass Tkinter wohl wesentlich kleiner sei.
Wenn ich nun eine tkmessagebox öffne, wird automatisch auch ein weiteres Anwendungsfenster geöffnet, vermutlich als parent für die msgbox, und das läuft auch noch ohne mainloop, kann also nur schwer beendet werden.
Ist das mit Tkinter überhaupt möglich oder sollte ich es anders lösen?
tkmessagebox als einziges GUI Element
-
- User
- Beiträge: 276
- Registriert: Freitag 8. Juni 2007, 08:50
- Wohnort: 84xxx Bereich
- Kontaktdaten:
sobald du ne messagebox auf"popst" kommt auch das parent fenster.
geht leider nicht anders.
was du aber machen kannst, ist dir ein eigenes tk-fenster zu machen, was du per druck auf einen Button schließen lässt
geht leider nicht anders.
was du aber machen kannst, ist dir ein eigenes tk-fenster zu machen, was du per druck auf einen Button schließen lässt
Ich habe beides schnell mal ausprobiert, easygui ist wirklich easy, aber tkinter gefällt mir optisch besser (ja wirklich)
Das zur .exe gepackte programm ist in beiden Fällen 2.5MB groß, was immer noch viel zu groß ist, aber im vergleich zu wxPython mit über 6MB schon ein großer Fortschritt
Das zur .exe gepackte programm ist in beiden Fällen 2.5MB groß, was immer noch viel zu groß ist, aber im vergleich zu wxPython mit über 6MB schon ein großer Fortschritt
@vince0815: EasyGui ist nur ein kleines Modul das Tkinter benutzt. Wo sind denn da die optischen Unterschiede, die die missfallen!?
ich habs nicht mehr genau vor augen, aber auf jeden Fall war bei easygui alles größer. Der Button, die Messagebox an sich usw. Es sah mehr nach Win 3.11 aus als nach XP. Wenn es tatsächlich auf tkinter aufsetzt ist das natürlich merkwürdig, aber dadurch wirds auch nicht schöner
Das kann schon sein! Wenn man sich den Source-Code von easygui anschgaut, werden dort die Boxen "individuell" erstellt:vince0815 hat geschrieben:ich habs nicht mehr genau vor augen, aber auf jeden Fall war bei easygui alles größer. Der Button, die Messagebox an sich usw. Es sah mehr nach Win 3.11 aus als nach XP. Wenn es tatsächlich auf tkinter aufsetzt ist das natürlich merkwürdig, aber dadurch wirds auch nicht schöner
Code: Alles auswählen
# -------------------- place the widgets in the frames -----------------------
messageWidget = Message(messageFrame, text=message, width=400)
messageWidget.configure(font=(DEFAULT_FONT_FAMILY,DEFAULT_FONT_SIZE))
messageWidget.pack(side=TOP, expand=YES, fill=X, padx='3m', pady='3m')
__put_buttons_in_buttonframe(choices)
Code: Alles auswählen
def __put_buttons_in_buttonframe(choices):
"""Put the buttons in the buttons frame
"""
global __widgetTexts, __firstWidget, buttonsFrame
__widgetTexts = {}
i = 0
for buttonText in choices:
tempButton = Button(buttonsFrame, takefocus=1, text=buttonText)
tempButton.pack(expand=YES, side=LEFT, padx='1m', pady='1m', ipadx='2m', ipady='1m')
# remember the text associated with this widget
__widgetTexts[tempButton] = buttonText
# remember the first widget, so we can put the focus there
if i == 0:
__firstWidget = tempButton
i = 1
# bind the keyboard events to the widget
tempButton.bind("<Return>", __buttonEvent)
tempButton.bind("<Button-1>", __buttonEvent)
HWK
Wenn dein Programm nur auf Windows laufen soll, dann gibts noch diese Möglichkeit:vince0815 hat geschrieben:... Das zur .exe gepackte programm ...
Code: Alles auswählen
import ctypes
ctypes.windll.user32.MessageBoxA(0, 'Message', 'Title', 0)