1. 程式人生 > >wxPython: 簡單的繪圖例子

wxPython: 簡單的繪圖例子

一個繪圖的例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

'''
    Function:繪圖
    Input:NONE
    Output: NONE
    author: socrates
    blog:http://www.cnblogs.com/dyx1024/
    date:2012-07-11
'''  

import wx

class PaintWindow(wx.Window):
        def __init__(self, parent, id):
            wx.Window.__init__(self, parent, id)
            self.SetBackgroundColour("Red")
            self.color = "Green"
            self.thickness = 10
        
            #建立一個畫筆
            self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)
            self.lines = []
            self.curLine = []
            self.pos = (0, 0)
            self.InitBuffer()
        
            #連線事件
            self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
            self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
            self.Bind(wx.EVT_MOTION, self.OnMotion)
            self.Bind(wx.EVT_SIZE, self.OnSize)
            self.Bind(wx.EVT_IDLE, self.OnIdle)
            self.Bind(wx.EVT_PAINT, self.OnPaint)
        
        def InitBuffer(self):
            size = self.GetClientSize()
            
            #建立快取的裝置上下文
            self.buffer = wx.EmptyBitmap(size.width, size.height)
            dc = wx.BufferedDC(None, self.buffer)
            
            #使用裝置上下文
            dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
            dc.Clear()
            self.DrawLines(dc)
            self.reInitBuffer = False
            
        def GetLinesData(self):
            return self.lines[:]
        
        def SetLinesData(self, lines):
            self.lines = lines[:]
            self.InitBuffer()
            self.Refresh()
            
        def OnLeftDown(self, event):
            self.curLine = []
            
            #獲取滑鼠位置
            self.pos = event.GetPositionTuple()
            self.CaptureMouse()
            
        def OnLeftUp(self, event):
            if self.HasCapture():
                self.lines.append((self.color,
                                   self.thickness,
                                   self.curLine))
                self.curLine = []
                self.ReleaseMouse()
                
        def OnMotion(self, event):
            if event.Dragging() and event.LeftIsDown():
                dc = wx.BufferedDC(wx.ClientDC(self), self.buffer)
                self.drawMotion(dc, event)
            event.Skip()
        
        def drawMotion(self, dc, event):
            dc.SetPen(self.pen)
            newPos = event.GetPositionTuple()
            coords = self.pos + newPos
            self.curLine.append(coords)
            dc.DrawLine(*coords)
            self.pos = newPos
            
        def OnSize(self, event):
            self.reInitBuffer = True
        
        def OnIdle(self, event):
            if self.reInitBuffer:
                self.InitBuffer()
                self.Refresh(False)
        
        def OnPaint(self, event):
            dc = wx.BufferedPaintDC(self, self.buffer)
            
        def DrawLines(self, dc):
            for colour, thickness, line in self.lines:
                pen = wx.Pen(colour, thickness, wx.SOLID)
                dc.SetPen(pen)
                for coords in line:
                    dc.DrawLine(*coords)
        
        def SetColor(self, color):
            self.color = color
            self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)
            
        def SetThickness(self, num):
            self.thickness = num
            self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)
            
class PaintFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, -1, "Panit Frame", size = (800, 600))
        self.paint = PaintWindow(self, -1)
        
if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = PaintFrame(None)
    frame.Show(True)
    app.MainLoop()

測試:




相關推薦

wxPython: 簡單繪圖例子

一個繪圖的例子: #!/usr/bin/env python # -*- coding: utf-8 -*- ''' Function:繪圖 Input:NONE Output: NONE author: socrates blog

wxpython繪圖例子(避免視窗閃爍)

#!/usr/bin/env python # -*- coding: utf-8 -*- '''     Function:繪圖     Input:NONE     Output: NONE     author: socrates     blog:http://ww

php實現socket簡單例子

返回 ets false 類型 註釋 err content 初始化 字符 一、Socket簡介 1、socket只不過是一種數據結構 2、使用這個socket數據結構去開始一個客戶端和服務器之間的會話 3、服務器是一直在監聽準備產生一個新的會話。當一個客戶端連接服務端,它

【4】 簡單繪圖(二)

dispose alt draw bsp rom 形狀 .html yellow tex 在上一篇裏已經向大家介紹了如何使用GDI+繪制簡單的圖像,這一篇繼續向大家介紹其它一些繪圖知識. 1.首先我們來看下上一篇中我們使用過的Pen. Pen的屬性主要有: Color(顏色

css一些簡單例子

加載 加載順序 http purple 20px adding expire sheet 傳輸協議 1.http協議 1 一:HTTP協議:hypertext transport protocol(超文本傳輸協議) 2 特點: 3 1.請求

scrapy的學習之路1(簡單例子)

strong os.path pro tle text arch try mobile pip scrapy的安裝 環境:python3.6 1 pip install -i https://pypi.douban.com/simple/ scrapy 2

spring boot Thymeleaf模板引擎 最簡單輸出例子

test leaf att map 控制器 輸出 span blog hello spring boot Thymeleaf模板引擎 最簡單輸出例子 控制器代碼如下: @GetMapping(value = "/test")public String test(Mo

SpringBoot整合Swagger2簡單例子

設定 tro -c fault rip comment sed itl java Swagger 是一個規範和完整的框架,用於生成、描述、調用和可視化 RESTful 風格的 Web 服務。總體目標是使客戶端和文件系統作為服務器以同樣的速度來更新。文件的方法,參數和模型緊密

Struts2的配置和一個簡單例子

ring public return tsp 正在 瀏覽器 使用 javassist github Struts2的配置和一個簡單的例子 筆記倉庫:https://github.com/nnngu/LearningNotes 簡介 這篇文章主要講如何在 IntelliJ

用一個簡單例子比較SVM,MARS以及BRUTO(R語言)

err r語 模型訓練 n! 也有 kernel 訓練 tps mea 背景重述 本文是ESL: 12.3 支持向量機和核中表12.2的重現過程。具體問題如下: 在兩個類別中產生100個觀測值。第一類有4個標準正態獨立特征\(X_1,X_2,X_3,X_4\)。第二類也有四

《Kubernetes權威指南第2版》學習(二)一個簡單例子

stop 輸入 rtu gist 用戶名 server 遠程 dock netstat 1: 安裝VirtualBox, 並下載CentOS-7-x86_64-DVD-1708.iso, 安裝centOS7,具體過程可以百度。 2:開啟centOS的SSH, 步驟如下:

STL_map.VC6簡單使用例子

sin std 使用 any for 字符 warn UNC include 1、 #include <windows.h> //使用map時會出現如下警告:主要意思是 identifier was truncated to ‘255‘ characters

一個簡單例子搞懂ES6之Promise

準備工作 實現 查看 AS spa div 原理 事件 例子 ES5中實現異步的常見方式不外乎以下幾種: 1. 回調函數 2. 事件驅動 2. 自定義事件(根本上原理同事件驅動相同) 而ES6中的Promise的出現就使得異步變得非常簡單。promise中的異步是這

用最簡單例子說明設計模式(三)之責任鏈、建造者、適配器、代理模式、享元模式

def dap CA 抽象 創建 tcl cte clas eth 責任鏈模式 一個請求有多個對象來處理,這些對象是一條鏈,但具體由哪個對象來處理,根據條件判斷來確定,如果不能處理會傳遞給該鏈中的下一個對象,直到有對象處理它為止 使用場景 1)有多個對象可以處理同

socket編程——一個簡單例子

google tdi 本地 及其 link 討論 pac 關閉連接 stdio.h 1、網絡中進程之間如何通信? 本地的進程間通信(IPC)有很多種方式,但可以總結為下面4類: 消息傳遞(管道、FIFO、消息隊列) 同步(互斥量、條件變量、讀寫鎖、文件和寫記錄鎖、信

數據分析,簡單繪圖

matplot mat 折線 lib 散點 線圖 atp 子圖 .py import matplotlib.pylab as pb #matplotlib模塊下pylab可以繪制相應的散點圖,折線圖,直線圖,子圖 #而subplot是繪制簡單的子圖,他是根據你提供相應的數據

一個簡單例子區分linux shell 正則表達式中的 *,+,?

-s span TE 的區別 entos oot bar 一個 區分 1,linux shell 正則表達式 *和+號的區別例子記憶:[root@mycentos data]# touch test.txt[root@mycentos data]# cat>>t

c++類編程的兩個簡單例子

function pointer efi AI == TP 數據 IT empty 關於棧的數據結構:類的頭文件定義 // stack.h -- class definition for the stack /*****************

一個簡單例子

syn lan sea eth str 返回 row reflect 限制 考慮下面這個簡單的例子,讓我們看看 reflection 是如何工作的。 import java.lang.reflect.*; public class DumpMethods {

rocketmq-簡單入門例子

1、環境搭建快速開始 本章節主要詳細介紹如何在本地計算機上設定RocketMQ訊息系統以傳送和接收訊息. 在本章節 前置條件 下載發行版本並構建 啟動NAME SERVER服務 啟動BROKE服務 傳送並接收訊息 關閉服務 前置條件 假定安裝了以下軟體: 推薦64b