如何将滚动条添加到具有绘制线的小部件?

2024-04-19 01:51:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难让它按我想要的方式工作。我想在下面画一些线,并在一个有滚动条的窗口中显示。你知道吗

到目前为止,我可以画线和显示他们,但我的滚动条不会工作。正确的方法是什么?你知道吗

文件y.list包含简单的数字对作为行的起点和终点。比如:

1 100
4 64
72 98

以下是我目前的代码:

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Example(QWidget):

    def __init__(self):
        super(Example, self).__init__()         

    def paintEvent(self, e):

        qp = QPainter()
        qp.begin(self)
        self.drawLines(qp)
        qp.end()

    def drawLines(self, qp):

        wTotal = 4*2*117

        pen = QPen(QColor(100, 200, 0), 5, Qt.SolidLine)
        qp.setPen(pen)
        qp.drawLine(24, 20, 24+wTotal, 20)

        pen = QPen(QColor(0, 0, 255), 2, Qt.SolidLine)
        qp.setPen(pen)
        qp.drawLine(24+wTotal/2,18,24+wTotal/2,22)

        pen = QPen(QColor(0, 50, 255), 2, Qt.SolidLine)
        qp.setPen(pen)

        with open("y.list", 'r') as points:

            linecount = 0
            for line in points:

                linecount += 1
                splitLine = line.split()

                start = int(splitLine[0])*4
                end = int(splitLine[1])*4

                qp.drawLine(20+start, 20+5*linecount, 20+end, 20+5*linecount)


class Widget(QWidget):

    def __init__(self, parent= None):
        super(Widget, self).__init__()

        self.setGeometry(200,100,1100,800)
        #Container Widget        
        widget = QWidget()
        #Layout of Container Widget
        layout = QVBoxLayout(self)
        lines = Example()
        layout.addWidget(lines)
        widget.setLayout(layout)

        #Scroll Area Properties
        scroll = QScrollArea()
        scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        scroll.setWidgetResizable(True)
        scroll.setWidget(widget)

        #Scroll Area Layer add 
        vLayout = QVBoxLayout(self)
        vLayout.addWidget(scroll)
        self.setLayout(vLayout)


if __name__ == '__main__':
    app = QApplication(sys.argv)

    dialog = Widget()
    dialog.show()

    app.exec_()

Tags: importselfinitexampledefwidgetqtend
1条回答
网友
1楼 · 发布于 2024-04-19 01:51:25

目前,您已经使小部件可以调整大小,因此小部件将自动调整大小以适应可用空间,并且滚动条永远不会更改(因为它们不需要)。你知道吗

要更改此设置,您需要为小部件指定一个特定的大小,并且不要自动调整其大小:

    scroll.setWidgetResizable(False)
    scroll.setWidget(widget)
    widget.resize(2000, 2000)

注意:不要试图在绘制事件期间以编程方式调整小部件的大小,因为调整大小本身会导致重新绘制。你知道吗

相关问题 更多 >