PyQt4 ScrollArea小部件问题:滚动条无法正常工作

时间:2018-01-21 16:17:25

标签: python python-2.7 pyqt pyqt4

我正在使用PyQt4在python 2.7中编写一个程序,我在scrollArea小部件中遇到了以下问题。如下图所示,滚动条无法正常工作。它根本没有移动图表。中间的滚动条显示与原始位置相同的内容。

原始位置的滚动条

scroll bar at original position

滚动条几乎在中间

scroll bar almost in the middle

我已经在其他计算机上使用不同的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()  

需要使用下面这些链接中的代码和文件才能使其正常工作。

CreateGraphFromInputs.py

DrawGraph.py

ListCleaning.py

ConfigGraphFile.py

graphWidget.py

configGraphFile

1 个答案:

答案 0 :(得分:0)

刚刚找到解决方案。问题是图表没有正确调整大小。在DrawGraph.py文件中,我正在设置几何体而不是调整其大小。

所以,我刚刚更改了这段代码

self.setGeometry(0,0,self.size,self.height)

到这个

self.resize(self.size,self.height)

现在工作正常。