Seite 1 von 1

Messagebox

Verfasst: Dienstag 27. Dezember 2016, 12:45
von STJ
Ich habe einmal eine Frage.

Bin gerade am Programmieren eines aufwendigeren Programm und bin auf ein Problem mit der Messagebox gestoßen.

Wenn man mehrere Fenster öffnet und dann eine Messagebox aufmacht ist sie immer erst zu finden wenn ich alle bis auf das letzte Fenster geschlossen habe.

Darum Frage ich ob es einen Befehl gibt mit dem man die Messagebox immer in den Vordergrund geben kann ?

Re: Messagebox

Verfasst: Dienstag 27. Dezember 2016, 12:50
von Sirius3
@STJ: wie öffnest Du denn mehrere Fenster und wie erzeugst Du die Messagebox?

Re: Messagebox

Verfasst: Dienstag 27. Dezember 2016, 12:53
von BlackJack
@STJ: Die Messagebox sollte eigentlich vor dem Fenster erscheinen das als `parent` angegeben wurde. Ansonsten vor dem Hauptfenster.

Re: Messagebox

Verfasst: Mittwoch 28. Dezember 2016, 11:36
von STJ
Ich mache

from tkinter import messagebox
.
.
.
.
messagebox.showinfo("Message",string)


Ich möchte die Messagebox ja nicht nur vor dem Hauptfenster angezeigt haben sondern vor allen Fenstern wie funktioniert das ?

Re: Messagebox

Verfasst: Mittwoch 28. Dezember 2016, 15:29
von BlackJack
@STJ: Wie gesagt, man kann einer Messagebox das Fenster vor dem sie angezeigt werden soll als `parent`-Argument übergeben.

Re: Messagebox

Verfasst: Mittwoch 28. Dezember 2016, 22:06
von Sirius3
@STJ: bei mir wird die Messagebox über alle Fenster gelegt. Aber vielleicht ist das ja unter Windows anders:

Code: Alles auswählen

import tkinter
from tkinter import messagebox

root = tkinter.Tk()
many_windows = [tkinter.Toplevel(root) for _ in range(10)]
messagebox.showinfo("ich bin ganz oben.")

Re: Messagebox

Verfasst: Donnerstag 29. Dezember 2016, 10:08
von STJ
Wie kann ich die Messagebox an ein bestimmtes Fenster parenten ?

Re: Messagebox

Verfasst: Donnerstag 29. Dezember 2016, 10:58
von BlackJack
@STJ: In dem Du ein Schlüsselwortargument (`parent`) beim Erstellen angibst, und dem als Wert das Elternfenster übergibst.

Re: Messagebox

Verfasst: Donnerstag 29. Dezember 2016, 13:53
von STJ
Sorry,

Aber ich verstehe nicht wie ich parent als schlüsselwort übergeben kann

Bei mir wird die Messagebox in einem eigenen Programm erzeugt.

Re: Messagebox

Verfasst: Donnerstag 29. Dezember 2016, 14:38
von BlackJack
@STJ: Einfach beim Aufruf übergeben. Vielleicht zur Auffrischung noch mal den Abschnitt zu Schlüsselwort-Argumenten im Python-Tutorial lesen: https://docs.python.org/2/tutorial/cont ... -arguments

Re: Messagebox

Verfasst: Freitag 30. Dezember 2016, 17:08
von Sirius3
@STJ: was meinst Du mit »in einem eigenen Programm«? Kannst Du etwas genauer erklären, was Du eigentlich machst?

Re: Messagebox

Verfasst: Freitag 15. Juni 2018, 08:29
von Streifenhase1
Hallo
Um nicht ein neues Thema auf zu machen, nutze ich gleich dieses.

Ich habe das Problem das wenn die Messagbox im Hintergrund öffnet, wenn ich das Programm im Rahmenlosen Vollbild laufen lasse.

Wenn ich das Programm im Fenstermodus laufen lasse funktioniert es das es im Vordergrund erscheint

Jemand einen Tip?

Re: Messagebox

Verfasst: Freitag 15. Juni 2018, 09:36
von wuf
Hi Streifenhase1

Wie funktioniert das?: (Nur unter Ubuntu 18.04 getestet)

Code: Alles auswählen

from functools import partial
import tkinter as tk
from tkinter import messagebox

APP_TITLE = "Messagebox on fullscreen"
APP_XPOS = 100
APP_YPOS = 100
APP_WIDTH = 350
APP_HEIGHT = 200


class Application(tk.Frame):

    def __init__(self, master):
        self.master = master
        tk.Frame.__init__(self, master)

        tk.Button(self, text="Beenden", command=self.master.destroy).pack(
            side='left')
        tk.Button(self, text="Show Messagebox", command=self.open_messagebox
            ).pack(side='left')
    def open_messagebox(self):
        
        messagebox.askyesno("Titel", "Möchtest du das Fenster öffnen ?")

               
def main():
    app_win = tk.Tk()
    app_win.title(APP_TITLE)
    #app_win.geometry("+{}+{}".format(APP_XPOS, APP_YPOS))
    app_win.geometry("{}x{}".format(APP_WIDTH, APP_HEIGHT))
    app_win.attributes('-zoomed', True)
    
    app = Application(app_win)
    app.pack(expand=True)
    
    app_win.mainloop()
 
 
if __name__ == '__main__':
    main()
Gruss wuf ;-)