Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 允许在QComboBox中水平滚动_Python_Pyqt4_Scrollbar_Qcombobox - Fatal编程技术网

Python 允许在QComboBox中水平滚动

Python 允许在QComboBox中水平滚动,python,pyqt4,scrollbar,qcombobox,Python,Pyqt4,Scrollbar,Qcombobox,是否可以添加一个水平滚动条,以便能够将项目滚动到行的末尾,同时保持组合框的尺寸与我的消息中所附的屏幕截图相同?如果是,怎么做 相关方的代码: def ajouter_eval(self) : ''' ''' # Liste des compétences travaillées en classe de 6ème liste_c_t_6e = [u"Faites le choix de votre item ici.", u"(E1) Choisir, organ

是否可以添加一个水平滚动条,以便能够将项目滚动到行的末尾,同时保持组合框的尺寸与我的消息中所附的屏幕截图相同?如果是,怎么做

相关方的代码:

def ajouter_eval(self) :
    '''
    '''
    # Liste des compétences travaillées en classe de 6ème
    liste_c_t_6e = [u"Faites le choix de votre item ici.", u"(E1) Choisir, organiser et mobiliser des gestes, des outils et des matériaux en fonction des effets qu'ils produisent.", \
    u"(E2) Représenter le monde environnant ou donner forme à son imaginaire en explorant divers domaines (dessin, collage, modelage, sculpture, photographie, vidéo...).", \
    u"(E3) Rechercher une expression personnelle en s'éloignant des stéréotypes.", u"(E4) Intégrer l'usage des outils informatiques de travail de l'image et de recherche d'information, au service de la pratique  plastique.", \
    u"(P1) Identifier les principaux outils et compétences nécessaires à la réalisation d'un projet artistique.", u"(P2) Se repérer dans les étapes de la réalisation d'une production plastique individuelle ou collective, anticiper les difficultés éventuelles.", \
    u"(P3) Identifier et assumer sa part de responsabilité dans un processus coopératif de création.", u"(P4) Adapter son projet en fonction des contraintes de réalisation et de la prise en compte du spectateur.", \
    u"(A1) Décrire et interroger à l'aide d'un vocabulaire spécifique ses productions plastiques, celles de ses pairs et des oeuvres d'art étudiées en classe.", \
    u"(A2) Justifier des choix pour rendre compte du cheminement qui conduit de l'intention à la réalisation.", \
    u"(A3) Formuler une expression juste de ses émotions, en prenant appui sur ses propres réalisations plastiques, celles des autres élèves et des oeuvres d'art.", \
    u"(R1) Repérer, pour les dépasser, certains a priori et stéréotypes culturels et artistiques.", \
    u"(R2) Identifier quelques caractéristiques qui inscrivent une oeuvre d'art dans une aire géographique ou culturelle et dans un temps historique, contemporain, proche ou lointain.", \
    u"(R3) Décrire des oeuvres d'art, en proposer une compréhension personnelle argumentée."]
    # Liste des compétences travaillées pour les classes de 5ème, 4ème et 3ème
    liste_c_t_5e4e3e = [u"Faites le choix de votre item ici.", u"(E1) Choisir, mobiliser et adapter des langages et des moyens plastiques variés en fonction de leurs effets dans une intention artistique en restant attentif à l'inattendu.", \
    u"(E2) S'approprier des questions artistiques en prenant appui sur une pratique artistique et réflexive.", u"(E3) Recourir à des outils numériques de captation et de réalisation à des fins de création artistique.", \
    u"(E4) Explorer l'ensemble des champs de la pratique plastique et leurs hybridations, notamment avec les pratiques numériques.", \
    u"(E5) Prendre en compte les conditions de la réception de sa production dès la démarche de création, en prêtant attention aux modalités de sa présentation, y compris numérique.", u"(E6) Exploiter des informations et de la documentation, notamment iconique, pour servir un projet de création.", \
    u"(P1) Concevoir, réaliser, donner à voir des projets artistiques, individuels ou collectifs.", u"(P2) Mener à terme une production individuelle dans le cadre d'un projet accompagné par le professeur.", \
    u"(P3) Se repérer dans les étapes de la réalisation d'une production plastique et en anticiper des difficultés éventuelles.", u"(P4) Faire preuve d'autonomie, d'initiative, de responsabilité, d'engagement et d'esprit critique dans la conduite d'un projet artistique.", \
    u"(P5) Confronter intention et réalisation dans la conduite d'un projet pour l'adapter et le réorienter, s'assurer de la dimension artistique de celui-ci.", \
    u"(A1) Dire avec un vocabulaire approprié ce que l'on fait, ressent, imagine, observe, analyse; s'exprimer pour soutenir des intentions artistiques ou une interprétation d'oeuvre.", u"(A2) Établir des liens entre son propre travail, les oeuvres rencontrées ou les démarches observées.", \
    u"(A3) Expliciter la pratique individuelle ou collective, écouter et accepter les avis divers et contradictoires.", u"(A4) Porter un regard curieux et avisé sur son environnement artistique et culturel, proche et lointain, notamment sur la diversité des images fixes et animées, analogiques et numériques.", \
    u"(R1) Reconnaître et connaître des oeuvres de domaines et d'époques variés appartenant au patrimoine national et mondial, en saisir le sens et l'intérêt.", \
    u"(R2) Identifier des caractéristiques (plastiques, culturelles, sémantiques, symboliques) inscrivant une oeuvre d'art dans une aire géographique ou culturelle et dans un temps historique.", u"(R3) Proposer et soutenir l'analyse et l'interprétation d'une oeuvre.", \
    u"(R4) Interroger et situer oeuvres et démarches artistiques du point de vue de l'auteur et de celui du spectateur.", u"(R5) Prendre part au débat suscité par le fait artistique."]
    # Liste des items du domaine du socle
    liste_items_socle = [u"Faites le choix de votre item ici.", u"(D1-1-1-1) Comprendre, s'exprimer en utilisant la langue française à l'écrit et à l'oral > Parler/communiquer/écouter", u"(D1-1-1-2) Comprendre, s'exprimer en utilisant la langue française à l'écrit et à l'oral > Lire", \
    u"(D1-1-1-3) Comprendre, s'exprimer en utilisant la langue française à l'écrit et à l'oral > Ecrire", u"(D1-1-1-4) Comprendre, s'exprimer en utilisant la langue française à l'écrit et à l'oral > Utiliser les règles de la langue", \
    u"(D1-1-1-5) Comprendre, s'exprimer en utilisant la langue française à l'écrit et à l'oral > Apprendre les origines de la langue française", u"(D1-2-2-1) Comprendre, s'exprimer en utilisant une langue étrangère et, les cas échéant, une langue régionale > Pratiquer deux langues", \
    u"(D1-2-2-2) Comprendre, s'exprimer en utilisant une langue étrangère et, les cas échéant, une langue régionale > Comprendre, s'exprimer en langue étrangère", u"(D1-2-2-3) Comprendre, s'exprimer en utilisant une langue étrangère et, les cas échéant, une langue régionale > Dialoguer en langue étrangère" \
    u"(D1-2-2-4) Comprendre, s'exprimer en utilisant une langue étrangère et, les cas échéant, une langue régionale > Adapter le niveau de langue étrangère à la situation", u"(D1-2-2-5) Comprendre, s'exprimer en utilisant une langue étrangère et, les cas échéant, une langue régionale > Communiquer dans le quotidien en langue étrangère", \
    u"(D1-3-3-1) Comprendre, s'exprimer en utilisant les langages mathématiques, scientifiques et informatiques > Utiliser système décimal et langages formels", u"(D1-3-3-2) Comprendre, s'exprimer en utilisant les langages mathématiques, scientifiques et informatiques > Lire les plans, se repérer sur des cartes", \
    u"(D1-3-3-3) Comprendre, s'exprimer en utilisant les langages mathématiques, scientifiques et informatiques > Produire et utiliser des représentations", u"(D1-3-3-4) Comprendre, s'exprimer en utilisant les langages mathématiques, scientifiques et informatiques > Savoir les utilisations des langages informatiques", \
    u"(D1-3-3-5) Comprendre, s'exprimer en utilisant les langages mathématiques, scientifiques et informatiques > Connaître les principes d'algorithmique et de programmation", u"(D1-3-3-6) Comprendre, s'exprimer en utilisant les langages mathématiques, scientifiques et informatiques > Créer des applications simples", \
    u"(D1-4-4-1) Comprendre, s'exprimer en utilisant les langages des arts et du corps > S'exprimer et communiquer par les arts", u"(D1-4-4-2) Comprendre, s'exprimer en utilisant les langages des arts et du corps > Connaître, comprendre les langages artistiques utilisés", \
    u"(D1-4-4-3) Comprendre, s'exprimer en utilisant les langages des arts et du corps > S'exprimer par des activités, physiques, sportives ou artistiques", u"(D2-1-1) Organisation du travail personnel > Anticiper/gérer/mémoriser/planifier", \
    u"(D2-1-2) Organisation du travail personnel > Comprendre des consignes", u"(D2-1-3) Organisation du travail personnel > Mettre en oeuvre les capacités essentielles", u"(D2-1-4) Organisation du travail personnel > Identifier et résoudre un problème", \
    u"(D2-1-5) Organisation du travail personnel > Se constituer des outils personnels", u"(D2-2-1) Coopération et réalisation de projets > Travailler en équipe", u"(D2-2-2) Coopération et réalisation de projets > Gérer un projet", u"(D2-2-3) Coopération et réalisation de projets > Savoir que l'école est un lieu des savoirs", \
    u"(D2-2-4) Coopération et réalisation de projets > Utiliser des outils numériques", u"(D2-3-1) Médias, démarches de recherche et de traitement de l'information > Histoire de l'écrit, modes de production de l'image", u"(D2-3-2) Médias, démarches de recherche et de traitement de l'information > Utiliser des outils de recherche", \
    u"(D2-3-3) Médias, démarches de recherche et de traitement de l'information > Traiter les informations collectées, organiser, mémoriser", ]

    #
    r = len(self.liste_compet_travail_socle_eval)
    #if r >= 0 : self.label_annonce_vocab.hide()
    # Création du combo pour sélection des compétences travaillées
    self.dico_combo_compet_travail[r] = QComboBox()
    self.dico_combo_compet_travail[r].setMaximumWidth(250)
    self.dico_combo_compet_travail[r].setMinimumWidth(250)
    # Création du QTextEdit
    self.dico_traduc_compet_travail[r] = QTextEdit()
    self.dico_traduc_compet_travail[r].setMaximumWidth(280)
    self.dico_traduc_compet_travail[r].setMinimumWidth(280)
    self.dico_traduc_compet_travail[r].setMaximumHeight(54)
    self.dico_traduc_compet_travail[r].setMinimumHeight(54)
    # Création du combo pour sélection du domaine du socle
    self.dico_domaines_du_socle[r] = QComboBox()
    self.dico_domaines_du_socle[r].setMaximumWidth(240)
    self.dico_domaines_du_socle[r].setMinimumWidth(240)
    # ------------------------------
    self.dico_domaines_du_socle[r].addItems(liste_items_socle)
    # ------------------------------
    # Création des spinbox
    self.dico_spinbox_pts_chiffres[r] = QSpinBox()
    self.dico_spinbox_pts_chiffres[r].setRange(0, 60)
    # ------------------------------
    # Conditions de remplissage du combo (cycle 3 ou cycle 4) 
    # pour les compétences travaillées
    # ------------------------------
    # Si le niveau de classe (self.classe à 0) n'est pas sélectionné, une boîte de dialogue nous en informe
    if self.classe == 0 :
        message = QMessageBox.warning(self, u'Message', u"Vous devez sélectionner un niveau de classe avant de continuer !!!", QMessageBox.Ok)
    elif self.classe == u'6' :
        self.dico_combo_compet_travail[r].addItems(liste_c_t_6e)
    elif self.classe in [u'5', u'4', u'3']: 
        self.dico_combo_compet_travail[r].addItems(liste_c_t_5e4e3e)
    # ------------------------------
    # Répartition dans la grille
    self.grille_3_stack_6.addWidget(self.dico_combo_compet_travail[r], r, 0)
    self.grille_3_stack_6.addWidget(self.dico_traduc_compet_travail[r], r, 1)
    self.grille_3_stack_6.addWidget(self.dico_domaines_du_socle[r], r, 2)
    self.grille_3_stack_6.addWidget(self.dico_spinbox_pts_chiffres[r], r, 3)
    # Ecriture des n°s de lignes
    self.dico_traduc_compet_travail[r].setText(str(r+1)+'. ')

    # Les données sont introduites dans une liste
    self.liste_compet_travail_socle_eval.append([self.dico_combo_compet_travail[r], self.dico_traduc_compet_travail[r], self.dico_domaines_du_socle[r], self.dico_spinbox_pts_chiffres[r]])

def supprimer_eval(self) :
    '''
    '''
    row = len(self.liste_compet_travail_socle_eval) - 1
    if row >= 0:
        for column in range(self.grille_3_stack_6.columnCount()):
            item = self.grille_3_stack_6.itemAtPosition(row, column)
            if item is not None:
                item.widget().deleteLater()
        del self.liste_compet_travail_socle_eval[row]
        del self.dico_combo_compet_travail[row]
        del self.dico_traduc_compet_travail[row]
        del self.dico_domaines_du_socle[row]
        del self.dico_spinbox_pts_chiffres[row]
完整的代码在这里:

界面的屏幕截图:

当前代码根本没有经过优化,它仍然是一个文件的形式

编辑:

谢谢你的回答,但是还有一个问题。请看附带的屏幕截图:

编辑2:

它工作得很好,Ekhumaro

以下是我还为这些项目添加了工具提示的代码:

def ajouter_eval(self) :
    '''
    '''
    # Liste des compétences travaillées en classe de 6ème
    liste_c_t_6e = [u"(E1) Choisir, organiser et mobiliser des gestes, des outils et des matériaux en fonction des effets qu'ils produisent.", ...] 
    # Liste des compétences travaillées pour les classes de 5ème, 4ème et 3ème
    liste_c_t_5e4e3e = [u"(E1) Choisir, mobiliser et adapter des langages et des moyens plastiques variés en fonction de leurs effets dans une intention artistique en restant attentif à l'inattendu.", ...]
    # Liste des items du domaine du socle
    liste_items_socle = [u"(D1-1-1-1) Comprendre, s'exprimer en utilisant la langue française à l'écrit et à l'oral > Parler/communiquer/écouter", ...]
    #
    r = len(self.liste_compet_travail_socle_eval)
    # Création du combo pour sélection des compétences travaillées
    self.dico_combo_compet_travail[r] = QComboBox()
    # Les items de la combo sont affichés avec une barre de défilement
    # horizontale afin que tous les items ne soient pas tronqués dans la combo
    # ------------------------------
    # Un grand merci à ekhumoro pour la solution trouvée, à voir ici :
    # https://stackoverflow.com/questions/47569433/allow-horizontal-scrolling-in-a-qcombobox
    # ------------------------------
    vue_1 = QListView(self.dico_combo_compet_travail[r])
    self.dico_combo_compet_travail[r].setView(vue_1)
    vue_1.setTextElideMode(Qt.ElideNone)
    vue_1.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
    # ------------------------------
    # Dimensionnement de la combo
    self.dico_combo_compet_travail[r].setMaximumWidth(250)
    self.dico_combo_compet_travail[r].setMinimumWidth(250)
    # Création du QTextEdit
    self.dico_traduc_compet_travail[r] = QTextEdit()
    self.dico_traduc_compet_travail[r].setMaximumWidth(280)
    self.dico_traduc_compet_travail[r].setMinimumWidth(280)
    self.dico_traduc_compet_travail[r].setMaximumHeight(54)
    self.dico_traduc_compet_travail[r].setMinimumHeight(54)
    # Création du combo pour sélection du domaine du socle
    self.dico_domaines_du_socle[r] = QComboBox()
    # Voir commentaires plus haut ...
    # ------------------------------
    vue_2 = QListView(self.dico_domaines_du_socle[r])
    self.dico_domaines_du_socle[r].setView(vue_2)
    vue_2.setTextElideMode(Qt.ElideNone)
    vue_2.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
    # ------------------------------
    # Dimensionnement de la combo
    self.dico_domaines_du_socle[r].setMaximumWidth(240)
    self.dico_domaines_du_socle[r].setMinimumWidth(240)
    # ------------------------------
    self.dico_domaines_du_socle[r].addItems(liste_items_socle)
    # ------------------------------
    # Création des spinbox
    self.dico_spinbox_pts_chiffres[r] = QSpinBox()
    self.dico_spinbox_pts_chiffres[r].setRange(0, 60)
    # ------------------------------
    # Conditions de remplissage du combo (cycle 3 ou cycle 4) 
    # pour les compétences travaillées
    # ------------------------------
    # Si le niveau de classe (self.classe à 0) n'est pas sélectionné, une boîte de dialogue nous en informe
    if self.classe == 0 :
        message = QMessageBox.warning(self, u'Message', u"Vous devez sélectionner un niveau de classe avant de continuer !!!", QMessageBox.Ok)
    elif self.classe == u'6' :
        self.dico_combo_compet_travail[r].addItems(liste_c_t_6e)
        # ------------------------------
        # ToolTips sur les items de la combo des compétences travaillées en 6ème (cycle 3)
        for ct_6_1, ct_6_2 in enumerate(liste_c_t_6e) :
            self.dico_combo_compet_travail[r].setItemData(ct_6_1, ct_6_2, Qt.ToolTipRole)
        # ------------------------------
    elif self.classe in [u'5', u'4', u'3']: 
        self.dico_combo_compet_travail[r].addItems(liste_c_t_5e4e3e)
        # ------------------------------
        # ToolTips sur les items de la combo des compétences travaillées en 5ème, 4ème et 3ème (cycle 4)
        for ct_543_1, ct_543_2 in enumerate(liste_c_t_5e4e3e) :
            self.dico_combo_compet_travail[r].setItemData(ct_543_1, ct_543_2, Qt.ToolTipRole)
    # ------------------------------
    # ToolTips sur les items du combo sélection du domaine du socle 
    for ds_1, ds_2 in enumerate(liste_items_socle) :
        self.dico_domaines_du_socle[r].setItemData(ds_1, ds_2, Qt.ToolTipRole)        
    # ------------------------------                
    # Répartition dans la grille
    self.grille_3_stack_6.addWidget(self.dico_combo_compet_travail[r], r, 0)
    self.grille_3_stack_6.addWidget(self.dico_traduc_compet_travail[r], r, 1)
    self.grille_3_stack_6.addWidget(self.dico_domaines_du_socle[r], r, 2)
    self.grille_3_stack_6.addWidget(self.dico_spinbox_pts_chiffres[r], r, 3)
    # Ecriture des n°s de lignes
    self.dico_traduc_compet_travail[r].setText(str(r+1)+'. ')

    # Les données sont introduites dans une liste
    self.liste_compet_travail_socle_eval.append([self.dico_combo_compet_travail[r], self.dico_traduc_compet_travail[r], self.dico_domaines_du_socle[r], self.dico_spinbox_pts_chiffres[r]])
屏幕截图:

标准QComboBox使用一个自定义视图,该视图可更改文本elide模式以及其他内容。因此,必须将其重新设置为正常的QListView,以获得所需的行为:

combo = QtGui.QComboBox()
view = QtGui.QListView(combo)
combo.setView(view)
# this must be done *after* re-setting the view
view.setTextElideMode(QtCore.Qt.ElideNone)
view.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)

@ekdmekdm。你说的似乎不再正常工作是什么意思?我在pyqt4和pyqt5中都能正常工作,而且我看不到行为上有任何变化。问题截图:@ekdmekdm。Try:combo.SetSizedJustPolicy QtWidgets.QComboBox.AdjustToMinimumContentsLength.代码:。。。结果是:。。。这不好。@ekdmekdm。你需要把这一行添加到我答案中的代码中。