Masthead

Painting in Qt

The sample below shows a simple example of painting in a window with the Qt library.

############################################################################
# Projection Explorer for Python
# This version is specifically for developing the code that provides
# Projection grids for websites
#
# http://zetcode.com/gui/pyqt5/painting/
# https://doc.qt.io/qt-5/qpen.html
############################################################################
import sys
import os
from PyQt5.QtWidgets import *
from PyQt5 import *
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPainter, QColor, QFont,QPen
######################################################################################################
# Main Window
######################################################################################################
class CanvasWidget(QLabel):
	########################################################################################################
	# Construction Functions
	########################################################################################################
	def __init__(self):
		super().__init__()

	########################################################################################################
	def paintEvent(self, event):
		
		# Create a painting object
		ThePainter = QPainter()

		# Do the painting
		ThePainter.begin(self) # everything between here and the end() call will be drawn into the Widget

		ThePainter.setBrush(QColor(200, 0, 0)) # set the color of a brush. Brushes fill shapes
		ThePainter.drawRect(10, 40, 90, 60) # use the brush to draw a rectangle

		ThePainter.setBrush(QColor(0, 200, 0)) # set a different color
		ThePainter.drawEllipse(10, 110, 90, 60) # draw an ellipse

		ThePen=QPen(QColor(120,120,120)) # set a color for a pen.  Pens draw lines and outlines
		ThePen.setWidth(5)
		ThePainter.setPen(ThePen) # set the pen into the painter
		ThePainter.drawLine(10, 230, 90, 260) # draw a line

		ThePainter.setPen(ThePen) 
		ThePainter.setFont(QFont('Decorative', 20)) # setup the font and size of the text
		ThePainter.drawText(event.rect(), Qt.AlignLeft, "This is some text that I drew into the window") 

		ThePainter.end() # finishing drawing

######################################################################################################
# Main Window
######################################################################################################
class WindowClass(QWidget):
	"""
	A simple window class that includes some painting
	"""
	##################################################################################################
	## Initialization
	def __init__(self):
		super().__init__()
		#########################################################
		# Create a vertical layout box for the entire window
		MainLayout = QVBoxLayout()
	
		# Add a frame to the main window's layout
		TheFrame = QFrame(self)
		TheFrame.setFrameShape(QFrame.StyledPanel)
		MainLayout.addWidget(TheFrame)
	
		# Add a box layout into the frame
		SettingsLayout = QVBoxLayout()
		TheFrame.setLayout(SettingsLayout)
	
		#########################################################
		# Create a canvas to draw into
	
		self.TheCanvas = CanvasWidget() # create the canvas widget that will do the painting
		SettingsLayout.addWidget(self.TheCanvas)  # add the canvas to the layout within the frame
	
		#########################################################
		# Setup the overall window
	
		# Set the vertical layout as the main layout for the window
		self.setLayout(MainLayout) 
		# set the initial size of the window
		self.setGeometry(100, 100, 600, 600)
	
		# Set the title of the window and call show() to make the window appear
		self.setWindowTitle('Painting') 
		self.show()

########################################################################
TheApplication = QApplication(sys.argv) # create a PyQt application
TheWindow = WindowClass() # Create our window object
sys.exit(TheApplication.exec_()) # Start the application

 

© Copyright 2018 HSU - All rights reserved.