我正在使用PyQt4在python 2.7中编写一个程序,我在scrollArea小部件中遇到了以下问题。如下图所示,滚动条无法正常工作。它根本没有移动图表。中间的滚动条显示与原始位置相同的内容。
原始位置的滚动条
滚动条几乎在中间
我已经在其他计算机上使用不同的SO尝试该程序并得到相同的结果,这意味着问题是代码。该程序太长,所以我只会显示调用滚动区域小部件的位置。
class graphWidget(QtGui.QWidget):
def __init__(self):
super(graphWidget, self).__init__()
self.graph=CreateGraphFromInputs.createGraph()
self.slider=QtGui.QSlider(QtCore.Qt.Vertical)
self.setup()
def setup(self):
#slider setup#
self.slider.setMinimum(1)
self.slider.setMaximum(20)
self.slider.setValue(1)
self.slider.setTickPosition(QtGui.QSlider.TicksBelow)
self.slider.setTickInterval(1)
self.slider.valueChanged.connect(self.sliderValueChange)
self.zoomLabel=QtGui.QLabel(str(self.slider.value())+"x")
grid=QtGui.QGridLayout()
grid.addWidget(QtGui.QLabel(""),0,0)
grid.addWidget(QtGui.QLabel("Zoom"),1,1)
grid.addWidget(self.slider,2,1)
grid.addWidget(self.zoomLabel,3,1)
grid.addWidget(QtGui.QLabel(""),4,0)
grid.setRowMinimumHeight(0,55)
grid.setRowMinimumHeight(4,55)
grid.setSpacing(0)
#slider setup#
#scrollArea setup#
scrollArea=QtGui.QScrollArea()
scrollArea.setWidgetResizable(False)
scrollArea.setWidget(self.graph)
scrollArea.setMaximumHeight(270)
scrollArea.setMinimumWidth(600)
#scrollarea setup#
#layout setup
hbox = QtGui.QHBoxLayout()
hbox.addStretch(0)
hbox.setSpacing(5)
hbox.addWidget(scrollArea)
hbox.addLayout(grid)
self.setLayout(hbox)
#layout setup#
def sliderValueChange(self):
if self.graph.lista!=[]:
self.graph.setSize(50+(len(self.graph.lista)/float(self.slider.value())))
self.graph.setSizeDivision(1/float(self.slider.value()))
self.graph.setZoom(50*self.slider.value())
self.zoomLabel.setText(str(self.slider.value())+"x")
self.graph.repaint()
图形窗口小部件可调整大小,但如果我将线条设置为true,则滚动条根本不起作用。
scrollArea.setWidgetResizable(False)
我已经用这个问题检查了其他问题,但对我没用。因此,将窗口小部件设置为false可使滚动条工作,除了我遇到的相关问题。
以下代码可以重现上面提到的滚动区域问题。
from PyQt4 import QtGui
import sys
import GraphWidget
#graph data
graphList=[1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0]*50
def main():
app = QtGui.QApplication(sys.argv)
graphW=GraphWidget.graphWidget()
graphW.graph.setLista(graphList)
graphW.graph.setSize(50+len(graphList))
graphW.graph.repaint()
graphW.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
需要使用下面这些链接中的代码和文件才能使其正常工作。
答案 0 :(得分:0)
刚刚找到解决方案。问题是图表没有正确调整大小。在DrawGraph.py文件中,我正在设置几何体而不是调整其大小。
所以,我刚刚更改了这段代码
self.setGeometry(0,0,self.size,self.height)
到这个
self.resize(self.size,self.height)
现在工作正常。