IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Comment fixer la taille des colonnes d'un tableau créé sous Qt Creator ? [QtGui]


Sujet :

PyQt Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut Comment fixer la taille des colonnes d'un tableau créé sous Qt Creator ?
    Bonjour
    j'ai un tableau crée avec Qt Creator , j'ai un problème avec l'affichage des noms des colonnes quand ils sont long ( il s'affiche qu'une partie du nom)
    avez vous une idée ?
    merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Bonjour,

    Quand tu parles de tableau tu parles de quoi exactement? C'est à dire quel widget utilises tu?

    Sinon as-tu regardé du coté de la doc de ce widget?

    Bon courage et @ bientôt

    [EDIT]
    Je viens de voir que tu dis créer ce tableau avec Qt Creator. Est-ce un widget personnalisé que tu a fais? Si c'est le cas, à mon avis c'est plus dans le forum Qt que tu trouveras de l'aide... http://www.developpez.net/forums/f37...liotheques/qt/

    Mais si c'est bien le cas, pourquoi ne pas utiliser un widget déjà existant?

    Si ce n'est pas le cas, alors nous préciser duquel il s'agit nous aidera pour te donner une réponse intéressante.

    Bon courage.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut
    voici ce code pour mieux comprendre mon probleme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    from __future__ import division
    # Python 2.7
     
    import sys
    from PyQt4 import QtCore, QtGui
     
    #############################################################################
    def prendcase(table, row, col):
        """Retourne la valeur de la case [row, col] de la table QTableWidget"""
        item = table.item(row, col)
        if item == None:
            # soit la case n'a jamais �t� initialis�e, soit elle a un widget
            if issubclass(type(table.cellWidget(row,col)), QtGui.QComboBox):
                # c'est un combobox: renvoyer la valeur affich�e
                item = table.cellWidget(row,col) 
                return unicode(item.currentText()) 
            # la case ne contient rien: renvoyer une chaine vide
            return u""
        else:
            return unicode(item.text())
     
    #############################################################################
    class Fenetre(QtGui.QWidget):
     
        # =======================================================================
        def __init__(self, parent=None):
            super(Fenetre, self).__init__(parent)
     
            # cr�er le lineEdit
            self.lineEdit = QtGui.QLineEdit(self)
     
            # cr�er le tableau
            self.tableWidget = QtGui.QTableWidget(self)
            self.tableWidget.setGeometry(QtCore.QRect(0, 30, 361, 301))
            self.nbrow, self.nbcol = 5, 3
            self.tableWidget.setRowCount(self.nbrow)
            self.tableWidget.setColumnCount(self.nbcol)
     
            # on met un combobox en [row=1, col=1]
            self.listecombo = ['toto', 'titi', 'tata', 'tutu']
            self.combo = QtGui.QComboBox()
            self.combo.addItems(self.listecombo)
            self.rowcombo, self.colcombo = 1, 1
            self.tableWidget.setCellWidget(self.rowcombo, self.colcombo, self.combo)
            item = QtGui.QTableWidgetItem()
            self.tableWidget.setHorizontalHeaderItem(0, item)
            self.tableWidget.horizontalHeaderItem(0).setText(QtGui.QApplication.translate("fenetre", "nom de la colonne numero un ", None, QtGui.QApplication.UnicodeUTF8))
     
                # lancera la m�thode saisieval � chaque changement de case
            QtCore.QObject.connect(self.tableWidget, QtCore.SIGNAL('currentCellChanged(int,int,int,int)'), self.saisieval)
     
                # lancera la m�thode saisievalder � chaque changement de contenu de case
            QtCore.QObject.connect(self.tableWidget, QtCore.SIGNAL('itemChanged(QTableWidgetItem *)'), self.saisievalder)
                #
            QtCore.QObject.connect(self.tableWidget, QtCore.SIGNAL('itemClicked(QTableWidgetItem *)'),self._itemClicked)
     
                # mettre le focus sur la case [0,0] du tableau
            self.tableWidget.setFocus()
            self.tableWidget.setCurrentCell(0, 0)
     
        # =======================================================================
        def saisieval(self, row, col, row0, col0):
            """M�thode lanc�e � chaque changement de case du tableau
               row, col = coordonn�es de la nouvelle case
               row0, col0 = coordonn�es de l'ancienne case
            """
            val = prendcase(self.tableWidget, row0, col0)
            print "valeur saisie",val
            print "row=%d, column=%d " % (
                                                       row0,col0)
            self.lineEdit.setText(val)
     
        # =======================================================================
        def saisievalder(self, item):
            """m�thode lanc�e � chaque changement de contenu en fin d'�dition"""
            row = self.tableWidget.currentRow()
            col = self.tableWidget.currentColumn()
            if row==self.tableWidget.rowCount()-1 and col==self.tableWidget.columnCount()-1:
                val = prendcase(self.tableWidget, row, col)
     
                self.lineEdit.setText(val)
     
        def _itemClicked(self, item):
            print "text=%s, row=%d, column=%d" % (
                item.text(), item.row()+1, item.column()+1) 
    #############################################################################
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        fen = Fenetre()
        fen.show()
        sys.exit(app.exec_())
    on voit que le nom de la colonne 1 n’apparait pas juste une partie du nom qui est visible

    voici l'image de l’exécution de mon code
    la colonne 1 a comme nom : nom de la colonne numero un mais y a seulement une seule partie qui est visible
    Images attachées Images attachées  

  4. #4
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Tu utilises un QTableWidget donc.
    Cet objet est dérivé de l'objet QTableView dans lequel tu peux manipuler les largeur de colonne via setColumnWidth(column, width)

    Tu trouveras beaucoup d'aide sur la doc Qt.

    Bon courage.

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Hi,

    Les headers sont des classes et ont leurs propres méthodes.

    Regardes ici:

    http://www.riverbankcomputing.co.uk/...eaderview.html

    Paragraphe 'Type Documentation'

    Un exemple d'utilisation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    from PyQt4 import QtCore, QtGui
     
    class MyTable(object):
        def __init__(self, MainWin):
            MainWin.resize(450, 380)
            self.centralwidget = QtGui.QWidget(MainWin)
            self.gridLayout = QtGui.QGridLayout(self.centralwidget)
            self.tableWidget = QtGui.QTableWidget(self.centralwidget)
            self.tableWidget.setRowCount(10)
            self.tableWidget.setColumnCount(4)
            headers = ["Title", "Long title",  "Very long title", 
                                        "Kilometric last title"]
            self.tableWidget.setHorizontalHeaderLabels(headers)
            self.tableWidget.horizontalHeader().setResizeMode(QtGui.
                                        QHeaderView.ResizeToContents)   
            self.gridLayout.addWidget(self.tableWidget, 0, 0, 1, 1)
            MainWin.setCentralWidget(self.centralwidget)
            MainWin.show()
     
     
    if __name__ == "__main__":
        import sys
        app = QtGui.QApplication(sys.argv)
        MainWindow = QtGui.QMainWindow()
        ui = MyTable(MainWindow)
        sys.exit(app.exec_())
    Tu remarqueras que les headers ne sont plus redimensionnables par l'utilisateur, pareil pour d'autres options comme 'stretch', il y a donc des choix à faire.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2011
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 297
    Points : 93
    Points
    93
    Par défaut
    Merci VinsS c'est exactement ce que je cherchais
    merci Jiyuu ta proposition marche aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     self.tableWidget.setColumnWidth(0,150)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fixer la taille des colonnes d'une QTextTable
    Par Somato dans le forum Débuter
    Réponses: 2
    Dernier message: 19/11/2008, 22h08
  2. Gridview fixer la taille des colonnes
    Par yass dans le forum ASP.NET
    Réponses: 2
    Dernier message: 27/02/2008, 02h56
  3. Réponses: 1
    Dernier message: 07/01/2008, 19h40
  4. fixer la taille des colonnes du gridview
    Par FamiDoo dans le forum ASP.NET
    Réponses: 2
    Dernier message: 19/06/2007, 14h57
  5. Comment fixer les largeurs des colonnes d'un TStrinGrid
    Par marsupilami34 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 24/08/2005, 13h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo