滚动区域不显示
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】:我很少推荐使用固定尺寸,我更喜欢使用布局(QHBoxLayout
,QVBoxLayout
,QFormLayout
,QGridLayout
)和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。
【讨论】:
谢谢!我不喜欢布局,但也许是因为我开始了。以上是关于滚动区域不显示的主要内容,如果未能解决你的问题,请参考以下文章