Python使用PyQt界面庫繪製不停旋轉的圓控制項

2021-01-07 編碼那些事

Python是一種面向對象的高級動態程式語言,相對於其它如C/C++語言,具有上手快、代碼量少、開發效率高等特點,Qt是跨平臺的C++圖形用戶界面應用程式開發框架,是當前主流的GUI開發工具之一,其在Python下的綁定是PyQt庫。使用「Python+PyQt」架構編寫應用軟體,可以做到在兼顧軟體運行效率的前提下,也可以大大節省開發者的時間成本。

關於自繪控制項或自定義控制項的編程方法,目前能找到的資料大多是C++語言下Qt的例子,而直接使用PyQt實現的資料很少,這兒給出一個在Python語言中使用PyQt庫自定義不停旋轉的圓控制項的例子。

控制項例子說明

代碼實現後的控制項運行界面如下圖所示:

上圖中顯示了一個不停旋轉的圓,圓內部是藍白顏色交叉顯示的四部分扇形區域,外圈為灰色的圓形帶。

代碼實現過程

在代碼實現中,繼承於PyQt的QWidget基類,定義了一個旋轉的圓控制項類----RotateCircleWidget,在該類中重定義paintEvent事件函數,在該函數內部實現圓控制項的外觀顯示。調用定時器函數實現其不停旋轉功能。下面逐步說明主要的代碼實現方法。

1、類的初始化

初始化每次旋轉的角度變量,定義定時器,綁定超時函數及啟動定時器,設置每隔50ms旋轉一次,代碼如下圖所示:

2、重定義paintEvent事件

這是自繪旋轉圓控制項中代碼主要實現的地方,定義了控制項在不同情況下的外觀,這兒請參考注釋,不作詳細說明了,主要代碼如下圖所示:

3、定時器超時事件

在定時器的超時事件中,每次旋轉的角度變量自加2,調用update()函數實現控制項外觀的不停刷新,達到旋轉的效果。主要代碼如下圖所示:

控制項測試例子

調用上面的控制項類,將其放到主窗口中,即可看到本文開頭不停旋轉的圓運行界面。主要實現代碼如下圖所示:

備註

PyQt中大部分函數同C++平臺下Qt的函數完全一樣,只是在Python和C++下語法有所不同,如變量的定義、賦值等,使用Python+PyQt框架,實現同樣的功能,代碼量要遠遠小於C++平臺下的代碼量,如本例加上注釋、空行等才不足80行代碼,大大節約了編程時間。

可參考視頻演示:python+pyqt自定義控制項:旋轉圓控制項

歡迎加關注,共同交流。

相關焦點

  • Python數據可視化之高速繪圖神器PyQtGraph庫,強烈建議收藏
    但是這些繪圖庫也存在著不足,即在圖形繪製速度上有所欠缺,特別是對於科研算法方面的數據可視化,很多情況需要實時繪圖,要求能夠提供儘可能快的繪製刷新速度,那這些庫顯的有些力不從心了。而我們下面要介紹的繪圖庫-PyQtGraph庫,則在繪圖速度方面表現尤其突出,在不失繪圖美觀、功能強大的前提下,在繪圖速度方面作了極大的優化,特別適合於實時數據採集的動態圖形繪製場合。
  • Python數據可視化:使用pyqtgraph庫輕鬆繪製股票K線圖
    引言pyqtgraph是Python平臺上一種功能強大的2D/3D繪圖庫,相對於matplotlib庫,由於其在內部實現方式上,使用了高速計算的numpy信號處理庫以及Qt的GraphicsView框架,因此它在大數據量的處理及快速顯示方面有著天然的優勢,非常適合於需要快速繪圖更新、視頻或實時交互性的操作場合,在數學、科學和工程領域都有著廣泛的應用。
  • python gui 中三大框架tkinter,wxpython, pyqt如何選擇
    python開發圖形界面也有這樣的煩惱,有很多gui框架提供我們選擇,讓我們眼花繚亂,我們很難從中選擇一個。下面我簡單介紹下主流的三個python gui框架。Qt強大之處在於網上有很多pyqt的資源,而且qt技術已經相當成熟,pyqt是採用基本和qt一致的api,因此之前使用過qt的人,轉移到pyqt很容易,這也是我們學習編程的始終強調的一點,一通百通,當你一門語言學習紮實了,學透了,那麼轉移到其它語言是非常容易的。pyqt5作為Python的一個模塊,它有620多個類和6000個函數和方法。
  • Python使用pyqtgraph庫實現數據可視化之多條曲線繪製方法
    引言pyqtgraph是Python平臺上一種功能強大的2D/3D對於多條曲線的快速繪製方式,有兩種方案可供選擇,一種是將多條曲線合併顯示在一幅繪圖區域上,另一種方案是將多條曲線顯示在不同的繪圖區域上,對於這兩種繪製方案,下面通過例子來演示在Python語言中使用pyqtgraph
  • Python GUI編程之tkinter的常用控制項Label的使用
    對於Python GUI編程中標籤的使用也不例外,Tkinter中的標籤控制項Label常常被使用於顯示文本或圖像,今天我們來詳細看下它的使用方法。下面開始今天的內容……【使用範圍】顧名思義,標籤控制項Label是用來給控制項貼標籤用於展示信息的,當然,它就可以包含多行文本。
  • 零基礎學習python GUI編程(PyQt)系列之一:開發軟體安裝
    在使用python進行界面編程時,很多開發者都是用了PyQt這個框架進行,PyQt是一個跨平臺的框架。它是用C ++編寫的。這是一個非常全面的庫。它包含許多工具和API。它被廣泛應用於許多行業。它涵蓋了很多平臺。PyQt是Qt庫的Python版本。
  • Python中使用pyqtgraph庫實現數據可視化之逐點刷新波形圖
    背景pyqtgraph是Python平臺上一種功能強大的2D/3D在使用pyqtgraph庫繪製圖形的編程方法上,前面一篇文章已經給了一個最簡單的例子以及一個連續刷新波形圖的例子,下面再給一個逐點刷新波形圖的例子。
  • Python+PyQt架構:使用設計師編寫界面程序入門示例
    PyQt是Qt界面庫在Python下的綁定,為在Python語言下編寫GUI界面程序提供了極大的便利。對於界面程序的設計,可以使用代碼構建,也可以藉助於其提供的設計師(Qt Designer)工具來構建。下面給出一個在Python語言中使用PyQt界面庫及設計師工具編寫界面程序的入門例子。
  • python高級進階 002第一個pyqt5程序
    瀏覽器版本過低,暫不支持視頻播放以下開始文字講解:在上一節的教程中,我們已經將圖形化界面開發的基本環境已經搭建完畢,本節,我們繼續使用pyqt5開發程序。以下 ,我們對生成代碼知識點簡要解析:界面的生成基於PyQt5庫庫來自於pip管道下載命令,舉例pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simplesys模塊負責系統文件等操作模塊QtWidgets是所有qt控制項中的基類。QApplication簡單理解成程序的進程,代碼實例化為app這個對象。
  • Python用PyQt5繪製多彩隨機散點圖,基本控制項之QPainter使用詳解
    基本圖形繪製該類可以在QWidget控制項上執行繪圖操作,我們先來看下其繼承順序。QPainter繼承關係從功能上來看,QPainter類不僅可以繪製一些基本圖形(如直線、矩形、圓等),這些功能類似tkinter中的Canvas對象,但是不同於Canvas的地方在於
  • Python+PyQt架構:如何調用多個設計師窗口界面文件示例
    下面給出一個在Python語言中使用PyQt界面庫及設計師工具編寫界面程序,並在程序中實現主窗口調用其它子窗口文件的例子。本例開發環境配置:Python2.7 + PyQt4。QWidget類,其中,在主窗口Main.ui文件中,放置了一個Tab Widget控制項,並僅添加了第一頁窗口內容,使用Plain Text Edit控制項顯示當前頁面為主窗口文件創建;另兩個窗口文件布局類似,也是使用Plain Text Edit控制項來顯示當前頁面為子窗口文件創建。
  • Python語言使用pyqtgraph庫實現數據可視化之自定義坐標軸信息
    引言pyqtgraph是Python平臺上一種功能強大的2D/3D繪圖庫,相對於matplotlib庫,由於內部實現方式上,使用了高速計算的numpy信號處理庫以及Qt的GraphicsView框架,因此,它在大數據量的數字處理和快速顯示方面有著巨大的優勢
  • 【州末小課堂】使用PyQtGraph繪製上證指數精美走勢圖
    本篇,我們介紹使用PyQtGraph模塊繪製一個完整的折線圖,通過tushare模塊獲取上證指數過去兩個月的指數波動數據作為數據源。下面我們分步驟講解這個折線圖形的繪製。在本例中,我們需要使用到pyqtgraph模塊、numpy模塊和tushare模塊我們使用tushare模塊的get_hist_data()方法獲取上證指數從2017年10月到2017年12月的歷史行情數據:
  • Python用PyQt5設計界面,如何正確顯示一幅圖片,QPixmap控制項詳解
    前面內容我們學習了PyQt5中一些基本控制項的使用前期回顧擁有漂亮的筆刷才能繪製多彩界面,PythonPyQt5中QPen和QBrush類Python用PyQt5繪製多彩隨機散點圖,基本控制項之QPainter使用詳解Python用PyQt5製作顏色對話框
  • 使用Python OpenCV處理圖像之詳解直線、圓、矩形及文字的繪製
    今天,跟大家一起了解下使用OpenCV來繪製一些簡單的圖形,比如,類似我們之前畫圖板製作(Python使用tkinter製作一個簡易的繪圖程序一(Python GUI編程))中講到的繪製基本的直線、圓、橢圓、矩形、多邊形、文字等。
  • Python編程:Python3+PyCharm+PyQt5開發環境詳細配置,建議收藏
    Python3 + PyCharm + PyQt5開發環境詳細配置前兩天發布了個一個小視頻,詳細介紹了PyCharm開發環境下使用PyQt5界面庫進行Python開發的詳細配置過程,應小夥伴們的強烈要求,這次把文字版內容給大家整理出來了,大家喜歡的話快快收藏吧。
  • PyQt 5信號與槽的幾種高級玩法
    在Qt中,每一個QObject對象和PyQt中所有繼承自QWidget的控制項(這些都是QObject的子對象)都支持信號與槽機制。當信號發射時,連接的槽函數將會自動執行。在PyQt 5中信號與槽通過object.signal.connect()方法連接。PyQt的窗口控制項類中有很多內置信號,開發者也可以添加自定義信號。信號與槽具有如下特點。
  • python可視化庫大全
    其它的可視化庫諸如:seaborn、pyecharts、ggplot、plotnine、holoviews、basemap、altair、pyqtgraph、pygal、vispy、networkx、plotly、bokeh、geoplotlib、folium、gleam、vincent、mpld3、python-igraph、missingno、mayavi2
  • Python+PyQt架構:使用圖標字體打造無邊框通用導航軟體界面
    使用「Python+PyQt」架構編寫應用軟體,可以做到在兼顧軟體運行效率的前提下,大大節省時間成本,加快項目的開發進度。圖標字體庫(Font Awesome字體庫)提供了一套漂亮、可縮放的矢量圖標,對於這些圖標可使用CSS所提供的所有特性對它們進行更改,包括:大小、顏色、陰影或者其它任何支持的效果。
  • 利用python的kivy模塊做一個秒表
    在這裡我們使用其多次調用一個函數的方法構建秒表。其函數為:Clock.schedule_interval(my_callback,0.5)它的涵意是每0.5秒調用一次my_callback函數。下面是官方文檔給出的一個例子。相比其他界面庫,kivy.clock模塊的功能更強大、更接近於自然語言,完成相同的功能使用的代碼量更少。