hallo,
ich versuche mich gerade and dem taskbar beispiel auf dieser seite:
http://wiki.wxpython.org/AnotherTutoria ... f3832085e4
kapitel 11
hier wird eine klasse von dem wx.TaskBarIcon abgeleitet, die die methoden __init__ und CreatePopupMenu hat. init ist klar aber CreatePopupMenu so gar nicht. die funktion wird nie aufgerufen aber es funktioniert trotzdem. wie funktioniert das. wo krieg ich mehr infos zu dem wx.TaskBarIcon. ich moechte das bei rechtsclick ein menu aufgeht. in dem unterschiedliche projecte zur auswahl stehen. und jedes mal wenn das menu aufgeht soll das programm die entsprechende database durchgehen und die menu punkte aktualisieren.
geht sowas?
martin
taskbar icons und popup menus
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Martin!
mfg
Gerold

http://wxwidgets.org/manuals/stable/wx_ ... ricon.htmlsanostol hat geschrieben:wo krieg ich mehr infos zu dem wx.TaskBarIcon.
Natürlich. Du musst nur *CreatePopupMenu* überschreiben und darin ein neues Menü mit den Einträgen erzeugen. Dieses kannst du dann mit *PopupMenu* anzeigen lassen.sanostol hat geschrieben:ich moechte das bei rechtsclick ein menu aufgeht. [...] jedes mal wenn das menu aufgeht soll das programm die entsprechende database durchgehen und die menu punkte aktualisieren. geht sowas?
mfg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
wxTaskBarIcon::CreatePopupMenu wird aufgerufen wenn zu dem Icon ein Kontextmenu angefordert wird. Wenn ein Menu angezeigt werden soll, dann muss die Methode das `wx.Menu` liefern und wie man in dem Beispiel auf der Seite sieht, die Du verlinkt hast, kann man das Menu durchaus dynamisch erstellen.
Mehr Informationen gibt's in der Dokumentation zu wxWidgets. Die ist zwar für C++, aber die Python-Anbindung ist nur eine relativ dünne "Schicht" über der C++-API.
Mehr Informationen gibt's in der Dokumentation zu wxWidgets. Die ist zwar für C++, aber die Python-Anbindung ist nur eine relativ dünne "Schicht" über der C++-API.
naja , irgendwie klemmts noch.
das mit dem dynamisch klappt einfach nicht. da stell ich mich bloed an. wenn ich zum beispiel in der CreatePopupMenu function einen eintrag hinzufuege klappt das aber wenn ich in einem event einen eintrag hinzufuegen will klappt das nicht. gleiche gilt fuer attribute wie enable
self.StopHarvesterNow.Enable(False)
funktioniert in der CreatePopupMenu funktion aber nicht in der
def StopHarvester(self, event):
obwohl sie aufgerufen wird. nur dass der menu eintrag beim naechsten mal immernoch aktiv ist
einen verdacht hab ich ja, die funktion CreatePopupMenu wird jedesmal neu auferufen. dann muesste ich selber die werte speichern und beim aufruf der createpopupmenu funktion auswerten
das mit dem dynamisch klappt einfach nicht. da stell ich mich bloed an. wenn ich zum beispiel in der CreatePopupMenu function einen eintrag hinzufuege klappt das aber wenn ich in einem event einen eintrag hinzufuegen will klappt das nicht. gleiche gilt fuer attribute wie enable
self.StopHarvesterNow.Enable(False)
funktioniert in der CreatePopupMenu funktion aber nicht in der
def StopHarvester(self, event):
obwohl sie aufgerufen wird. nur dass der menu eintrag beim naechsten mal immernoch aktiv ist
einen verdacht hab ich ja, die funktion CreatePopupMenu wird jedesmal neu auferufen. dann muesste ich selber die werte speichern und beim aufruf der createpopupmenu funktion auswerten
Dein Verdacht ist richtig: Die Methode wird jedesmal aufgerufen wenn das Kontextmenü angefordert wird.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo sanostol!sanostol hat geschrieben:das mit dem dynamisch klappt einfach nicht.
Mache eine klare Sache daraus: Verschmeiße jedes mal das alte Menü und erstelle jedes mal ein Neues. Dann musst du dir keine Gedanken über Nebeneffekte machen.
Am Besten, du erstellst dir eine Funktion, die dir das frisch generierte Menü zurück gibt. Diese Funktion rufst du in der *CreatePopupMenu()*-Methode auf um zu einem frischen Menü zu kommen. Dieses Menü kannst du dann per *PopupMenu()* anzeigen lassen. Sobald die Methode *CreatePopupMenu()* fertig ist, wird das PopupMenü automatisch wieder zerstört. Die Zustände der einzelnen Menüeinträge kannst du dir ja irgendwo zwischenspeichern.
mfg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.