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
MessageBox
-
- User
- Beiträge: 38
- Registriert: Donnerstag 2. Februar 2006, 11:27
- Wohnort: Bei Osnabrück
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
tut mir leid, dass ich nicht sagen kann, wie man das schreibt,
aber von der winAPI kannst du getrost die hände lassen
http://www.cs.unm.edu/~dlchao/flake/doom/
-
- User
- Beiträge: 38
- Registriert: Donnerstag 2. Februar 2006, 11:27
- Wohnort: Bei Osnabrück
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
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
Hi,
versuch mal damit etwas anzufangen.
bei Unklarheiten einfach fragen.
Gruss
pyStyler
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)
Gruss
pyStyler
-
- User
- Beiträge: 38
- Registriert: Donnerstag 2. Februar 2006, 11:27
- Wohnort: Bei Osnabrück
Danke
Werde ich mir morgen mal genau ansehen. Bei Fragen melde ich mich.
Werde ich mir morgen mal genau ansehen. Bei Fragen melde ich mich.
- Mawilo
- User
- Beiträge: 452
- Registriert: Sonntag 22. Februar 2004, 10:58
- Wohnort: Sachsen
- Kontaktdaten:
So als Beispiel hätte ich folgendes anzubieten:
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
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()
Stephan
PS: sollte mal ins Tkinter-Forum verschoben werden
-
- User
- Beiträge: 38
- Registriert: Donnerstag 2. Februar 2006, 11:27
- Wohnort: Bei Osnabrück
Ja, genau das habe ich gesucht. Danke PyStyler und Stephan. Habt mir echt geholfen