2009-11-15 6 views
12

Sto cercando informazioni sull'integrazione di alcune delle nuove funzionalità della barra delle applicazioni di Windows 7 nelle mie applicazioni PyQt.Utilizzo delle funzionalità della barra delle applicazioni di Windows 7 in PyQt

In particolare se esiste già la possibilità di utilizzare il nuovo indicatore di avanzamento (see here) e i collegamenti rapidi (www.petri.co.il/wp-content/uploads/new_win7_taskbar_features_8.gif).

Se qualcuno fosse in grado di fornire alcuni collegamenti o solo un "non ancora implementato", sarei molto grato.

Grazie mille.

risposta

23

Come detto il quark, la funzionalità non è in Qt 4.5, ma è possibile chiamare l'API di Windows direttamente da Qt. È un po 'di lavoro però.

  1. La nuova API della barra delle applicazioni viene esposta tramite COM, quindi non è possibile utilizzare ctypes.windll. È necessario creare un file .tlb per accedere alle funzioni. Ottieni la definizione dell'interfaccia per ITaskbarList da this forum post o da Windows SDK. Salvalo in un file chiamato per es. TaskbarLib.idl.

  2. Creare il file .tlb. Probabilmente avrai bisogno dell'SDK di Windows, o otterrai un compilatore IDL da qualche altra parte.

    midl TaskbarLib.idl /tlb TaskbarLib.tlb 
    
  3. Caricare il TLB (è necessario estensioni Win32 per Python, http://python.net/crew/skippy/win32/Downloads.html):

    import comtypes.client as cc 
    cc.GetModule("TaskbarLib.tlb") 
    
  4. creare l'oggetto TaskbarList. La funzione per impostare la barra di avanzamento è in ITaskbarList3 interfaccia:

    import comtypes.gen.TaskbarLib as tbl 
    taskbar = cc.CreateObject(
        "{56FDF344-FD6D-11d0-958A-006097C9A090}", 
        interface=tbl.ITaskbarList3) 
    
  5. Ora è possibile chiamare le funzioni API:

    taskbar.HrInit() 
    taskbar.SetProgressValue(self.winId(),40,100) 
    

Ecco un complete example script. Fonti: 1 2

3

Non implementato in Qt 4.5, ma viene visualizzato in the works for Qt 4.6. PyQt non eseguirà il wrapping 4.6 fino alla pubblicazione ufficiale di Qt 4.6, ma puoi giocare con lo 4.6 snapshot s oppure fare il checkout allo Qt repository e vedere se la versione C++ supporta le funzionalità che desideri. Se lo fa, PyQt 4.6 lo supporterà pure.

Aggiunto: Il numero list of 4.6 features non mostra il supporto esplicito di Windows 7, ma ciò non significa che non avrà ciò che si desidera, poiché, almeno se ho capito correttamente, è probabile che possano passare tale funzionalità nel widget esistente.

5

c'è un Qt add-on che implementa tutte le estensioni della barra delle applicazioni di Windows 7. Si chiama Q7Goodies. Viene fornito con un binding PyQt, quindi questo è probabilmente il modo più semplice per sfruttare le funzionalità di Windows 7 in PyQt.