Home > Notizie > Centrare Widget con PyQt4

Centrare Widget con PyQt4

Ciao a tutti in questi giorni sto studiando le librerie grafiche Qt e in particolare le PyQt4 un binding per le librerie Qt in Python. Le librerie Qt permettono di scrivere programmi con una interfaccia grafica (per ora li avevo scritti solo con interfaccia testuale) che possono girare sui tre principali sistemi operativi GNU/Linux, MacOSX e Windows. A seconda del sistema operativo si possono installare in maniera diverse e per GNU/Linux sono quasi sempre incluse nei repository della distribuzione, per esempio su Archlinux si trovano nel repository extra

sudo pacman -Si pyqt
Repository : extra
Name : pyqt
Version : 4.7.4-2
URL : http://riverbankcomputing.co.uk/software/pyqt/intro
Licenses : GPL
Groups : None
Provides : pyqt4
Depends On : sip qt dbus-python
Optional Deps : phonon
python-opengl
Conflicts With : pyqt4
Replaces : pyqt4
Download Size : 2156.39 K
Installed Size : 16884.00 K
Packager : Andrea Scarpino
Architecture : i686
Build Date : Wed Jul 14 12:49:48 2010
MD5 Sum : 0424fbb3b95954eeff50ab8b0c112bed
Description : A set of Python bindings for the Qt toolkit

e si possono installare con il comando:

sudo pacman -S pyqt

In rete ci sono molti tutorial che permettono di fare i primi passi con queste librerie, io ho trovato molto interessante questo: The PyQt4 tutorial, e pian piano lo sto studiando. Un buon modo di approfondire lo studio è anche consultare di continuo la lista delle classi per capire meglio come funzionano le classi, quali parametri accettano e quali sono le opzioni possibili.

Una cosa che ho trovato molto interessante è il posizionamento della finestra principale del nostro programma che può essere imposto sia dal programmatore con delle coordinate assolute (come se fosse un piano cartesiano) sia in base alla risoluzione dello schermo su cui viene lanciata l’applicazione.
Questo è un esempio di come si possa costruire una finestra e centrarla automaticamente nello schermo, ho aggiunto direttamente al sorgente i commenti per una migliore comprensione:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import sys
# In questo modo si importa correttamente il modulo della libreria PyQt4 che gestisce
# la parte grafica. Riprendendo dal sito ufficiale "The QtGui module contains the 
# majority of the GUI classes. These include a number of table, tree and list classes 
# based on the model-view-controller design pattern. Also provided is a 
# sophisticated 2D canvas widget capable of storing thousands of items including 
#ordinary widgets."
from PyQt4 import QtGui
 
# definisco la classe che gestira' la mia finestra principale e sara' un widget
class Center(QtGui.QWidget):
    # definisco il costruttore della mia classe e dando come
    # parent = None dico che sara' la mia finestra principale
    def __init__(self, parent=None):
        # utilizzo il costruttore della classe QtGui.QWidget
        QtGui.QWidget.__init__(self, parent)
        # setto il titolo della mia finestra
        self.setWindowTitle('Finestra centrata')
        # setto la dimensione iniziale della finestra
        self.resize(250, 150)
        # chiamo il metodo center che si occupera' di posizionare la 
        # finestra al centro dello schermo, indipendetemente dalla
        # risoluzione del monitor
        self.center()
 
    # definisco il metodo center
    def center(self):
        # salvo nella variabile screen le dimensioni dello schermo, stampandola
        # si troverebbe una cosa del genere:
        # PyQt4.QtCore.QRect(0, 0, 1280, 800) 
        screen = QtGui.QDesktopWidget().screenGeometry()
        # salvo nella variabile size le dimesioni della finestra che ho creato, in
        # questo caso particolare stampandola ci verrebbe restituito:
        # PyQt4.QtCore.QRect(0, 0, 250, 150)
        size =  self.geometry()
        # muovo la finestra che ho creato nella posizione (x,y) con 
        # x = (screen.width()-size.width())/2 cioe' centrata orizzontalmente
        # y = (screen.height()-size.height())/2 cioe' centrata verticalmente
        self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)
 
 
app = QtGui.QApplication(sys.argv)
# creo una instanza della classe Center
qb = Center()
# mostro a video la finestra creata
qb.show()
# imposto la chiusura della finestra quando viene prenuta la x 
sys.exit(app.exec_())

Semplice :-)

Ciao Alberto

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)
Categorie:Notizie Tag:
  1. Nessun commento ancora...
  1. Nessun trackback ancora...
E' necessario che tu sia collegato per poter inserire un commento.