zoukankan      html  css  js  c++  java
  • Python Tkinter 学习历程 一

    一丶一个简单的程序

    from tkinter import * #引入所有类
    #查看tk版本
    #tkinter._test()
    root = Tk(); #对这个类进行实例化 w1 = Label(root,text="我是来搞笑的啦",background = "green" ) #组件 w2 = Label(root,text="我是来搞笑的啦",background = "red" ) w1.pack();#布局
    w2.pack(side=TOP,expand = NO,fill=BOTH); #红色位置应该在下面的,但是在pack设置了参数,就可以进行布局处理了
    root.mainloop() #事件循环
    #关于更多的pack参数,请看Python源码注释,pack不能同时和grid布局同时使用,...
    """Pack a widget in the parent widget. Use as options:
    after=widget - pack it after you have packed widget
    anchor=NSEW (or subset) - position widget according to
    given direction
    before=widget - pack it before you will pack widget
    expand=bool - expand widget if parent size grows
    fill=NONE or X or Y or BOTH - fill widget if widget grows
    in=master - use master to contain this widget
    in_=master - see 'in' option description
    ipadx=amount - add internal padding in x direction
    ipady=amount - add internal padding in y direction
    padx=amount - add padding in x direction
    pady=amount - add padding in y direction
    side=TOP or BOTTOM or LEFT or RIGHT - where to add this widget.
    """

    效果:

    二丶点击事件绑定(1)

    from tkinter import * #引入所有类
    def xinlabel():
        global xin
        s = Label(xin,text ="I love python!")
        s.pack()
    
    xin = Tk();
    b1 = Button(xin,text="波波",command=xinlabel)
    b1.pack()
    xin.mainloop()

    效果:

     

    三丶界面简单美化

    from tkinter import * #引入所有类
    xin = Tk();
    b1 = Button(xin,text="波波")
    b1['width'] = 20
    b1['height'] = 4
    b1.pack()
    b2 = Button(xin,text="BOBO")
    b2['width'] = 25
    b2['background'] = 'red'
    b2.pack()
    xin.mainloop()
    """
    1.关于按钮,我们重点理解的就是它如何和事件进行绑定 的。 
    2.当然一些其他属性用来美化按钮也很重要。
    """

    效果:

     四 . grid布局

    """"brid布局"""
    from tkinter import *
    xin  = Tk()
    Label(xin,text = "账号:").grid(row=0,sticky=W)
    #Entry 输入框,row 第几行
    #sticky默认的空间会在网格中居中显示。你可以使用sticky选项去指定对齐方式,可以选择的值有:N/S/E/W,分别代表上/下/左/右。如果你想让label靠左显示,你可以设置stricky的值为W
    #column 相当于css的padding-left ^_^ 吧
    Entry(xin).grid(row=0,column=1,sticky=E) Label(xin,text = "密码:").grid(row=1,sticky=W) Entry(xin).grid(row=1,column=1,sticky=E) Button(xin,text=" 登录 ").grid(row=2,column=1,sticky=E) xin.mainloop()

    效果

    五丶事件

    事件是什么?, event 是事件的英文表述,事件常用的函数是bind  ,用法: 窗体对象.bind(事件类型,回调函数) 

    from tkinter import *
    def xinlabel (event):
        #global xin
        s = Label(xin,text="事件函数!")
        s.pack();
    
    xin = Tk();
    b1 = Button(xin,text="点我弹出文字1");
    b2 = Button(xin,text="点我弹出文字2");
    #特别理解好b1 = 那个Button,就绑定那个事件,也就是编程中的 对象 , 不是生活中的对象
    b1.bind("<Button-1>",xinlabel)
    b1.pack()
    b2.pack()
    xin.mainloop()
    
    """
    bind
    第一个参数是绑定<Button-1>按钮,前面是事件对象,其中1,2,3 分别代表鼠标左键,中,右
    第二个参数是函数名,不要带任何标点符号,不然出错
    <KeyPress-A>表示 A 键被按下,其中的 A 可以换成其他 的键位。
    <Control-V>表示按下的是 Ctrl 和 V 键,V 可以换成其他 键位。
    <F1>表示按下的是 F1 键,对于 Fn 系列的,都可以随便
    """

    效果和二一样的 

    六丶登陆事件

    """"登陆框"""
    from tkinter import *
    #定义一个注册方法
    def reg():
        s1 = e1.get() #获取e1输入框的内容
        s2 = e2.get()
        t1 = len(s1)
        t2 = len(s2)
        if s1 =='111' and s2 =='111':
            c['text'] =='登陆成功' #显示内容
        else:
            c['text'] == "用户名或密码错误!"
            e1.delete(0,t1) #end参数可以清空内容 和t1 亿元
            e2.delete(0,t2)
    root = Tk() #实例化一个对象
    l = Label(root,text = "用户名:") #创建一个Label标签
    l.grid(row = 0,column = 0,sticky = W) #布局
    
    e1 = Entry(root) #创建一个输入框
    e1.grid(row = 0, column = 1,sticky = E)
    
    l2 = Label(root,text="密码:")
    l2.grid(row = 1 , column = 0,sticky = W )
    
    e2 = Entry(root)
    e2['show'] = '*' #密码用 show = '*' 就可以隐藏了
    e2.grid(row = 1, column = 1,sticky = E)
    
    b = Button(root,text="登陆",command = reg ) #按钮 等于reg 方法
    b.grid(row = 2,column = 1,sticky = E)
    
    #显示登陆内容
    c = Label(root,text='')
    c.grid(row = 3)
    root.mainloop()

    效果同上登陆框

    七丶菜单
    """菜单"""
    from tkinter import *
    root = Tk()
    #创建一个一级菜单对象
    menubar = Menu(root)
    #创建一个一级子菜单
    FileMenu = Menu(menubar, tearoff=False)  # tearoff=False 表示这个菜单不可以被拖拽出来
    #新建一个子菜单列
    FileMenu.add_command(label='打开')
    FileMenu.add_command(label='导入')
    #一个下拉菜单的分割线
    FileMenu.add_separator()
    FileMenu.add_command(label='退出')
    #为一级创建多级菜单 , 参数2为 2 级菜单对象 参考第七行
    menubar.add_cascade(label=' 文件 ', menu = FileMenu)
    #root['menu'] = menubar #功能同下
    root.config(menu=menubar)
    
    mainloop()

    效果:

    八丶消息框

    """消息框"""
    from tkinter.messagebox import *
    #showinfo(title="你好",message="2017")
    #$print("info", showinfo("Spam", "Egg Information"))
    #print("warning", showwarning("Spam", "Egg Warning"))
    #print("error", showerror("Spam", "Egg Alert"))
    #print("question", askquestion("Spam", "Question?"))
    #print("proceed", askokcancel("Spam", "Proceed?"))
    #print("yes/no", askyesno("Spam", "Got it?"))
    #print("yes/no/cancel", askyesnocancel("Spam", "Want it?"))
    #print("try again", askretrycancel("Spam", "Try again?"))
    t = askyesno("Spam", "Got it?")
    if t :
        print("111")
    else:
        print("222")
  • 相关阅读:
    SurfaceView 和 View 区别
    投资学第一章 investments-introduction
    HDU 1879 继续畅通工程 (Prim(普里姆算法)+Kruskal(克鲁斯卡尔))
    多个Activity之间的切换与数据交互
    HDU 4715 Difference Between Primes (打表)
    org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x0) was found in the CDATA sectio
    用纯jsp实现用户的登录、注册与退出
    Java单态模式
    植物-蔬菜:刺儿菜
    汉语-词语:生活
  • 原文地址:https://www.cnblogs.com/wtcl/p/6594602.html
Copyright © 2011-2022 走看看