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)​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何利用火狐获取网址中的提交链接

1、添加firebugz组件 2、用火狐打开你要的获取链接的网址例如 http://www.dce.com.cn/dalianshangpin/xqsj/tjsj26/jdtj/jdcjpm/index.html 3、按F12 4、点击你查询的按钮如点击如图下中的年月然后在firebug上点击网络获取里面的post链接 5、点击HTML 中的一个post &#xf…

python-22 eval json pickle shelve 之间差别

1.eval:可以转化字符串,字典,元组,列表等一般类型,不能转化类,函数 2.json:可以转化一般类型外,还可转化函数,可以在任何语言间转化,转化为字符串,可以写入文本&#xff…

打破冷漠僵局文章_研究僵局–第1部分

打破冷漠僵局文章我敢肯定我们都去过那里:太晚了,您饿了,您的服务器已挂起,或者您的应用程序正在以蜗牛的速度运行,并且有人喘着粗气想要您解决问题,然后再去解决。 您的应用程序意外挂起的可能原因之一是称…

vs2008下设置.h, .lib和 .dll 的路径配置全图及其意义

文件夹: 类型文件 include: .h (头文件) lib: .lib (库) 前面二者在vs2008中通过属性来配置。 bin: .dll (动态链接库) 动态链接库是通过系统路径来配置的。 添加库(libs)文件目录 …

按键精灵调用迅雷下载文件

Set ThunderAgent CreateObject("ThunderAgent.Agent") 建立迅雷接口对象ThunderAgent.AddTask "http://10.10.10.10/电影世界/12新电影/随风而逝.rmvb", "随风而逝.rmvb", "", "", "", - 1 , 0, - 1 Ca…

POJ1821 Fence

传送门 这道题是一道很好的单调队列优化DP的例子。 题目大意是有n个工人,每个人可以粉刷一段长度不超过l[i]的墙,如果一个人粉刷了那么他必须要粉刷第s[i]块墙,一个人粉刷一块墙能得到p[i]的钱,求所有工人得到的钱的最大值。 我们…

使用Spring Security和jdbc的Spring Boot

Spring安全性是一个很棒的框架,可节省开发人员的大量时间和精力。 此外,它还具有足够的灵活性,可以自定义并满足您的需求。 使用JDBC和Spring Security非常容易,并且许多操作是自动化的。 这将是一个最小的展示。 gradle文件包含…

map 循环_被问到Spring循环依赖怎么解决?秀给面试官看!内附图解

不知道最近有没有被一道Java面试题刷爆朋友圈,Spring框架的循环依赖如何解决。我收到了不少粉丝的提问,在了解到之后,也去网上查询了一些资料,自己也询问了身边的同事,总结出以下几个方面,今天就和我来看一…

调用ThunderAgent 迅雷局域网版的开发

P2P方式的下载,为我们获取互联网资料提供了一个强有力的工具,它可以争取最大的带宽,获取最大的下载速度。最早采用P2P方式下载的工具有BT、电骡等,后来许多传统“多线程断点续传类”软件,也增加了对的支持,…

详解虚拟机中为Linux添加硬盘

Linux添加硬盘是在原来安装的硬盘空间不够或者需要使用其他硬盘上的东西时候的解决办法,因为大多数初学者习惯使用虚拟机,这里以在Vmware虚拟机中实现Linux添加硬盘的具体步骤来详细介绍说这个问题。 Vmware中为linux增加硬盘 1. 在vmware的setting中为虚…

vue 常用功能和命令

1. vue-cli 构建项目 # 全局安装 vue-cli $ npm install --global vue-clif # 创建一个基于 webpack 模板的新项目 $ vue init webpack your-project-name # 安装依赖 $ npm install # 进入项目 $ cd your-project-name # 开发版本打包并运行 $ npm run dev# 线上环境整个项目打…

项目管理最佳实践方法_项目管理:控制项目进度最佳实践

5分钟站立会议5 MinutesStand-up Meeting(5分钟站立会议)是实践中项目进度管理的好办法。5分钟站立会议时,项目团队成员在固定时间(如每天上午8:30~8:35)、固定地点,每天站着围在一起&#xff0…

《海龟交易法则》经典梳理

序言,第一~第三章 海归交易法则序言本书是历史上最好的5本交易学著作之一的理由:1,重要的不是交易系统而是交易者贯彻交易系统的能力。2,用浅显易懂的语言阐述行为金融学的某些原理如何用于交易和影响交易。3&#xff…

Unix下C程序内存泄漏检测工具Valgrind安装与使用

Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。 Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-OReilly开源代码奖。 Valgrind遵守GNU通用公共许可证条款,是一款自由软件。 官网…

hibernate保存失败_Hibernate:保存与保存并保存或更新

hibernate保存失败save和saveOrUpdate之间的区别是什么或save和persist之间的区别是任何Hibernate面试中常见的面试问题,就像Hibernate中get和load方法之间的区别一样。 Hibernate Session类提供了几种通过save , saveOrUpdate和persist等方法将对象保存…

BZOJ 2957 楼房重建-线段树

这个题最主要的是解决一个统计答案的问题。 首先我们注意到,只要考虑右区间的答案统计就好了。 记左区间的最大值为K,当前右区间为P。 我们把当前右区间又分成两个子区间,s1,s2。 那么如果s1的最大值比K小,那么显然只要递归处理s2…

matlab 移动平均_两所高校被禁用MATLAB背后,是工业设计能力之争

不管是MATLAB,还是EDA,都指向了中国核心工业软件缺失的问题。 作者| Decode 邮箱|oudibjoutlook.com来源丨人民数字与品玩联合出品一款工科软件,最近成为科研界议论的焦点。2020 年 6 月 6 日开始,哈尔滨工…

MySQL 当记录不存在时insert,当记录存在时update

MySQL 当记录不存在时insert,当记录存在时更新 网上基本有三种解决方法。 第一种: 示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语句: INSERT INTO clients (client_id, client_na…

如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测

英文原文:How to Detect Memory Leaks Using Valgrind memcheck Tool for C / C 系统编程中一个重要的方面就是有效地处理与内存相关的问题。你的工作越接近系统,你就需要面对越多的内存问题。有时这些问题非常琐碎,而更多时候它会演变成一个…

如何在Activiti中使用瞬态变量

我们昨天发布的Activiti v6 Beta3中已经加入了一个非常需要的功能-临时变量。 在本文中,我将向您展示一个示例,该示例说明如何使用瞬态变量来覆盖一些以前不可能(或最佳)的高级用例。 到目前为止,Activiti中的所有变量…