tkinter学习-菜单与画布

阅读目录

  • 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教学视频

 

 

 

 

 

 

  

posted @ 2017-08-07 15:22  山丘i  阅读(1050)  评论(0编辑  收藏  举报