2016-02-10 260 views
2

背景繪製多邊形PyQt的

我想在屏幕上畫一個簡單的形狀,我已經選擇PyQt的作爲包裝使用,因爲它似乎是最成熟的。我不以任何方式鎖定它。

問題

這似乎是過於複雜,只是畫一個簡單的形狀,例如像在屏幕上的多邊形。我發現所有的例子都試圖做很多額外的事情,我不確定實際上相關的是什麼。

問題

什麼是PyQt的絕對最小的方式在屏幕上繪製多邊形?

我使用PyQt的版本5和Python的版本3,如果它有任何區別的話。

+0

[圖形視圖框架(http://doc.qt.io/qt-5/graphicsview.html)。 – ekhumoro

回答

4

我不知道,你跟

的意思在屏幕上

可以使用QPainter的,畫了很多形狀上的QPaintDevice例如任何子類QWidget和所有的子類。

最低限度是設置筆和文本的筆和填充筆。然後創建一個多邊形,設置多邊形和油漆的所有點在paintEvent()

import sys, math 
from PyQt5 import QtCore, QtGui, QtWidgets 

class MyWidget(QtWidgets.QWidget): 
    def __init__(self, parent=None): 
     QtWidgets.QWidget.__init__(self, parent) 
     self.pen = QtGui.QPen(QtGui.QColor(0,0,0))      # set lineColor 
     self.pen.setWidth(3)           # set lineWidth 
     self.brush = QtGui.QBrush(QtGui.QColor(255,255,255,255))  # set fillColor 
     self.polygon = self.createPoly(8,150,0)       # polygon with n points, radius, angle of the first point 

    def createPoly(self, n, r, s): 
     polygon = QtGui.QPolygonF() 
     w = 360/n              # angle per step 
     for i in range(n):            # add the points of polygon 
      t = w*i + s 
      x = r*math.cos(math.radians(t)) 
      y = r*math.sin(math.radians(t)) 
      polygon.append(QtCore.QPointF(self.width()/2 +x, self.height()/2 + y)) 

     return polygon 

    def paintEvent(self, event): 
     painter = QtGui.QPainter(self) 
     painter.setPen(self.pen) 
     painter.setBrush(self.brush) 
     painter.drawPolygon(self.polygon) 

app = QtWidgets.QApplication(sys.argv) 

widget = MyWidget() 
widget.show() 

sys.exit(app.exec_())