您的位置:首页 > 编程语言 > Python开发

Python -- Gui编程 -- Tkinter的使用 -- 菜单与画布

2014-05-04 16:48 891 查看
1.菜单

tkMenu.py

import tkinter

root = tkinter.Tk()

menu = tkinter.Menu(root)
submenu = tkinter.Menu(menu, tearoff=0)
submenu.add_command(label='Open')
submenu.add_command(label='Save')
submenu.add_command(label='Close')
menu.add_cascade(label='File', menu=submenu)

submenu = tkinter.Menu(menu, tearoff=0)
submenu.add_command(label='Copy')
submenu.add_command(label='Paste')
submenu.add_separator()
submenu.add_command(label='Cut')
menu.add_cascade(label='Edit', menu=submenu)

submenu = tkinter.Menu(menu, tearoff=0)
submenu.add_command(label='About')
menu.add_cascade(label='Help', menu=submenu)

root.config(menu=menu)
root.mainloop()




2.画布

tkCanvas.py

import tkinter

root = tkinter.Tk()

canvas = tkinter.Canvas(root, width=600, height=480, bg='white')
img = tkinter.PhotoImage(file = 'smile.gif')
canvas.create_image(300, 50, image=img)
canvas.create_text(300, 75, text='Use Canvas', fill='blue')
canvas.create_text(302, 77, text='Use Canvas', fill='gray')
canvas.create_polygon(290, 114, 316, 114, 330, 130, 310, 146, 284, 146, 270, 130)
canvas.create_oval(280, 120, 320, 140, fill='white')
canvas.create_line(250, 130, 350, 130)
canvas.create_line(300, 100, 300, 160)
canvas.create_rectangle(90, 190, 510, 410, width=5)
canvas.create_arc(100, 200, 500, 400, start=0, extent=240, fill='pink')
canvas.create_arc(103, 203, 500, 400, start=241, extent=118, fill='red')
canvas.pack()

root.mainloop()






3.简单几何画板的实现

tkDraw.py

import tkinter

class MyButton:
def __init__(self, root, canvas, label, type):
self.root = root
self.canvas = canvas
self.label = label
if type == 0:
button = tkinter.Button(root, text='Draw Line', command=self.DrawLine)
elif type == 1:
button = tkinter.Button(root, text='Draw Arc', command=self.DrawArc)
elif type == 2:
button = tkinter.Button(root, text='Draw Rec', command=self.DrawRec)
else:
button = tkinter.Button(root, text='Draw Oval', command=self.DrawOval)
button.pack(side = 'left')
def DrawLine(self):
self.label.text.set('Draw Line')
self.canvas.SetStatus(0)
def DrawArc(self):
self.label.text.set('Draw Arc')
self.canvas.SetStatus(1)
def DrawRec(self):
self.label.text.set('Draw Rectangle')
self.canvas.SetStatus(2)
def DrawOval(self):
self.label.text.set('Draw Oval')
self.canvas.SetStatus(3)

class MyCanvas:
def __init__(self, root):
self.status = 0
self.draw = 0
self.root = root
self.canvas = tkinter.Canvas(root, bg='white', width=600, height=480)
self.canvas.pack()
self.canvas.bind('<ButtonRelease-1>', self.Draw)
self.canvas.bind('<Button-2>', self.Exit)
self.canvas.bind('<Button-3>', self.Del)
self.canvas.bind_all('<Delete>', self.Del)
self.canvas.bind_all('<KeyPress-d>', self.Del)
self.canvas.bind_all('<KeyPress-e>', self.Exit)
def Draw(self, event):
if self.draw == 0:
self.x = event.x
self.y = event.y
self.draw = 1
else:
if self.status == 0:
self.canvas.create_line(self.x, self.y, event.x, event.y)
self.draw = 0
elif self.status == 1:
self.canvas.create_arc(self.x, self.y, event.x, event.y)
self.draw = 0
elif self.status == 2:
self.canvas.create_rectangle(self.x, self.y, event.x, event.y)
self.draw = 0
else:
self.canvas.create_oval(self.x, self.y, event.x, event.y)
self.draw = 0
def Del(self, event):
items = self.canvas.find_all()
for item in items:
self.canvas.delete(item)
def Exit(self, event):
self.root.quit()
def SetStatus(self, status):
self.status = status

class MyLabel:
def __init__(self, root):
self.root = root
self.canvas = canvas
self.text = tkinter.StringVar()
self.text.set('Draw Line')
self.label = tkinter.Label(root, textvariable=self.text, fg='red', width=50)
self.label.pack(side='left')

root = tkinter.Tk()
canvas = MyCanvas(root)
label = MyLabel(root)
MyButton(root, canvas, label, 0)
MyButton(root, canvas, label, 1)
MyButton(root, canvas, label, 2)
MyButton(root, canvas, label, 3)
root.mainloop()


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: