Pythonでより立体的に見える円を表示するってばよ!

I wrote: 2016/10/30

 Pythonでより立体的に見える円、つまり球体みたいに表示させます。そんでPyQtを使います。

円を立体的に見せるのにQRadialGradientで円に光を当てました。でも、光があるなら影もできないと不自然ですよね。なので、 QRadialGradientで影をつけてみます。ついでに、QLabelで「Blue Ball」というタイトルを付けて完成です。

美術作品みたいになってしまった(ノ´∀`*)

以下はソース
import sys
from PyQt4 import QtGui, QtCore, uic
from Foo import Ui_MainWindow

class Sample(QtGui.QMainWindow): 
    def __init__(self, parent = None):
        super(Sample, self).__init__(parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        label = QtGui.QLabel('Blue Ball', self)
        label.setGeometry(150,270,200,100)

    def paintEvent(self,event):
        painter = QtGui.QPainter()
        painter.begin(self)
        painter.setRenderHint(QtGui.QPainter.Antialiasing, True)
        painter.setBrush(QtCore.Qt.white)
        painter.drawRect(event.rect())

        painter.setPen(QtCore.Qt.white)
        center = QtCore.QPointF(205, 260)
        focusP = QtCore.QPointF(175, 175)
        grad = QtGui.QRadialGradient(center,90,focusP)
        grad.setColorAt(0.0, QtCore.Qt.black)
        grad.setColorAt(0.7, QtGui.QColor('gainsboro'))
        grad.setColorAt(1.0, QtCore.Qt.white)
        painter.setBrush(grad)
        painter.drawEllipse(center, 90, 30)

        painter.setPen(QtGui.QColor('DarkMagenta'))
        center = QtCore.QPointF(175, 175)
        fpoint = QtCore.QPointF(155,155)
        gradient = QtGui.QRadialGradient(center,100,fpoint)
        gradient.setColorAt(0.0, QtCore.Qt.white)
        gradient.setColorAt(1.0, QtCore.Qt.blue)
        painter.setBrush(gradient)
        painter.drawEllipse(center, 100, 100)
        painter.end()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    sample = Sample()
    sample.show()
    sys.exit(app.exec_())

実行されたアプリケーション
 blue