欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

wxpython图形编程_wxpython  图像编程

发布时间:2023/12/2 python 37 豆豆
生活随笔 收集整理的这篇文章主要介绍了 wxpython图形编程_wxpython  图像编程 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1)目前遇到一个问题,就是wxpython显示一个图片,然后可以在图片上画矩形,点,line,circle and so

on,最后保存矩形的坐标.但是现在可以在屏幕上画矩形,无法在图片上做标记,我反思的原因是:如果要画图型,一定要创建一个dc对象,不管是memorydc

or clientdc,这个对象都是以整个屏幕为基础的。而如果要显示一张图片的话,一定是要把图片转换成bitmap类型,然后再转成静态bitmap,也就是staticbitmap类型,和一个静态文本类似,staticbitmap存储的是每一个像素的坐标和像素值,相当于一个数组。

总结来讲,就是觉得wxpython 的

dc的功能或许是自己还没有理解,或许是根本没考虑到动态做label,觉得dc无法实现在一个静态文件上动态画图。​

目前整个逻辑我想不通,目前还没有实现,在stackoverflow上搜了一下,baidu

so了一下,也没有人解释。mark一下,dc的概念。​

dc

:要在屏幕上绘画,我们要用到一个名为device context(设备上下文)的wxPython对象。设备上下文代表抽象的设备,它对于所有的设备有一套公用的绘画方法

(1)在图片上画好矩形或者文本,然后将图片显示出来​​

注意:MemoryDC works on a Bitmap, not a StaticBitmap

control.​

http://stackoverflow.com/questions/20287152/wxpython-draw-text-onto-existing-bitmap-or-image​

代码如下:

bitmap = wx.Bitmap(location)

dc = wx.MemoryDC(bitmap)

text = 'whatever'

w, h = dc.GetSize()

tw, th = dc.GetTextExtent(text)

dc.DrawText(text, (w - tw) / 2, (h - th) / 2) #display

text in center del dc control = wx.StaticBitmap(self, -1,

bitmap)​

(2)wx.MemoryDC:用于绘制图形到内存中的一个位图中,此时不被显示。然后你可以选择该位图,并使用wx.DC.Blit()方法来把这个位图绘画到一个窗口中。​

http://stackoverflow.com/questions/11786103/wxpython-drawing-on-a-staticbitmap​

def Draw(self, e):

img =

wx.Image("./poster/Test2.png",

wx.BITMAP_TYPE_ANY)

bit =

wx.EmptyBitmap(517,524)

imgBit =

wx.BitmapFromImage(img)

dc =

wx.MemoryDC(imgBit)

dc.SetPen(wx.Pen(wx.RED,

1))

dc.DrawLines(((83, 375),

(83, 42), (120, 42), (120,375), (83,375)))

dc.SelectObject(wx.NullBitmap)# I didn't know I had to deselect the

DC self.imageCtrl.SetBitmap(imgBit)

​imgBit.SaveFile("bit.bmp",

wx.BITMAP_TYPE_BMP)

我已经知道了需要对图片做什么操作,在不显示图片的情况下预定义操作,然后保存图片,图片上有相应的矩形。​

(3)wxmemory两个主要函数:dc=wxmemory()

dc.SelectObject(self, bitmap)​

http://wxpython.org/docs/api/wx.MemoryDC-class.html

(4)给panel控件设置一个backgroundimage​

#coding:utf-8

import wx

#导入wxformbuilder生成的代码

import BgDemo

class Main(wx.App):

def __init__(self,

redirect=False, filename=None):

wx.App.__init__(self, redirect,

filename)

dlg = BgDemo.MyFrame(None)

dlg.m_panel1.Bind(wx.EVT_ERASE_BACKGROUND,

self.OnEraseBackground)

dlg.Show()

def

OnEraseBackground(self, evt):

dc = evt.GetDC()

if not dc:

dc =

wx.ClientDC(self)

rect =

self.GetUpdateRegion().GetBox()

dc.SetClippingRect(rect)

dc.Clear()

bmp = wx.Bitmap("Sunset.jpg")

dc.DrawBitmap(bmp, 0, 0)

from:http://www.111cn.net/phper/python/59761.htm

(5)​

总结

以上是生活随笔为你收集整理的wxpython图形编程_wxpython  图像编程的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。