Messagebox

Fragen zu Tkinter.
Antworten
STJ
User
Beiträge: 4
Registriert: Dienstag 27. Dezember 2016, 12:40

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 ?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@STJ: wie öffnest Du denn mehrere Fenster und wie erzeugst Du die Messagebox?
BlackJack

@STJ: Die Messagebox sollte eigentlich vor dem Fenster erscheinen das als `parent` angegeben wurde. Ansonsten vor dem Hauptfenster.
STJ
User
Beiträge: 4
Registriert: Dienstag 27. Dezember 2016, 12:40

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

@STJ: Wie gesagt, man kann einer Messagebox das Fenster vor dem sie angezeigt werden soll als `parent`-Argument übergeben.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.")
STJ
User
Beiträge: 4
Registriert: Dienstag 27. Dezember 2016, 12:40

Wie kann ich die Messagebox an ein bestimmtes Fenster parenten ?
BlackJack

@STJ: In dem Du ein Schlüsselwortargument (`parent`) beim Erstellen angibst, und dem als Wert das Elternfenster übergibst.
STJ
User
Beiträge: 4
Registriert: Dienstag 27. Dezember 2016, 12:40

Sorry,

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

Bei mir wird die Messagebox in einem eigenen Programm erzeugt.
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
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@STJ: was meinst Du mit »in einem eigenen Programm«? Kannst Du etwas genauer erklären, was Du eigentlich machst?
Streifenhase1
User
Beiträge: 90
Registriert: Dienstag 22. Mai 2018, 07:15

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?
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

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 ;-)
Take it easy Mates!
Antworten