Seite 1 von 1
tkmessagebox als einziges GUI Element
Verfasst: Donnerstag 15. November 2007, 10:51
von vince0815
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?
Verfasst: Donnerstag 15. November 2007, 11:26
von The Spirit
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
Verfasst: Donnerstag 15. November 2007, 11:30
von vince0815
gut, danke für die schnelle antwort.
ich habs ja schon fast vermutet, aber es wäre so schön einfach gewesen
ok, viel mehr code ist das eigene fenster auch nicht...
Verfasst: Donnerstag 15. November 2007, 11:32
von BlackJack
Vielleicht wäre
EasyGui eine Lösung.
Verfasst: Donnerstag 15. November 2007, 12:09
von vince0815
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
Verfasst: Donnerstag 15. November 2007, 13:13
von HWK
Du kannst das Fenster mit
verschwinden lassen.
MfG
HWK
Verfasst: Donnerstag 15. November 2007, 13:53
von BlackJack
@vince0815: EasyGui ist nur ein kleines Modul das Tkinter benutzt. Wo sind denn da die optischen Unterschiede, die die missfallen!?
Verfasst: Freitag 16. November 2007, 11:48
von vince0815
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
Verfasst: Freitag 16. November 2007, 12:40
von HWK
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
Das kann schon sein! Wenn man sich den Source-Code von easygui anschgaut, werden dort die Boxen "individuell" erstellt:
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)
und
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)
MfG
HWK
Verfasst: Donnerstag 20. Dezember 2007, 02:42
von zawupf
vince0815 hat geschrieben:... Das zur .exe gepackte programm ...
Wenn dein Programm nur auf Windows laufen soll, dann gibts noch diese Möglichkeit:
Code: Alles auswählen
import ctypes
ctypes.windll.user32.MessageBoxA(0, 'Message', 'Title', 0)