滚动区域不显示

Posted

技术标签:

【中文标题】滚动区域不显示【英文标题】:ScrollArea does not display 【发布时间】:2017-08-29 06:42:40 【问题描述】:

我正在构建的 gui app 存在问题。

类接口包含menubar、工具栏(两者都不显示),并调用类TabWidget_

TabWidget_ 类包含选项卡。目前只有一个标签(标签“Synthèse”)。我有几个组到表(Coordonnées, Equipe, Patrimoine, Bailleurs, Observations)

标签是QtGui.QWidget()。所有组都在选项卡中。我将标签添加到scrollArea (scrollArea = QtGui.QScrollArea())

我也看过其他帖子,但没有发现我的错误。

我的代码是这样的。

import os
import platform
import sys
from PyQt4 import QtCore, QtGui

class Interface(QtGui.QMainWindow):    
    def __init__(self):
        super(Interface, self).__init__()
        self.setWindowTitle('Compagnons Batisseur')
        self.resize(1440, 900)
        self.edit= QtGui.QTextEdit()
        self.barre_menu()
        self.centralwidget = QtGui.QLabel()
        self.tab_barre=TabWidget_(self.centralwidget)
        self.setCentralWidget(self.centralwidget)
        self.show()

    def test(self):
        self.edit.setGeometry(QtCore.QRect(20, 40, 601, 501))
        self.edit.setStatusTip('Input Text Here')
        self.edit.setToolTip('Input Text Here')

    def createAction(self,text, icon=None, shortcut=None, tip=None, slot=None):
        action=QtGui.QAction(QtGui.QIcon(icon),text, self)
        try:
            action.setShortcut(shortcut)
            action.setStatusTip(tip)
            action.setToolTip(tip)
            action.triggered.connect(slot)
        except TypeError:
            pass
        return action
    def addMenuItem(self, nomItem):
        item=self.menuBar().addMenu(nomItem)
        return item
    def barre_menu(self):
        #Fichier
        exitAction=self.createAction("Fermer", icon="logout.png", shortcut="Ctrl+Q", tip="Fermer l'application", slot=self.close) #on va aussi reimplementer la close event handler pour que quand on appuie sur croix, la methode soit lue egalement. ce sera pratique pour enregistrer les changements
        #saveAction=self.createAction("Enregistrer", icon="save.png", shortcut="Ctrl+S", tip="Enregistrer", slot=self.save)
        fichier=self.addMenuItem('Fichier')
        fichier.addActions([exitAction])
        #Edition
        cutAction=self.createAction("Couper", icon="cut.png", shortcut=QtGui.QKeySequence.Cut, tip="Couper", slot=self.edit.cut)
        copyAction=self.createAction("Copier", icon="copy.png", shortcut=QtGui.QKeySequence.Copy, tip="Copier", slot=self.edit.copy)
        pasteAction=self.createAction("Coller", icon="paste.png", shortcut=QtGui.QKeySequence.Paste, tip="Coller", slot=self.edit.paste)
        edition=self.menuBar().addMenu('Edition')
        edition.addActions([cutAction, copyAction, pasteAction])
        edition=self.menuBar().addMenu('Edition')
        #Aide
        aide=self.menuBar().addMenu('Aide')
        #Barre d'Outils, a enlever pas necessaire
        toolbar = self.addToolBar('Exit')
        toolbar.addAction(exitAction)
        toolbar.addAction(copyAction)
        toolbar.addAction(pasteAction)
        toolbar.addAction(cutAction)  



class TabWidget_(QtGui.QWidget):
    def __init__(self, centralwidget, parent=None):
        QtGui.QWidget.__init__(self)

        super(TabWidget_,self).__init__(parent)
        self.Onglets = QtGui.QTabWidget(centralwidget)
        self.Onglets.setGeometry(QtCore.QRect(0, 0, 1400, 871))
        self.Onglets.setFocusPolicy(QtCore.Qt.TabFocus)
        self.Onglets.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.Onglets.setMovable(False)
        self.Tab_Synthese()

    def create_group(self,nom_tab, nom_groupe, x, y, w, h):
        group=QtGui.QGroupBox(nom_tab)
        group.setTitle(nom_groupe) 
        group.setGeometry(QtCore.QRect(x,y,w,h))
        return group

    def create_line(self,nom_groupe, nom_line, x, y, w, h):
        line = QtGui.QLabel(nom_groupe)
        line.setGeometry(QtCore.QRect(x,y,w,h))
        line.setFocusPolicy(QtCore.Qt.TabFocus)
        line.setObjectName(nom_line)
        line.setText(nom_line)
        return line

    def create_line_edit(self,nom_groupe, x, y, w, h):
        line_edit=QtGui.QLineEdit(nom_groupe)
        line_edit.setGeometry(QtCore.QRect(x,y,w,h))
        return line_edit


    def Tab_Synthese(self):
        scrollArea = QtGui.QScrollArea()
        tab=QtGui.QWidget()

        #Création de l'onglet Synthèse
        #self.Onglets.addTab(tab, "Synthèsse")

        #Groupe COORDONNEES
        coordonnees=self.create_group(tab, "Coordonnées", 400, 20, 471, 500)

        #Eléments du groupe Coordonnées
        adresse=self.create_line(coordonnees, "Adresse", 10,25,150,30)
        adresse_edit= self.create_line_edit(coordonnees, 170, 25, 260, 30)      
        code_postal = self.create_line(coordonnees, "Code Postal", 10, 60,150,30)
        code_postal_edit=self.create_line_edit(coordonnees,170, 60, 60, 30)
        ville=self.create_line(coordonnees, "Ville", 10,95,50,30)
        ville_edit= self.create_line_edit(coordonnees, 170, 95, 135, 30)
        téléphone = self.create_line(coordonnees, "Téléphone", 10, 130, 150, 30)
        téléphone_edit=self.create_line_edit(coordonnees,170, 130, 100, 30)     


        #Groupe EQUIPE
        equipe =self.create_group(tab, "Equipe", 400, 190, 471, 500)

        #Eléments du groupe Equipe
        anim_tech = self.create_line(equipe, "Animateur technique", 10, 25, 150, 30)
        anim_tech_edit=self.create_line_edit(equipe,170, 25, 260, 30)       
        anim_hab = self.create_line(equipe, "Animateur habitat", 10, 60, 150, 30)
        anim_hab_edit=self.create_line_edit(equipe,170, 60, 260, 30)


        #Groupe PATRIMOINE
        patrimoine = self.create_group(tab, "Patrimoine", 400, 290, 471, 500)

        #Eléments du groupe Patrimoine
        nb_immeubles = self.create_line(patrimoine, "Nombre d'immeubles", 10, 25, 150, 30)
        nb_immeubles_edit=self.create_line_edit(patrimoine,170, 25, 260, 30)        
        nb_logements  = self.create_line(patrimoine, "Nombre de logements", 10, 60, 150, 30)
        anim_hab_edit=self.create_line_edit(patrimoine,170, 60, 260, 30)

        #Groupe BAIL
        bail = self.create_group(tab, "Bailleurs", 400, 390, 471, 500)

        #Eléments du groupe Equipe
        date = self.create_line(bail, "Date d'ouverture", 10, 25, 150, 30)
        date_edit= self.create_line_edit(bail, 170, 25, 150, 30)

        bailleur = self.create_line(bail, "Bailleurs", 10, 60, 150, 30)
        bailleurs_edit= QtGui.QComboBox(bail)
        bailleurs_edit.setGeometry(QtCore.QRect(170, 60, 260, 30))
        bailleurs_edit.addItem("item1")
        bailleurs_edit.addItem("item2") 

        #Groupe OBSERVATIONS
        observations = self.create_group(tab, "Observations", 400, 490, 471, 500)
        text=QtGui.QTextEdit(observations)
        text.setGeometry(QtCore.QRect(10,25 , 420, 200))

        scrollArea.setWidget(tab)
        #scrollArea.setBackgroundRole(QtGui.QPalette.Dark)
        scrollArea.setWidgetResizable(True)
        scrollArea.setFixedHeight(800)
        self.Onglets.addTab(scrollArea,"Synthèse")

有什么想法吗?谢谢。

【问题讨论】:

“我昨天已经花了整个下午试图解决这个问题,但没有成功。”要是你能说出“问题”是什么就好了。 问题是滚动条不显示。我的代码没有垂直或水平条,我不知道要添加什么才能使它们出现。 【参考方案1】:

我很少推荐使用固定尺寸,我更喜欢使用布局(QHBoxLayoutQVBoxLayoutQFormLayoutQGridLayout)和QSpacerItem(如有必要),所以修改你的代码以适应它如下图:

class TabWidget_(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.setLayout(QtGui.QVBoxLayout())
        self.Onglets = QtGui.QTabWidget(self)
        self.Onglets.setFocusPolicy(QtCore.Qt.TabFocus)
        self.Onglets.setMovable(False)
        self.layout().addWidget(self.Onglets)
        self.Tab_Synthese()

    def create_group(self,nom_tab, nom_groupe):
        group=QtGui.QGroupBox(nom_tab)
        group.setTitle(nom_groupe) 
        nom_tab.layout().addWidget(group)
        group.setLayout(QtGui.QVBoxLayout())
        return group

    def create_line(self,nom_groupe, nom_line):
        line = QtGui.QLabel(nom_groupe)
        line.setObjectName(nom_line)
        line.setText(nom_line)
        nom_groupe.layout().addWidget(line)
        return line

    def create_line_edit(self,nom_groupe):
        line_edit=QtGui.QLineEdit(nom_groupe)
        nom_groupe.layout().addWidget(line_edit)
        return line_edit


    def Tab_Synthese(self):
        scrollArea = QtGui.QScrollArea()

        widget = QtGui.QWidget()
        widget.setLayout(QtGui.QHBoxLayout())

        tab=QtGui.QWidget(widget)
        tab.setMaximumWidth(400)

        widget.layout().addWidget(tab, QtCore.Qt.AlignCenter)

        tab.setLayout(QtGui.QVBoxLayout())
        #Création de l'onglet Synthèse
        #self.Onglets.addTab(tab, "Synthèsse")

        #Groupe COORDONNEES
        coordonnees = self.create_group(tab, "Coordonnées")
        #Eléments du groupe Coordonnées
        adresse=self.create_line(coordonnees, "Adresse")
        adresse_edit= self.create_line_edit(coordonnees)      
        code_postal = self.create_line(coordonnees, "Code Postal")
        code_postal_edit=self.create_line_edit(coordonnees)

        ville=self.create_line(coordonnees, "Ville")
        ville_edit= self.create_line_edit(coordonnees)
        téléphone = self.create_line(coordonnees, "Téléphone")
        téléphone_edit=self.create_line_edit(coordonnees)

        #Groupe EQUIPE
        equipe =self.create_group(tab, "Equipe")

        #Eléments du groupe Equipe
        anim_tech = self.create_line(equipe, "Animateur technique")
        anim_tech_edit=self.create_line_edit(equipe)       
        anim_hab = self.create_line(equipe, "Animateur habitat")
        anim_hab_edit=self.create_line_edit(equipe)


        #Groupe PATRIMOINE
        patrimoine = self.create_group(tab, "Patrimoine")

        #Eléments du groupe Patrimoine
        nb_immeubles = self.create_line(patrimoine, "Nombre d'immeubles")
        nb_immeubles_edit=self.create_line_edit(patrimoine)        
        nb_logements  = self.create_line(patrimoine, "Nombre de logements")
        anim_hab_edit=self.create_line_edit(patrimoine)

        #Groupe BAIL
        bail = self.create_group(tab, "Bailleurs")

        #Eléments du groupe Equipe
        date = self.create_line(bail, "Date d'ouverture")
        date_edit= self.create_line_edit(bail)

        bailleur = self.create_line(bail, "Bailleurs")
        bailleurs_edit= QtGui.QComboBox(bail)
        bail.layout().addWidget(bailleurs_edit)
        bailleurs_edit.addItem("item1")
        bailleurs_edit.addItem("item2") 

        #Groupe OBSERVATIONS
        observations = self.create_group(tab, "Observations")
        text=QtGui.QTextEdit(observations)
        text.setMinimumHeight(200)
        observations.layout().addWidget(text)

        scrollArea.setWidget(widget)
        #scrollArea.setBackgroundRole(QtGui.QPalette.Dark)
        scrollArea.setWidgetResizable(True)
        #scrollArea.setFixedHeight(800)
        self.Onglets.addTab(scrollArea, "Synthèse")

获取下图显示的内容:

完整代码在下面link。

【讨论】:

谢谢!我不喜欢布局,但也许是因为我开始了。

以上是关于滚动区域不显示的主要内容,如果未能解决你的问题,请参考以下文章

【CSS】为啥设置不显示滚动条不好用呢?

为啥我的 TScrollBox 不显示滚动条?

winform 能否只让tablelayoutpanel只显示竖滚动条?

uiscrollview 中的图像显示

突出显示滚动条上的特定区域

元素focus页面不滚动不定位的JS处理