📄 draw2.py
字号:
from Tkinter import *
import Pmw, AppShell, math
class Draw(AppShell.AppShell):
usecommandarea = 1
appname = 'Drawing Program - Version 2'
frameWidth = 800
frameHeight = 600
def createButtons(self):
self.buttonAdd('Close', helpMessage='Close Screen',
statusMessage='Exit', command=self.close)
def createBase(self):
self.width = self.root.winfo_width()-10
self.height = self.root.winfo_height()-95
self.command= self.createcomponent('command', (), None,
Frame, (self.interior(),), width=self.width*0.25,
height=self.height, background="gray90")
self.command.pack(side=LEFT, expand=YES, fill=BOTH)
self.canvas = self.createcomponent('canvas', (), None,
Canvas, (self.interior(),), width=self.width*0.73,
height=self.height, background="white")
self.canvas.pack(side=LEFT, expand=YES, fill=BOTH)
Widget.bind(self.canvas, "<Button-1>", self.mouseDown)
Widget.bind(self.canvas, "<Button1-Motion>", self.mouseMotion)
Widget.bind(self.canvas, "<Button1-ButtonRelease>", self.mouseUp)
self.radio = Pmw.RadioSelect(self.command, labelpos = None,
buttontype = 'radiobutton', orient = 'vertical',
command = self.selectFunc, hull_borderwidth = 2,
hull_relief = 'ridge',)
self.radio.pack(side = TOP, expand = 1)
self.func = {}
for text, func in (('Select', None),
('Rectangle', self.drawRect),
('Oval', self.drawOval),
('Line', self.drawLine)):
self.radio.add(text)
self.func[text] = func
self.radio.invoke('Rectangle')
def selectFunc(self, tag):
self.currentFunc = self.func[tag]
def mouseDown(self, event):
self.currentObject = None
self.lastx = self.startx = self.canvas.canvasx(event.x)
self.lasty = self.starty = self.canvas.canvasy(event.y)
if not self.currentFunc:
self.selObj = self.canvas.find_closest(self.startx,
self.starty)[0]
self.canvas.itemconfig(self.selObj, width=2)
self.canvas.lift(self.selObj)
def mouseMotion(self, event):
cx = self.canvas.canvasx(event.x)
cy = self.canvas.canvasy(event.y)
if self.currentFunc:
self.lastx = cx
self.lasty = cy
self.canvas.delete(self.currentObject)
self.currentFunc(self.startx, self.starty,
self.lastx, self.lasty,
self.foreground, self.background)
else:
if self.selObj:
self.canvas.move(self.selObj, cx-self.lastx,
cy-self.lasty)
self.lastx = cx
self.lasty = cy
def mouseUp(self, event):
self.lastx = self.canvas.canvasx(event.x)
self.lasty = self.canvas.canvasy(event.y)
self.canvas.delete(self.currentObject)
self.currentObject = None
if self.currentFunc:
self.currentFunc(self.startx, self.starty,
self.lastx, self.lasty,
self.foreground, self.background)
else:
if self.selObj:
self.canvas.itemconfig(self.selObj, width=1)
def drawLine(self, x, y, x2, y2, fg, bg):
self.currentObject = self.canvas.create_line(x,y,x2,y2,
fill=fg)
def drawRect(self, x, y, x2, y2, fg, bg):
self.currentObject = self.canvas.create_rectangle(x, y,
x2, y2, outline=fg, fill=bg)
def drawOval(self, x, y, x2, y2, fg, bg):
self.currentObject = self.canvas.create_oval(x, y, x2, y2,
outline=fg, fill=bg)
def initData(self):
self.currentFunc = None
self.currentObject = None
self.selObj = None
self.foreground = 'black'
self.background = 'white'
def close(self):
self.quit()
def createInterface(self):
AppShell.AppShell.createInterface(self)
self.createButtons()
self.initData()
self.createBase()
if __name__ == '__main__':
draw = Draw()
draw.run()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -