zoukankan      html  css  js  c++  java
  • 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='越过山丘
    才发现无人等候',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教学视频

      

  • 相关阅读:
    servlet中doGet()和doPost()的区别
    Hibernate 的getHibernateTemplate()方法使用
    c3p0 数据库连接池
    java 事务处理的概念
    hibernate 关联映射
    java 迭代器
    struts 值桟问题
    struts 属性驱动与模型驱动
    java 单例模式
    XML Node和Element
  • 原文地址:https://www.cnblogs.com/mengd/p/7299319.html
Copyright © 2011-2022 走看看