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

Python -- Gui编程 -- Tkinter的使用 -- 菜单与画布的更多相关文章

  1. Python GUI编程(Tkinter) windows界面开发

    Python实现GUI简单的来说可以调用Tkinter库,这样一般的需求都可以实现,显示简单的windows窗口代码如下: python_gui.py 1 #!C:\Python27\python.e ...

  2. Python GUI编程--Tkinter

    今天看到了GUI编程,书上推荐用wxPython,去官网上看了看,发现Windows的最高支持到2.7,我用的是3.4版本,咋办,用自带的库--Tkinter呗,它是Python的默认GUI库,几乎是 ...

  3. python GUI编程tkinter示例之目录树遍历工具

    摘录 python核心编程 本节我们将展示一个中级的tkinter应用实例,这个应用是一个目录树遍历工具:它会从当前目录开始,提供一个文件列表,双击列表中任意的其他目录,就会使得工具切换到新目录中,用 ...

  4. Python -- Gui编程 -- Tkinter的使用 -- 基本控件

    1.按钮 tkBtton.py import tkinter root = tkinter.Tk() btn1 = tkinter.Button(root, anchor=tkinter.E,\ te ...

  5. Python GUI编程(Tkinter)(一)

    tk官网的教程学习: https://tkdocs.com/tutorial/firstexample.html 学习blog: https://www.cnblogs.com/aland-1415/ ...

  6. Python -- Gui编程 -- Tkinter的使用 -- 对话框消息框

    1.消息框 tkMessageBox.py import tkinter from tkinter import messagebox def cmd(): global n global butto ...

  7. Python GUI编程(Tkinter)Ⅱ

    Tkinter 组件 Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用.这些控件通常被称为控件或者部件. 目前有15种Tkinter的部件.我们提出这些部件以及一个简短的介 ...

  8. Python之GUI编程(Tkinter))

    不足之处,还请海涵,请指出不足.本人发布过的文章,会不断更改,力求减少错误信息. 一.重要放在开头:模块 如出现这种错误 ModuleNotFoundError: No module named 'n ...

  9. python大法好——ython GUI编程(Tkinter)

    Python GUI编程(Tkinter) Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的 ...

随机推荐

  1. cuDNN

    https://developer.nvidia.com/developer-program https://developer.nvidia.com/cudnn cuda和cuDNN的关系 http ...

  2. Android ContentProvider和Uri详解

    一.使用ContentProvider(内容提供者)共享数据 ContentProvider在android中的作用是对外共享数据, 也就是说你可以通过ContentProvider把应用中的数据共享 ...

  3. Delphi for iOS开发指南(6):在iOS应用程序中使用ComboBox组件来从列表中选择某一项

    http://blog.csdn.net/delphiteacher/article/details/8924110 Delphi for iOS开发指南(6):在iOS应用程序中使用ComboBox ...

  4. ES6 学习笔记之三 函数参数默认值

    定义函数时为参数指定默认值的能力,是现代动态编程语言的标配.在ES6出现之前,JavaScript是没有这种能力的,框架为了实现参数默认值,用了很多技巧. ES6 的默认参数值功能,与其他语言的语法类 ...

  5. DBCC--CHECKDB--使用快照还是表锁

    在SQL SERVER 2005及后续版本中, DBCC CHECKDB运行时不对数据表加排他锁,而使用内部数据库快照来保持数据一致性,内部数据库快照本质是sparse Filestream,使用Sp ...

  6. C#委托总结-入门篇

    1,概念:委托类型表示对具有特定参数列表和返回类型的方法的引用. 通过委托,可以将方法视为可分配给变量并可作为参数传递的实体. 委托是引用类型,可以把它看作是用来存方法的一种类型.比如说类型strin ...

  7. MySQL事务一致性理解

    一致性是指数据处于一种语义上的有意义且正确的状态.一致性是对数据可见性的约束,保证在一个事务中的多次操作的数据中间状态对其他事务不可见的.因为这些中间状态,是一个过渡状态,与事务的开始状态和事务的结束 ...

  8. Docker Compose 部署前后端分离应用

    部署前后端分离应用 容器化 Abp 应用 关于 Abp 应用的容器化,其实和普通的 ASP.NET Core 应用差不多,大家可以参考我此前的文章. 唯一需要注意的是:因为 Abp 解决方案中有多个项 ...

  9. T-SQL分页查询语句

    使用 ROW_NUMBER(),SQL Server版本要求2005及以上. SELECT * FROM ( SELECT *,ROW_NUMBER() OVER(ORDER BY UserID) A ...

  10. MyCat - 背景篇(1)

    此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. SQL与NoSQL 目前,对于互联网海量数据的存储以及处理,按使用场景,分为OLTP(联机事务处理,比如即时 ...