minimize to tray

Fragen zu Tkinter.
Antworten
Pythonaya
User
Beiträge: 90
Registriert: Sonntag 26. Januar 2003, 11:34
Wohnort: Großbeeren (nahe Berlin)

Hi @ all!
Ich hab mal eine Frage zum Thema Tkinter:
Wie kann ich ein Fenster zu einem kleinen Icon
neben meiner Windowsuhr (JA, ich bekenne mich schuldig: WINDOWS :roll: ) verschwinden lassen?

Hat jemand da einen Befehl?
Ich weiss, das es gehen muss...

Danke,
Florian
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Hallo!
Pythonaya hat geschrieben:Ich weiss, das es gehen muss...
Woher? Ich bin sicher, dass das Tkinter nicht leistet.
Vorstellen könnte ich mir einen Weg über die Python Win32 Extensions, mit der MFC vielleicht. Aber der Aufwand für so'n winziges Icon ... ;-)
Jan
Pythonaya
User
Beiträge: 90
Registriert: Sonntag 26. Januar 2003, 11:34
Wohnort: Großbeeren (nahe Berlin)

Hi Voges,
ich habe es in einem anderen Pythonprogramm zum torrent-downloading gesehen...

Kann sein, dass datt nich mit Python alleine geht...
aber irgendwie muss es gehen!

Hier ist die Seite von dem oben genannten Prog (ABC):
http://pingpong-abc.sourceforge.net/download.html

Ich hoffe ihr könnt mir helfen,
Florian
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Hallo!
Pythonaya hat geschrieben:Hier ist die Seite von dem oben genannten Prog (ABC):
http://pingpong-abc.sourceforge.net/download.html
Ich seh' da gar nichts von Tkinter. Auf der Homepage steht "Powered by : Python, wxPython, ...".

Jan
Pythonaya
User
Beiträge: 90
Registriert: Sonntag 26. Januar 2003, 11:34
Wohnort: Großbeeren (nahe Berlin)

lad dir einfach mal den Quellcode runter!!!
Es gibt da insgesamt 4 Prozeduren für minimize to tray...
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Hallo!
Pythonaya hat geschrieben:Es gibt da insgesamt 4 Prozeduren für minimize to tray...
Und hast Du sie Dir angeguckt? Da kommt kein Tkinter zum Einsatz. wxPython-Funktionen sind da für das Tray-Handling verantwortlich.
Jan
Pythonaya
User
Beiträge: 90
Registriert: Sonntag 26. Januar 2003, 11:34
Wohnort: Großbeeren (nahe Berlin)

Naja,
hab bisher nur Erfahrungen mit Python...
Daher hab ich den Rest nich wirklich verstanden...

Hmpf, muss mal wxpython runterladen und datt dann probieren.

Danke für die "Aufklährung" *ggg*

Florian
Patrick
User
Beiträge: 49
Registriert: Montag 5. Juli 2004, 06:35
Wohnort: Berlin
Kontaktdaten:

Gehts denn jetzt wirklich nicht so ohne weiteres?
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

hm...

du brauchst die WinAPI dazu ;)

ich hab das zwar noch nie gemacht, aber du könntest eine DLL schreiben, die das kapselt, und diese DLL von deinem python programm importieren lassen.

mfg Olf
Patrick
User
Beiträge: 49
Registriert: Montag 5. Juli 2004, 06:35
Wohnort: Berlin
Kontaktdaten:

Wie kann ich denn eine DLL-Datei importieren in python?
Es gibt ja schon genug fertige DLL-Bibliotheken.
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

na wie wohl?

Code: Alles auswählen

import MyDll
unter linux geht das übrigens auch mit .so dateien ;)

mfg Olf
Patrick
User
Beiträge: 49
Registriert: Montag 5. Juli 2004, 06:35
Wohnort: Berlin
Kontaktdaten:

So kann ich leider nicht auf die DLL-Bibliothek zugreifen.

Wie ich bereits gelesen habe, gibts dafuer auch ein DLLInterface, was ich mir bereits runtergeladen habe, aber beim Ausfuehren vermisst er das Modul calldll, was ich nirgends im Netz runterladen kann.
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

afaik muss die .dll einen gewissen aufbau haben, mit einer init funktion.

mfg Olf
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

Auf dlls kannst Du mit ctypes zugreifen.
Ein Tray-Icon kann man afaik mit Shell_NotifyIcon() aus shell32.dll erstellen.
Ganz so einfach wirds aber vermutlich nicht sein, der Teufel wird im Detail stecken. Wenn ich Zeit finde versuche ich mich auch mal daran...
Patrick
User
Beiträge: 49
Registriert: Montag 5. Juli 2004, 06:35
Wohnort: Berlin
Kontaktdaten:

Folgendermaßen habe ichs jetzt gemacht:

Code: Alles auswählen

import sys
import os
import win32con
from win32api import *
from win32gui import *
from ctypes import *

hinst =  GetModuleHandle(None)
iconPathName = "C:\Programme\Python23\Lib\img\plone.ico"
icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE
hicon = LoadImage(hinst, iconPathName, win32con.IMAGE_ICON, 0, 0, icon_flags)
flags = NIF_ICON | NIF_MESSAGE | NIF_TIP
nid = (tk, 0, flags, win32con.WM_USER+20, hicon, "Plone")
print windll.shell32.Shell_NotifyIcon(NIM_ADD,nid)
Folgende Fehlermeldung bekomme ich allerdings:
print windll.shell32.Shell_NotifyIcon(NIM_ADD,nid)
TypeError: while constructing argument 2:
Don't know how to convert parameter 2
Weiss einer, was er von mir will?
Ist doch alles schick. :?:
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

Die Struktur NOTIFYICONDATA kannst Du nicht einfach als Liste übergeben. Wie man Strukturen mit ctypes korrekt anlegt wird im Tutorial beschrieben. Ein imo wirklich hilfreiches Beispiel findet man hier. Dort wird mittels ctypes und der Windows API ein einfaches Fenster erzeugt.

Wenn wxPython zum Einsatz kommen soll (imo empfehlenswert ;) ) kann man hier ein Beispiel finden.
Antworten