python画正方形的代码drawingpanel_wxpython编程之 画板(一个不错的研究的完整示例)...
源代码:
[python]view plaincopy
import wx
import wx.html
import cPickle
import os
from wx.lib import buttons
from example1 import SketchWindow
class SketchFrame(wx.Frame):
def __init__(self, parent):
self.title = "Sketch Frame"
wx.Frame.__init__(self, parent, -1, self.title,
size=(800,600))
self.filename = ""
self.sketch = SketchWindow(self, -1)
self.sketch.SetMinSize((10,10))
wx.EVT_MOTION(self.sketch, self.OnSketchMotion)
self.initStatusBar()
self.createMenuBar()
self.createToolBar()
self.createPanel()
def createPanel(self):
controlPanel = ControlPanel(self, -1, self.sketch)
box = wx.BoxSizer(wx.HORIZONTAL)
box.Add(controlPanel, 0, wx.EXPAND)
box.Add(self.sketch, 1, wx.EXPAND)
self.SetSizer(box)
def initStatusBar(self):
self.statusbar = self.CreateStatusBar()
self.statusbar.SetFieldsCount(3)
self.statusbar.SetStatusWidths([-1, -2, -3])
def OnSketchMotion(self, event):
self.statusbar.SetStatusText("Pos: %s" %
str(event.GetPositionTuple()), 0)
self.statusbar.SetStatusText("Current Pts: %s" %
len(self.sketch.curLine), 1)
self.statusbar.SetStatusText("Line Count: %s" %
len(self.sketch.lines), 2)
event.Skip()
def menuData(self):
return [("&File", (
("&New", "New Sketch file", self.OnNew),
("&Open", "Open sketch file", self.OnOpen),
("&Save", "Save sketch file", self.OnSave),
("", "", ""),
("&Color", (
("&Black", "", self.OnColor, wx.ITEM_RADIO),
("&Red", "", self.OnColor, wx.ITEM_RADIO),
("&Green", "", self.OnColor, wx.ITEM_RADIO),
("&Blue", "", self.OnColor, wx.ITEM_RADIO),
("&Other...", "", self.OnOtherColor, wx.ITEM_RADIO))),
("", "", ""),
("About...", "Show about window", self.OnAbout),
("&Quit", "Quit", self.OnCloseWindow)))]
def createMenuBar(self):
menuBar = wx.MenuBar()
for eachMenuData in self.menuData():
menuLabel = eachMenuData[0]
menuItems = eachMenuData[1]
menuBar.Append(self.createMenu(menuItems), menuLabel)
self.SetMenuBar(menuBar)
def createMenu(self, menuData):
menu = wx.Menu()
for eachItem in menuData:
if len(eachItem) == 2:
label = eachItem[0]
subMenu = self.createMenu(eachItem[1])
menu.AppendMenu(wx.NewId(), label, subMenu)
else:
self.createMenuItem(menu, *eachItem)
return menu
def createMenuItem(self, menu, label, status, handler, kind=wx.ITEM_NORMAL):
if not label:
menu.AppendSeparator()
return
menuItem = menu.Append(-1, label, status, kind)
self.Bind(wx.EVT_MENU, handler, menuItem)
def createToolBar(self):
toolbar = self.CreateToolBar()
for each in self.toolbarData():
self.createSimpleTool(toolbar, *each)
toolbar.AddSeparator()
for each in self.toolbarColorData():
self.createColorTool(toolbar, each)
toolbar.Realize()
def createSimpleTool(self, toolbar, label, filename, help, handler):
if not label:
toolbar.AddSeparator()
return
bmp = wx.Image(filename, wx.BITMAP_TYPE_BMP).ConvertToBitmap()
tool = toolbar.AddSimpleTool(-1, bmp, label, help)
self.Bind(wx.EVT_MENU, handler, tool)
def toolbarData(self):
return (("New", "new.png", "Create new sketch", self.OnNew),
("", "", "", ""),
("Open", "open.png", "Open existing sketch", self.OnOpen),
("Save", "save.png", "Save existing sketch", self.OnSave))
def createColorTool(self, toolbar, color):
bmp = self.MakeBitmap(color)
tool = toolbar.AddRadioTool(-1, bmp, shortHelp=color)
self.Bind(wx.EVT_MENU, self.OnColor, tool)
def MakeBitmap(self, color):
bmp = wx.EmptyBitmap(16, 15)
dc = wx.MemoryDC()
dc.SelectObject(bmp)
dc.SetBackground(wx.Brush(color))
dc.Clear()
dc.SelectObject(wx.NullBitmap)
return bmp
def toolbarColorData(self):
return ("Black", "Red", "Green", "Blue")
def OnNew(self, event): pass
def OnColor(self, event):
menubar = self.GetMenuBar()
itemId = event.GetId()
item = menubar.FindItemById(itemId)
if not item:
toolbar = self.GetToolBar()
item = toolbar.FindById(itemId)
color = item.GetShortHelp()
else:
color = item.GetLabel()
self.sketch.SetColor(color)
def OnCloseWindow(self, event):
self.Destroy()
def SaveFile(self):
if self.filename:
data = self.sketch.GetLinesData()
f = open(self.filename, "w")
cPickle.dump(data, f)
f.close()
def ReadFile(self):
if self.filename:
try:
f = open(self.filename, "r")
data = cPickle.load(f)
f.close()
self.sketch.SetLinesData(data)
except cPickle.UnpicklingError:
wx.MessageBox("%s is not a sketch file." % self.filename,
"oops!", style=wx.OK|wx.ICON_EXCLAMATION)
wildcard = "Sketch files (*.sketch)|*.sketch|All files (*.*)|*.*"
def OnOpen(self, event):
dlg = wx.FileDialog(self, "Open sketch file...", os.getcwd(),
style=wx.OPEN, wildcard=self.wildcard)
if dlg.ShowModal() == wx.ID_OK:
self.filename = dlg.GetPath()
self.ReadFile()
self.SetTitle(self.title + " -- " + self.filename)
dlg.Destroy()
def OnSave(self, event):
if not self.filename:
self.OnSaveAs(event)
else:
self.SaveFile()
def OnSaveAs(self, event):
dlg = wx.FileDialog(self, "Save sketch as...", os.getcwd(),
style=wx.SAVE | wx.OVERWRITE_PROMPT,
wildcard = self.wildcard)
if dlg.ShowModal() == wx.ID_OK:
filename = dlg.GetPath()
if not os.path.splitext(filename)[1]:
filename = filename + ".sketch"
self.filename = filename
self.SaveFile()
self.SetTitle(self.title + " -- " + self.filename)
dlg.Destroy()
def OnOtherColor(self, event):
dlg = wx.ColourDialog(self)
dlg.GetColourData().SetChooseFull(True)
if dlg.ShowModal() == wx.ID_OK:
self.sketch.SetColor(dlg.GetColourData().GetColour())
dlg.Destroy()
def OnAbout(self, event):
dlg = SketchAbout(self)
dlg.ShowModal()
dlg.Destroy()
class SketchAbout(wx.Dialog):
text = """""
cellpadding="0" border="1">
Sketch!
Sketch is a demonstration program for wxPython In Action
Chapter 7. It is based on the SuperDoodle demo included with wxPython,
available at http://www.wxpython.org/
SuperDoodle and wxPython are brought to you by
Robin Dunn and Total Control Software, Copyright
1997-2006.
"""
def __init__(self, parent):
wx.Dialog.__init__(self, parent, -1, "About Sketch",
size=(440, 400) )
html = wx.html.HtmlWindow(self)
html.SetPage(self.text)
button = wx.Button(self, wx.ID_OK, "Okay")
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(html, 1, wx.EXPAND|wx.ALL, 5)
sizer.Add(button, 0, wx.ALIGN_CENTER|wx.ALL, 5)
self.SetSizer(sizer)
self.Layout()
class ControlPanel(wx.Panel):
BMP_SIZE = 16
BMP_BORDER = 3
NUM_COLS = 4
SPACING = 4
colorList = ("Black", "Yellow", "Red", "Green", "Blue", "Purple",
"Brown", "Aquamarine", "Forest Green", "Light Blue",
"Goldenrod", "Cyan", "Orange", "Navy", "Dark Grey",
"Light Grey")
maxThickness = 16
def __init__(self, parent, ID, sketch):
wx.Panel.__init__(self, parent, ID, style=wx.RAISED_BORDER)
self.sketch = sketch
buttonSize = (self.BMP_SIZE + 2 * self.BMP_BORDER,
self.BMP_SIZE + 2 * self.BMP_BORDER)
colorGrid = self.createColorGrid(parent, buttonSize)
thicknessGrid = self.createThicknessGrid(buttonSize)
self.layout(colorGrid, thicknessGrid)
def createColorGrid(self, parent, buttonSize):
self.colorMap = {}
self.colorButtons = {}
colorGrid = wx.GridSizer(cols=self.NUM_COLS, hgap=2, vgap=2)
for eachColor in self.colorList:
bmp = parent.MakeBitmap(eachColor)
b = buttons.GenBitmapToggleButton(self, -1, bmp, size=buttonSize)
b.SetBezelWidth(1)
b.SetUseFocusIndicator(False)
self.Bind(wx.EVT_BUTTON, self.OnSetColour, b)
colorGrid.Add(b, 0)
self.colorMap[b.GetId()] = eachColor
self.colorButtons[eachColor] = b
self.colorButtons[self.colorList[0]].SetToggle(True)
return colorGrid
def createThicknessGrid(self, buttonSize):
self.thicknessIdMap = {}
self.thicknessButtons = {}
thicknessGrid = wx.GridSizer(cols=self.NUM_COLS, hgap=2, vgap=2)
for x in range(1, self.maxThickness + 1):
b = buttons.GenToggleButton(self, -1, str(x), size=buttonSize)
b.SetBezelWidth(1)
b.SetUseFocusIndicator(False)
self.Bind(wx.EVT_BUTTON, self.OnSetThickness, b)
thicknessGrid.Add(b, 0)
self.thicknessIdMap[b.GetId()] = x
self.thicknessButtons[x] = b
self.thicknessButtons[1].SetToggle(True)
return thicknessGrid
def layout(self, colorGrid, thicknessGrid):
box = wx.BoxSizer(wx.VERTICAL)
box.Add(colorGrid, 0, wx.ALL, self.SPACING)
box.Add(thicknessGrid, 0, wx.ALL, self.SPACING)
self.SetSizer(box)
box.Fit(self)
def OnSetColour(self, event):
color = self.colorMap[event.GetId()]
if color != self.sketch.color and self.sketch.color in self.colorButtons:
self.colorButtons[self.sketch.color].SetToggle(False)
self.sketch.SetColor(color)
def OnSetThickness(self, event):
thickness = self.thicknessIdMap[event.GetId()]
if thickness != self.sketch.thickness:
self.thicknessButtons[self.sketch.thickness].SetToggle(False)
self.sketch.SetThickness(thickness)
class SketchApp(wx.App):
def OnInit(self):
bmp = wx.Image("splash.png").ConvertToBitmap()
wx.SplashScreen(bmp, wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
1000, None, -1)
wx.Yield()
frame = SketchFrame(None)
frame.Show(True)
self.SetTopWindow(frame)
return True
if __name__ == "__main__":
app = SketchApp(False)
app.MainLoop()
python画正方形的代码drawingpanel_wxpython编程之 画板(一个不错的研究的完整示例)...相关推荐
- python画正方形的代码_Python编程练习:使用 turtle 库完成正方形的绘制
Vuforia点击屏幕自动对焦,过滤UGUI的按钮 //点击屏幕自对对焦 #if UNITY_EDITOR )) #elif UNITY_ANDROID || UNITY_IPHONE &&a ...
- python画正方形的代码_python画正方形的代码是什么?
python画正方形的代码是什么? python画正方形的代码是:import turtle #导入 turtle.title("画正方形") turtle.pensize(5) ...
- python画正方形的代码_python绘制正方形螺旋线的代码分享
python绘制正方形螺旋线的代码分享 发布时间:2020-04-28 09:56:56 来源:亿速云 阅读:219 作者:小新 这篇文章主要为大家详细介绍了python绘制正方形螺旋线的代码分享,文 ...
- python画正方形的代码drawingpanel_Python shapes.Drawing方法代码示例
本文整理汇总了Python中reportlab.graphics.shapes.Drawing方法的典型用法代码示例.如果您正苦于以下问题:Python shapes.Drawing方法的具体用法?P ...
- python画正方形并涂色_这种图片怎么用python画出来,每一个数字代表一种颜色?...
Python 画正方形,写数字的代码如下: from PIL import Image, ImageDraw, ImageFont, ImageFilter WIDTH = 100 * 4 HEIGH ...
- python炫酷烟花表白源代码,用python画烟花的代码
大家好,小编为大家解答python绘制烟花特定爆炸效果的问题.很多人还不知道python炫酷烟花表白源代码,现在让我们一起来看看吧! 1.放烟花的代码 放烟花的代码相关内容如下: 烟花其实可以看成由一 ...
- python绘制月亮_用python画月亮的代码是什么?
用python画月亮的代码是什么? 用python画月亮的代码是import turtle as t t.screensize(800,600,"#483d8b")#画布尺寸和颜色 ...
- 用python画月亮的代码-用python画月亮的代码是什么?
用python画月亮的代码是什么? 用python画月亮的代码是import turtle as t t.screensize(800,600,"#483d8b")#画布尺寸和颜色 ...
- 用python画月亮怎么画_用python画月亮的代码是什么?_后端开发
c语言strlen用法详解_后端开发 在c语言中可以使用[strlen()]函数计算字符长度,该函数用于统计给定字符串的长度,其语法是[strlen(char *str)],其参数[*str]表示给定 ...
最新文章
- 逻辑模型设计步骤-分析主题域
- Java基础:由JVM内存模型详解线程安全
- 关于mount在unix系统上
- docker 搜寻 包 版本_ubuntu16.04下安装docker容器
- 新闻数据采集php,PHP新闻采集在线源码
- 天猫整站SSM-分页-herf(做个人学习笔记整理用)
- 如何测量代码运行时间
- pageContext对象、JSP标签
- 百度面试题:malloc/free 与 new/delete 的区别
- js 调用摄像头拍照
- 非标准的CAN波特率计算
- 聚类——密度聚类(DBSCAN、OPTICS、DENCLUE)
- 用Java代码实现一个简单的聊天室功能
- 2021阿里云ECS镜像导入本地VMware虚拟机
- PageOffice 安装使用说明
- flash player官网地址 建议不要下载flash.cn的
- Android直播软件开发中接入腾讯IM大概流程是怎样的
- 计算机的基本键盘知识,知识:计算机键盘上每个键的功能_计算机的基本知识_IT /计算机_信息...
- 骗子预警,大家注意,飞鸟资源网 www.fn121.c*o*m
- 11对战平台修改服务器,11对战平台新手使用指南
热门文章
- 最受欢迎的资源是高质量的GUI工具包
- mysql 数据库被覆盖_理解MySQL数据库覆盖索引
- mysql日志输出到syslog_在chroot环境下将MySQL日志输出到syslog
- Bottlerocket:一套专用型容器操作系统
- Linux内核进程管理:进程的“内核栈”、current宏、进程描述符
- Linux面试题100道
- 【gSOAP】gSOAP生成服务代理和对象C语言代码示例
- oracle报表文件,如何使用.NET代码从Crystal报表文件获取Oracle包名称
- html中隐藏内容蜘蛛会抓取吗,蜘蛛会抓取识别JS、CSS、JSON,对SEO有什么影响
- Php二叉树对称,PHP如何实现判断二叉树是否对称