2013-06-09 16 views
1

위젯에서 여러 점을 그려야하고 그 중 일부를 선으로 연결해야하는 애플리케이션을 만들고 있습니다. 나는 QT 디자이너를 사용하여 폼을 만들었고, 예를 들어 프레임에 포인트를 그려야합니다. 위젯을 그리기 위해 paintEvent() 메서드를 다시 구현해야하고 그 문제가 있음을 읽었습니다. 내 MainForm 클래스에는 다음 코드가 있습니다.PyQt를 사용하여 위젯에서 점과 선을 그리는 방법

......... 
def paintEvent(self, QPaintEvent): 
    paint = QtGui.QPainter() 
    paint.begin(self) 
    paint.setPen(QtCore.Qt.red) 
    size = self.size() 
    for i in range(100): 
     x = random.randint(1, size.width()-1) 
     y = random.randint(1, size.height()-1) 
     paint.drawPoint(x, y) 
    paint.end() 
............ 

이 방법은 주 창에 점을 그립니다. 내 폼의 정확한 프레임에 paintEvent()를 그리는 방법은 무엇입니까? 그리고 또 하나의 질문 : 위의 코드가 어떤 이벤트 후에 내 창을 다시 그리기 때문에 일부 버튼 만 누르면 어떻게 만들 수 있습니까?

필자는 중요한 경우 PyQt v4.10과 Python 3.3을 사용합니다.

미리 도움을 청하십시오.

답변

0

나는 나의 문제를 해결했다 : 나는 (PaintSpace라고 불리는) 나의 자신의 위젯을 만들어 내 메인 폼의 레이아웃에 넣었다. 코드에 이어 MainForm 클래스 내부 : 그 후

class MyPaintSpace(QtGui.QWidget): 
       """My widget for drawing smth""" 

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

        <some code> 

       def paintEvent(self, QPaintEvent): 
        """Reimpltmented drawing method of my widget""" 

        paint = QtGui.QPainter() 
        paint.begin(self) 

        <smth we want to draw> 

        paint.end() 

    # Make an object... 
    self.myPaintSpaceYZ = MyPaintSpace() 
    # ...and put it in layout 
    self.verticalLayoutYZ.addWidget(self.myPaintSpaceYZ) 

내가 .update() 방법을 사용하여 내 위젯을 다시 그릴 수 있습니다.

+0

클래스 안에 클래스를 넣으시겠습니까? PaintSpace는 QT 디자이너의 QWidget 이름입니까? verticalLayoutYZ 란 무엇입니까? – jerbotron

관련 문제