阅读目录

  • Menu  菜单控件

  • Menubutton  菜单按钮控件

  • OptionMenu  选项菜单
  • Canvas  画布控件

Menu:

  说明:菜单控件,显示菜单栏,下拉菜单和弹出菜单

  属性:创建一个顶级菜单,需要先创建一个菜单实例,然后使用add()方法将命令和其他子菜单添加进去

            创建一个下拉菜单(或者其他的子菜单),方法是一样的,最主要的区别是它们最后需要添加到主菜单上(而不是窗口上)

  方法:add_cascade(label=' ',...)  

     add_command(label=' ',...)

from tkinter import *
root = Tk()
root.title('山丘')
root.geometry('200x200')
l = Label(root,text='',bg='yellow')
l.pack()
num=0
def show():
global num
l.config(text=num)
num+=1
menubar = Menu(root) #创建一个顶级的窗口
#创建一个下拉菜单'File',然后让它添加到顶级窗口上
filemenu = Menu(menubar,tearoff=1) #tearoff是在'File'菜单上加了一个小横杠,为0就是不加,和平时看到的一样
menubar.add_cascade(label='File',menu=filemenu)
filemenu.add_command(label='New',command=show)
filemenu.add_command(label='Open',command=show)
filemenu.add_command(label='Save',command=show)
filemenu.add_separator() #这个是分割线
filemenu.add_command(label='Rxit',command=root.quit)
editmenu = Menu(menubar,tearoff=0)#创建一个下拉菜单'Edit',然后让它添加到顶级窗口上
menubar.add_cascade(label='Edit',menu=editmenu)
editmenu.add_command(label='Cut',command=show)
editmenu.add_command(label='Copy',command=show)
editmenu.add_command(label='Paste',command=show)
root.config(menu=menubar)#显示菜单,
mainloop()

点击小横杠后的结果:

            

  这个菜单不仅可以添加常见的命令菜单,和可以添加单选或多选按钮

from tkinter import *
root = Tk()
def show():
print('被调用了')
#创建一个顶级的菜单
menubar = Menu(root)
#创建checkbutton关联变量
openVar = IntVar()
saveVar = IntVar()
exitVar = IntVar()
#创建一个下拉菜单‘文件’,然后将它添加到顶级的菜单上
filemenu = Menu(menubar,tearoff = True)
menubar.add_cascade(label='文件',menu=filemenu)
filemenu.add_checkbutton(label='打开',command=show,variable=openVar)
filemenu.add_checkbutton(label='保存',command=show,variable=saveVar)
filemenu.add_checkbutton(label='退出',command=root.quit,variable=exitVar)
#创建radiobutton关联变量
editVar = IntVar()
editVar.set(1)
#创建一个下拉菜单‘编辑’,然后将它添加到顶级的菜单上
editmenu = Menu(menubar,tearoff = False)
menubar.add_cascade(label='编辑',menu=editmenu)
editmenu.add_radiobutton(label='剪切',command=show,variable=editVar,value=1)
editmenu.add_radiobutton(label='拷贝',command=show,variable=editVar,value=2)
editmenu.add_radiobutton(label='粘贴',command=show,variable=editVar,value=3)
root.config(menu=menubar)#显示菜单
mainloop()

结果:

      

Menubutton:

  说明:菜单按钮控件,由于显示菜单项,它可以放在窗口的任意位置,并弹出下拉菜单

from tkinter import *
root = Tk()
def callback():
print('被调用了')
mb = Menubutton(root,text='点我',relief = RAISED)#这个是样式
mb.pack()
filemenu = Menu(mb)
filemenu.add_command(label= '打开',command=callback)
filemenu.add_command(label='保存',command=callback)
filemenu.add_separator()
filemenu.add_command(label='退出',command=callback)
mb.config(menu=filemenu)
mainloop()

结果:

     

OptionMenu:

  说明:这是下拉菜单的改版,主要用于记录用户选择了什么

from tkinter import *
root = Tk()
variable = StringVar()
variable.set('one')
w = OptionMenu(root,variable,'one','two','there')
w.pack()
def show():
print(variable.get())
Button(root,text='点我',command=show).pack()
mainloop()

结果:

         

  还有就是将很多选项添加到选项菜单中

from tkinter import *
root = Tk()
l = Label(root,text='',bg='yellow')
l.pack()
OPTIONS = ['A','B','C','D','E']
variable = StringVar()
variable.set(OPTIONS[0])
w = OptionMenu(root,variable,*OPTIONS)#这里注意
w.pack()
def show():
l.config(text=variable.get())
Button(root,text='点我',command=show).pack()
mainloop()

结果:

    

Canvas:

  说明:画布控件,显示图形元素如线条或文本

  属性:在Canvas上绘制对象,可以用create_xxx()的方法(xxx表示对象的类型)常用的:

  acr:弧形,扇形,弦

  image:PhotoImage的实例化对象

  line:线

  oval:圆形或椭圆形

  rectangle:矩形

  text:文本

  window:组件

  fill:填充颜色

  outline:轮廓线

from tkinter import *
root = Tk()
w = Canvas(root,width=200,height=100)
w.pack()
#普通的直线,以及矩形
line1 = w.create_line(0,50,200,50,fill='green')
line2 = w.create_line(100,0,100,100,fill='red',dash=(4,4))#这个是设置成虚线
rect1 = w.create_rectangle(50,25,150,75,fill='blue')
mainloop()

结果:

    

  如果你希望修改它们,可以用coords(),itemconfig(),move(),方法来移动画布上的对象

from tkinter import *
root = Tk()
w = Canvas(root,width=200,height=100)
w.pack()
#普通的直线,以及矩形
line1 = w.create_line(0,50,200,50,fill='green')
line2 = w.create_line(100,0,100,100,fill='red',dash=(4,4))
rect1 = w.create_rectangle(50,25,150,75,fill='blue')
#关于修改的方法
w.coords(line1,0,25,200,25)
w.itemconfig(rect1,fill='red')
w.delete(line2)
mainloop()

结果:

    

  当然了,还可以设置圆形,参数是指定一个限定的矩形(Tkinter会自动的在这个矩形里绘制一个椭圆)

from tkinter import *
root = Tk()
w = Canvas(root,width=650,height=350)
w.pack()
w.create_rectangle(200,100,600,300,dash = (4,4))
w.create_oval(200,100,600,300,fill='pink')
w.create_text(400,200,text='越过山丘\n才发现无人等候',font=('微软雅黑',20))
w.create_oval(0,0,200,200,fill='green')
w.create_oval(75,75,125,125,fill='yellow')
w.create_text(100,100,text='山丘')
mainloop()

结果:

    

  还支持画图,绘制超小的椭圆形的点,通过获取鼠标位置<B1 - Motion>

from tkinter import *
root = Tk()
w = Canvas(root,width=800,height=400)
w.pack()
def paint(event):
x1,y1 = (event.x - 1),(event.y - 1)
x2,y2 = (event.x + 1),(event.y + 1)
w.create_oval(x1,y1,x2,y2,fill='green')
w.bind('<B1-Motion>',paint)
Label(root,text='拖住鼠标左键进行移动,绘制你心中的蓝图').pack(side=BOTTOM)
mainloop()

结果:

    

  有了这些,就可以随心所欲的画图了

from tkinter import *
root = Tk()
w = Canvas(root,width=400,height=400)
w.pack()
w.create_line(0,0,400,400,fill='green',width=2,dash=(4,4))#线
w.create_line(400,0,0,400,fill='red',width=2,dash=(4,4))
w.create_rectangle(0,0,100,100,fill='green')    #矩形
w.create_rectangle(300,0,400,100,fill='blue')
w.create_rectangle(0,300,100,400,fill='yellow')
w.create_rectangle(300,300,400,400,fill='red')
w.create_oval(100,100,300,300,fill='black')    #球
w.create_text(200,200,text='山丘',fill='white',font=('微软雅黑',20))  #文本
mainloop()

结果:

    

参考文献:

  小甲鱼的python教学视频

  

tkinter学习-菜单与画布的更多相关文章

  1. Python Tkinter 学习成果:点歌软件music

    笔者工作业余时间也没什么爱好,社交圈子也小,主要娱乐就是背着自己带电瓶的卖唱音响到住地附近找个人多的位置唱唱KtV. 硬件上点歌就用笔记本电脑,歌曲都是网上下载的mkv格式的含有两个音轨的视频.因此点 ...

  2. tkinter学习-Lable&Button

    tkinter学习-La&Bu 我的第一个Tkinter程序 Label组件的使用 Button组件的使用 1.我的第一个Tkinter程序 常用的属性: title:设置窗口的标题 geom ...

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

    1.菜单 tkMenu.py import tkinter root = tkinter.Tk() menu = tkinter.Menu(root) submenu = tkinter.Menu(m ...

  4. tkinter学习(3)scale尺度条和menu菜单

    1.scale学习(尺度条)1.1 代码: #第1步:导出模块 import tkinter as tk #第2步:定义窗口,及其标题.大小和位置 win = tk.Tk() win.title('s ...

  5. python之tkinter学习目录

    前言 下面的目录结构,采用的学习视频资料是网易云课堂中[莫凡]老师的,在目录的最下面的地方给出了对应的链接! 学习是逐渐积累起来的,代码也是!下面的每一篇中的对应代码,都秉承着这样的一个理念:代码是成 ...

  6. Python Tkinter学习笔记

    介绍 入门实例 显示一个窗口,窗口里面有一个标签,显示文字 import tkinter as tk # 一个顶层窗口的实例(Top Level),也称为根窗口 app = tk.Tk() # 设置窗 ...

  7. Python:GUI之tkinter学习笔记1控件的介绍及使用

    相关内容: tkinter的使用 1.模块的导入 2.使用 3.控件介绍 Tk Button Label Frame Toplevel Menu Menubutton Canvas Entry Mes ...

  8. tkinter学习系列之(八) Canvas控件

    目录 目录 前言 (一)carves创建方法 (二)carves的画图方法 目录 前言 由于最近想在tkinter里内嵌matplotlib,由于用到tkinter里的carves控件,先学习一下. ...

  9. tkinter学习(4)frame、pack、canvas学习

    1.frame和pack学习 1.1 代码: import tkinter as tk window = tk.Tk() window.title('my window') window.geomet ...

随机推荐

  1. mysql之SQL入门与提升(一)

    一.基本的增删改查 1.1首先建一张表 DROP TABLE IF EXISTS `websites`;CREATE TABLE `websites` ( `id` int(11) NOT NULL ...

  2. iOS 7:漫谈#define 宏定义

           #define宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开 ...

  3. JQuery中的$().each 以及 $.each的区别

    最近一直在研究JS,今天看到遍历模块的时候,看到了这个函数: $(selector).each(function(index,element)) 但是想想,这个函数和之前项目里面用到的遍历数据的函数不 ...

  4. js onclick=‘save()’ 和 onclick='return save()'

    onclick="function()" 表示只会执行 function , 但是不会传回 function 中之回传值onclick = "return functio ...

  5. echarts 百度地图 json

    百度ECharts地图Json数据在线下载 最近需要写一个echarts地图统计表,苦于弄不到对应的地图json文件, CSDN 上下载的很多不完整或者不能用,功夫不负苦心人找到了这个. 阿里云地图选 ...

  6. JAVA 时间的使用

    今天老师又没有讲新课,不过讲了练习题,扩展了一下我们的思维. 今天就讲一下如何获取时间吧. 代码: import java.util.* public class Test{ public stati ...

  7. webpack(2)

    在普通页面中使用render函数渲染组件 render:function(createElements){//createElements是一个方法,调用它,能够把指定的组件模板,渲染成为HTML结构 ...

  8. css绝对定位元素实现居中的几个方法

    一:CSS绝对定位元素left设为50%实现水平居中 绝对定位的元素left设为50%时,是已左上角为原点的,所以只要再使用margin属性添加负值补偿回来即可.示例:[css]代码如下: #boar ...

  9. Oracle 存储过程调用语句

    #oracle 存储过程调用语句declare v_custName varchar2(10); --客户姓名 v_num number; --订单分布天数 v_time number; --每日订单 ...

  10. HDU 1964 Pipes (插头DP,变形)

    题意:给一个n*m的矩阵,每个格子都是必走的,且无障碍格子,每对格子之间都有一个花费,问哈密顿回路的最小花费. 思路: 这个和Formula1差不多,只是求得是最小花费,这只需要修改一下DP值为花费就 ...