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





















