Besonderheiten der messagebox

Fragen zu Tkinter.
jake-the-snake

Besonderheiten der messagebox

Beitragvon jake-the-snake » Montag 22. Januar 2018, 11:07

Hallo Forum

Ich habe mal ein paar Tests mit dem widget messagebox gemacht. In der Regel ist die Box immer im Vordergrund und stoppt normal den Programmablauf für die Erscheinungsdauer, bzw. bis auf einen Knopf gedrückt wird.

Das habe ich mit Toplevel-Fenster noch nicht hinbekommen.
Gibt es denn keine Möglichkeit, eine messagebox ohne Knöpfe aufzurufen. So wie die showinfo-Variante, nur eben ohne Knöpfe. Diese müsste dann ein paar Sekunden stehen bleiben und sich dannach wieder in Luft auflösen. Wo ist überhaupt der Programmcode der messagebox abgelegt. Kommt man da an das Modul ran?

Gruss jts
Benutzeravatar
wuf
User
Beiträge: 1368
Registriert: Sonntag 8. Juni 2003, 09:50

Re: Besonderheiten der messagebox

Beitragvon wuf » Dienstag 23. Januar 2018, 08:48

Hi jake-the-snake

Kannst du einmal das folgende Skript bei dir ausprobieren?:
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. from functools import partial
  5.  
  6. try:
  7.     # Tkinter for Python 2.xx
  8.     import Tkinter as tk
  9. except ImportError:
  10.     # Tkinter for Python 3.xx
  11.     import tkinter as tk
  12.  
  13. APP_TITLE = "Custom Messagebox"
  14. APP_XPOS = 100
  15. APP_YPOS = 100
  16. APP_WIDTH = 300
  17. APP_HEIGHT = 200
  18.  
  19.        
  20. class Application(tk.Tk):
  21.  
  22.     def __init__(self):
  23.         tk.Tk.__init__(self)
  24.         self.title(APP_TITLE)
  25.    
  26.     def build(self):
  27.         self.protocol("WM_DELETE_WINDOW", self.close_app)
  28.         self.geometry("+{}+{}".format(APP_XPOS, APP_YPOS))
  29.         self.geometry("{}x{}".format(APP_WIDTH, APP_HEIGHT))
  30.         self.option_add("*Button.highlightThickness", 0)
  31.  
  32.         # Trial container-01
  33.         self.app_container_01 = tk.Frame(self, bg='yellow', bd=0)
  34.         self.app_container_01.pack(side='left', fill='both', expand=True)
  35.         tk.Button(self.app_container_01, text='Show my Messagebox',
  36.             command=self.my_msg_box).pack(expand=True)
  37.    
  38.     def my_msg_box(self):
  39.         msg_win = tk.Toplevel()
  40.         label = tk.Label(msg_win, text="My Messagebox!", font=18)
  41.         label.pack(expand=True, padx=40, pady=20)
  42.         msg_win.transient(self)
  43.         msg_win.grab_set()
  44.            
  45.     def close_app(self):
  46.         # Here do something before apps shutdown
  47.         print("Good Bye!")
  48.         self.destroy()
  49.  
  50.        
  51. def main():        
  52.     app = Application()
  53.     app.build()
  54.     app.mainloop()
  55.  
  56.    
  57. if __name__ == '__main__':
  58.     main()      
Gruss wuf :wink:
Take it easy Mates!
jake-the-snake

Re: Besonderheiten der messagebox

Beitragvon jake-the-snake » Dienstag 23. Januar 2018, 16:08

Hallo wuf

Habe es ausprobiert. Musste am Kopf des Skriptes ein paar Abänderungen durchführen, sonst lief es nicht:

  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3.      
  4. # Tkinter for Python 3.xx
  5. import tkinter as tk
  6.      
  7. APP_TITLE = "Custom Messagebox"
  8. APP_XPOS = 100
  9. APP_YPOS = 100
  10. APP_WIDTH = 300
  11. APP_HEIGHT = 200


Die try-Geschichte musste ich entfernen, weil die Fehler warfen, da die Module alle über pyton3 installiert sind.
Das Programm habe ich getestet. Also können Messageboxen ohne Buttons erstellt werden. Leider bleibt das Grundproblem.
Steht der mainloop - kann keine Notfallbox geöffnet werden.

Ist denn Grundsätzlich immer nur eine mainloop möglich?

Gruss jts
Sirius3
User
Beiträge: 7052
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Besonderheiten der messagebox

Beitragvon Sirius3 » Dienstag 23. Januar 2018, 16:13

@jake-the-snake: das entscheidende ist `grab_set`, das verhindert, dass man in andere Fenster wechseln kann. Wie man das grundsätzliche Problem angehen kann, haben wir Dir glaube ich jetzt schon tausendmal gesagt. Das mit *-Importen auch. Irgendwie sehe ich nicht, dass Du irgendwelche Fortschritte machst.
Benutzeravatar
__deets__
User
Beiträge: 2155
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: Besonderheiten der messagebox

Beitragvon __deets__ » Dienstag 23. Januar 2018, 16:31

jake-the-snake hat geschrieben:Ist denn Grundsätzlich immer nur eine mainloop möglich?


Hatten wir doch schon: viewtopic.php?f=18&t=42046&p=320845#p320828

GUIs sind EREIGNISBASIERT. Ereignisse sind Tastendruecke, Mausbewegungen, Klicks, Timer (erzeugt durch after) und andere IO. Ereignisse werden nur durch betreten des mainloop abgefragt, und wie ich schon schrieb, zumindest mal in Tkinter gibt es davon nur genau einen.
jake-the-snake

Re: Besonderheiten der messagebox

Beitragvon jake-the-snake » Dienstag 23. Januar 2018, 17:17

Hallo Forum

Ist ja gut... wenn auch nicht befriedigend!

Das ganze Konzept mit der GUI...
Zu C64 Zeiten konnte man jeden verdammten einzelnen Bildpunkt ansprechen - zu jeder Zeit, überall im Programm...
Zugegeben, war halt Handarbeit - dafür hatte man das dann so, wie man es wollte. Die Zuzählgeschichte wegen zu kleiner Bytewerte (Bildschirmbreite) mal ausgenommen.

Tja... Bleibt nur noch ein Insider-Wintergedicht:
--------------------------------------------------------------------

Ist's im Winter kalt und schneit's -
Vermisst der Programmierer Bobs and Sprites !

Im Radio lief noch En Vogue -
Im Programm nutzte man Peek and Poke !

War man müde, hieß es Gut' Nacht -
Mit SYS sechs, vier, sieben, drei und Acht !

--------------------------------------------------------------------

Alles klar, Danke für die Hilfe - alles gut!

Gruss jts
Benutzeravatar
__deets__
User
Beiträge: 2155
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: Besonderheiten der messagebox

Beitragvon __deets__ » Dienstag 23. Januar 2018, 17:22

Kannst du auch alles heute noch machen. Es war deine Entscheidung, tkinter zu benutzen. Wenn du mehr Kontrolle ueber einzelne Pixel und die Ereignisverarbeitung willst, nimm halt pygame. Aber Sinn und Zweck von tkinter sind eben nicht Anwendungen deiner Art, sondern deutlich komplexere UIs. Wobei auch du schon mit deinen Textboxen vieles nutzt, was du mit peek und poke erstmal zusammengestoppelt bekommen musst.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder