tkmessagebox als einziges GUI Element

Fragen zu Tkinter.
Antworten
vince0815
User
Beiträge: 4
Registriert: Donnerstag 15. November 2007, 10:38

Donnerstag 15. November 2007, 10:51

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?
The Spirit
User
Beiträge: 274
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

Donnerstag 15. November 2007, 11:26

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
vince0815
User
Beiträge: 4
Registriert: Donnerstag 15. November 2007, 10:38

Donnerstag 15. November 2007, 11:30

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...
BlackJack

Donnerstag 15. November 2007, 11:32

Vielleicht wäre EasyGui eine Lösung.
vince0815
User
Beiträge: 4
Registriert: Donnerstag 15. November 2007, 10:38

Donnerstag 15. November 2007, 12:09

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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Donnerstag 15. November 2007, 13:13

Du kannst das Fenster mit

Code: Alles auswählen

root=Tk()
root.withdraw()
verschwinden lassen.
MfG
HWK
BlackJack

Donnerstag 15. November 2007, 13:53

@vince0815: EasyGui ist nur ein kleines Modul das Tkinter benutzt. Wo sind denn da die optischen Unterschiede, die die missfallen!?
vince0815
User
Beiträge: 4
Registriert: Donnerstag 15. November 2007, 10:38

Freitag 16. November 2007, 11:48

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 :)
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Freitag 16. November 2007, 12:40

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
zawupf
User
Beiträge: 1
Registriert: Donnerstag 20. Dezember 2007, 02:26

Donnerstag 20. Dezember 2007, 02:42

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)
Antworten