2016-02-04 5 views
1

У меня возникли проблемы с тем, чтобы это работало так, как я хочу. Я хочу нарисовать несколько строк ниже друг друга и отобразить это в окне с полосами прокрутки.Как добавить полосы прокрутки к виджету с нарисованными линиями?

До сих пор я могу рисовать линии и отображать их, но мои полосы прокрутки не работают. Каков правильный способ сделать это?

Файл 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_() 

ответ

2

В настоящее время, вы сделали виджет изменяемым, так что виджет будет автоматически изменен, чтобы соответствовать доступному пространству, и скроллбары никогда не будут (потому что они не нужны).

Чтобы изменить это, вам нужно дать виджету определенный размер, и не могут автоматически изменять его размеры:

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

NB: не пытайтесь программно изменить размер виджета во время красочного-события, потому что изменение размера может привести к повторной краске.

+0

Ничего себе такого простого решения, клянусь, я попробовал что-то вроде этого, но, должно быть, пропустил правильный порядок или sth. В любом случае, спасибо! :) – voiDnyx

Смежные вопросы