App2 rutscht nach messagebox hinter App1

Fragen zu Tkinter.
Antworten
moodsx
User
Beiträge: 4
Registriert: Sonntag 11. Mai 2008, 12:39

Hallo Community,

ich bin Lehrling was python betrifft und probiere mich zur Zeit ein wenig herum.

Habe mal eine App mit python3.1 und tkinter versucht, was soweit auch alles klappt nur ein Prob hätte ich noch:

App1 hat ein Menu über das ich die App2 aufrufe. App2 ist kompett als modul ausgelagert. Ich importiere App2 und rufe das in einer Funktion auf.

So nun zum eigentlichen Prob:

Wenn App2 gestartet ist liegt das Fenster über App1, soweit alles perfekt. Wenn jetzt in App2 irgendwo ein Fehler auftritt, fange ich den ab und reagiere darauf mittels einer Messagebox. Genau dann rutscht mir App2 hinter App1 und genau das ist mein Problem.

Kann mir dazu jemand einen Tipp geben wie ich das verhindern kann?
Danke!

EDIT:

Habe mein Problem mal anhand von einem Beispiel nachfolzogen:

p001.py:

Code: Alles auswählen

# -*- coding: utf-8 -*-
import sys, os, tkinter, tkinter.messagebox, p002
class p001:
    
    def __init__(self):
        self.fenster()

    def neuesfenster(self):
        p002.p002()
    
    def fenster(self):
        self.f = tkinter.Tk()
        self.f["height"] = 200
        self.f["width"] = 200
        self.f["border"] = 5
        self.f.title("p001")

        self.buttondatum = tkinter.Label(self.f,  text="Ein Button: ")
        self.buttondatum.place(x=50,  y=30,  anchor="nw")
        
        self.button = tkinter.Button(self.f,  text="Button", command=self.neuesfenster)
        self.button.place(x=50,  y=50,  anchor="nw")
        
        self.f.mainloop()

app = p001()
p002.py:

Code: Alles auswählen

# -*- coding: utf-8 -*-
import sys, os, tkinter, tkinter.messagebox
class p002():
    
    def __init__(self):
        self.fensterneu()

    def ende(self):
        self.fneu.destroy()

    def message(self):
        tkinter.messagebox.showinfo("Info", "Bla Bla Bla")
            
    def fensterneu(self):
        self.fneu = tkinter.Tk()
        self.fneu["height"] = 200
        self.fneu["width"] = 200
        self.fneu["border"] = 5
        self.fneu.title("p002")

        self.buttondatum = tkinter.Label(self.fneu,  text="Ein Button: ")
        self.buttondatum.place(x=50,  y=30,  anchor="nw")
        
        self.button = tkinter.Button(self.fneu,  text="Button", command=self.ende)
        self.button.place(x=50,  y=50,  anchor="nw")

        self.message()
        
        self.fneu.mainloop()
        

Hoffe Ihr könnt damit was anfangen und mir helfen.
BlackJack

@moodsx: Es darf zur Laufzeit maximal ein Exemplar von `tkinter.Tk` existieren. Wenn Du weitere Fenster neben dem Hauptfenster aufmachen willst, dann musst Du dafür `tkinter.Toplevel` verwenden.

So wie Du's jetzt machst, kann im Grunde alles passieren, von komischem Verhalten der GUI bis zum Programmabsturz.
moodsx
User
Beiträge: 4
Registriert: Sonntag 11. Mai 2008, 12:39

Ich danke Dir!

Das war genau das was ich gesucht habe.

Wenn man dann noch den Focus setzt klappt das wunderbar. :wink:
Antworten