2012-06-15 20 views
11

Ho un'applicazione la cui GUI deve essere rifatta per motivi ergonomici. E 'stato scritto in PyGTK e mi chiedo se dovrei passare a PyQt per facilitare gli sviluppi futuri o no.Quali sono i vantaggi di PyQt su PyGTK e viceversa?

Questa applicazione ha un'interfaccia utente prevalentemente classica con pulsanti, barre degli strumenti, finestre di dialogo ecc. Ma ha anche alcuni requisiti specifici: dovrò sicuramente creare un widget personalizzato basato su treeview/tableview (per creare un widget simile a un foglio di calcolo) e questa applicazione ha molti thread di lavoro che aggiornano la GUI.

Sto cercando consigli su questi due punti:

  • Per quanto riguarda i widget personalizzati creazione, vuol PyQt fornire meccanismi meglio di PyGTK, in particolare a modificare leggermente i widget esistenti.
  • Ho avuto problemi con (anche usando correttamente thread_init() e threads_enter()) l'aggiornamento della GUI da thread di lavoro durante l'utilizzo di PyGTK. PyQt è meglio su questo punto?
+2

Bene, per prima cosa PyGTK non è più sviluppato attivamente. [PyGObject] (https://live.gnome.org/PyGObject) è apparentemente il modo di fare le cose ora. –

+0

Un aggiornamento da un thread di lavoro funziona sempre con 'gobject.idle_add'. 'threads_init' non è supportato su Windows. Questo potrebbe essere il problema? – schlamar

risposta

0

Non riesco a confrontare, perché non uso GTK, ma suggerirei Qt.

Qt ha sicuramente "treeview/tableview" di cui stai parlando e puoi rendere le "celle" i tuoi widget personalizzati (sto studiando questo argomento proprio ora). Qt è stato creato pensando molto ai thread, quindi i thread di lavoro possono utilizzare il meccanismo signal/slot con facilità. E sì, puoi modificare i widget esistenti applicando fogli di stile o sottoclassi.

Ora su PyQt, non lo consiglierei a causa di problemi di licenza. PySide mi sembra un Qt migliore → Python che mi lega: può essere usato liberamente in applicazioni commerciali e ha alcuni piccoli vantaggi nell'API (ma per il resto è completamente compatibile con PyQt).

Qt è multipiattaforma e l'implementazione delle applicazioni PySide è molto semplice con cx_Freeze; gli utenti della tua applicazione non dovranno installare nulla.

+2

Giusto per essere contrario, raccomando PyQt su Pyside perché Pyside è un progetto più recente e tende a essere un po 'più buggato in base alla mia esperienza. Le API per le due librerie sono quasi identiche, quindi non dovrebbe essere troppo difficile passare da una all'altra se si cambia idea. – Luke

+1

@Luke Cerco sempre di importare PySide' prima e su "ImportError'! Importa PyQt4' (non sono sicuro quali saranno le conseguenze della licenza), e far funzionare le mie applicazioni con Python 3 e Python 2, tutte con un codice base. –

+1

Vorrei anche raccomandare PyQt su PySide se non hai bisogno di LGPL. PyQt è un progetto molto più maturo e ha un manutentore altamente competitivo e proattivo. Ho anche scoperto che PySide è notevolmente più bacato, anche se ammetto che non l'ho usato molto di recente, quindi le cose potrebbero essere cambiate al riguardo. – ekhumoro

0

mi hanno anche esperienza con GTK, ma in grado di offrire alcune risposte comunque:

  • Qt è stato progettato da zero per essere orientato agli oggetti; quasi tutto ha un eccellente supporto per la sottoclasse. PyQt allo stesso modo.

  • Qt NON supporta esplicitamente la modifica della GUI da alcun thread diverso dal thread della GUI principale. In questo modo è probabile che si verifichino arresti anomali. Come menzionato da BlaXpirit, tuttavia, ci sono una varietà di meccanismi di comunicazione inter-thread molto semplici come il passaggio del segnale.

0

Sicuramente PyQt ... Ci sono un sacco di applicazioni avanzate ad usarlo ... Personalmente, sto usando KDE, così, GUI di anche il mio sistema utilizza Qt! Sto anche creando un'applicazione per fogli di calcolo e trovo che sia molto più facile quello che pensavo all'inizio ... Ma, BiaXpirit ha anche ragione: tranne se stai sviluppando un'applicazione open-source, forse dovresti usare PySide o qualcosa del genere else ...

0

Inoltre non ho mai usato PyGTK ma penso che le due funzionalità di Qt che sono eccezionalmente buone sono: programmazione model/view e signal/slots. Se hai bisogno di questo genere di cose, direi che vale la pena almeno leggere i documenti su di loro e confrontare i due toolkit con questo rispetto.

Il progettista è anche un risparmio di tempo. Il promotion feature --- puoi i tuoi widget personalizzati nel designer sostituendolo visivamente con qualcosa di simile, ad esempio hai implementato una vista ad albero personalizzata con le tue funzioni --- è semplicemente molto conveniente. Puoi utilizzare il designer per visualizzare una normale vista ad albero, ma quando la esporti usa la tua classe personalizzata.

I docs sono superbi.

Modifica: è possibile utilizzare direttamente i documenti Qt. Sto programmando in Python usando PySide e ci sono solo poche istanze in cui ho effettivamente bisogno di documentazione specifica. Anche se è exists.

2

Mi piace GTK +, poiché (almeno per me) sembra più bello. PyQt e le varianti (ad esempio PySide), tuttavia, hanno un set enorme di extra, tra cui un motore WebKit, un parser XML, supporto SQL e altro.

Se si desidera solo l'aspetto, direi GTK +/PyGObject. Se stai pianificando di usare qualcosa di PyQt, usa PyQt.

Come nota a margine, se si rimane con GTK +, si consiglia di eseguire l'aggiornamento a PyGObject e GTK + 3.0, poiché PyGtk + non viene più gestito.

Problemi correlati