Seite 1 von 1
MessageBox
Verfasst: Freitag 6. Oktober 2006, 16:00
von prof_weirdo
Hallo,
ich war mir nicht sicher in welches Forum, vermute aber das es hier passt.
Also, ich arbeite unter WinXP und habe ein Programm das Tkinter nutzt um ein Fenster zu erzeugen. Dort kann man Begriffe eingeben die in einer Liste eingetragen werden.
Folgendes Problem:
Ich möchte das wenn der User das Fenster oben in der Ecke mit dem Standard Fensterkreuz wegclickt, eine Messagebox erscheint mit der Abfrage ob der User die eben eingegebenen Daten dauerhaft speichern oder verwerfen möchte. Über Tkinter geht das ja anscheinend nicht. Ich dachte da an die WinAPI, wurde da aber noch nicht fündig, oder liege ich komplett falsch ?
Schonmal danke für alle erhellenden Kommentare

Verfasst: Freitag 6. Oktober 2006, 16:27
von murph
das geht sehr wohl mit tkinter, wie auch mit (fast?) jedem anderen gui-toolkit.
tut mir leid, dass ich nicht sagen kann, wie man das schreibt,
aber von der winAPI kannst du getrost die hände lassen

Verfasst: Freitag 6. Oktober 2006, 17:00
von prof_weirdo
Ok.
Also das es MessageBoxes bei Tkinter gibt wusste ich eigentlich auch schon. Hab mich wohl mal wieder unpräzise ausgedrückt.
Mir ist nicht so ganz klar wie ich ich das aufrufen einer Messagebox mit dem schliessen des Fensters über das Kreuz koppeln kann.
Hmm... also ansonsten fallen mir da noch Events ein, aber kann da nichts passendes finden

Verfasst: Freitag 6. Oktober 2006, 17:24
von pyStyler
Hi,
versuch mal damit etwas anzufangen.
Code: Alles auswählen
from Tkinter import *
class Demo:
def __init__( self, master):
self.master=master
self.master.geometry('200x200')
Button(self.master, text='Ok',
command=self.ok).pack(expand=YES, fill=BOTH)
self.master.protocol('WM_DELETE_WINDOW',
self.frage_datei_speichern)
self.master.mainloop()
def ok( self ):
print 'OK.....'
def frage_datei_speichern( self ):
self.dialog = Ausgang(self.master)
self.returnValue = self.dialog.showMessage('frage',
'Daten vorher speichern')
if self.returnValue:
self.master.destroy()
class Ausgang:
def __init__( self, master ):
self.fenster = Toplevel( master )
self.label = Label( self.fenster )
self.label.pack( side = TOP, fill = BOTH, expand = YES )
self.jaButton = Button(self.fenster, width=13,
text = 'Ja',
command = self.ja)
self.jaButton.pack(side = LEFT, padx=5)
self.neinButton = Button(self.fenster,
text = 'Nein',width=13,
command = self.nein)
self.neinButton.pack(side = RIGHT, padx=5)
self.fenster.protocol('WM_DELETE_WINDOW', self.nein)
def showMessage( self, title = '', message = '' ):
self.fenster.title(title)
self.label.configure( text = message )
self.booleanValue = TRUE
self.fenster.grab_set()
self.fenster.focus_set()
self.fenster.wait_window()
return self.booleanValue
def ja( self ):
self.booleanValue = TRUE
self.fenster.destroy()
def nein( self ):
self.booleanValue = TRUE
self.fenster.destroy()
root=Tk()
Demo(root)
bei Unklarheiten einfach fragen.
Gruss
pyStyler
Verfasst: Freitag 6. Oktober 2006, 17:34
von prof_weirdo
Danke
Werde ich mir morgen mal genau ansehen. Bei Fragen melde ich mich.
Verfasst: Freitag 6. Oktober 2006, 21:09
von Mawilo
So als Beispiel hätte ich folgendes anzubieten:
Code: Alles auswählen
# -*- coding: cp1252 -*-
import Tkinter as tk
import tkMessageBox as tkMB
def saveData():
if tkMB.askyesno('Daten speichern',
'Möchten Sie die ungesicherten Daten speichern?'):
print 'Daten speichern'
"""hier sollte die Funktion zum Speichern stehen und dann kann die
Funktion close() aufgerufen werden"""
else:
close()
def close():
root.destroy()
root = tk.Tk()
root.protocol('WM_DELETE_WINDOW', saveData)
frame = tk.Frame(root)
frame.pack(fill = tk.X)
closebutton = tk.Button(frame, text = 'Beenden', command = saveData)
closebutton.pack()
root.mainloop()
Ich verwende das Modul tkMessageBox. Einfach das Schließen mit WM_DELETE_WINDOW abfangen und eine Funktion ranhängen. WinAPI musst du dafür nicht erst bemühen.
Stephan
PS: sollte mal ins Tkinter-Forum verschoben werden
Verfasst: Samstag 7. Oktober 2006, 00:54
von prof_weirdo
Ja, genau das habe ich gesucht. Danke PyStyler und Stephan. Habt mir echt geholfen
