• Tkinter模块学习


    在最近 使用python的Tkinter模块自己写了些GUI界面,总结一下自己主要用到的组件和属性吧

    创建一个GUI程序

    • 导入tkinter模块
    • 创建控件
    • 指定这个控件的master,即这个控件属于哪一个
    • 告诉GM(geometry manager)有一个控件产生了
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    import tkinter
    top = tkinter.Tk()
    # 进入消息循环
    top.mainloop()
    

    ### 主要用到的组件

    Button:按钮控件

    Button(window, command=search, text='查找')
    

    解析:window:按钮显示在哪个窗口,command绑定了点击该按钮会触发的事件,text指按钮显示的字样

    Label:标签控件,可以显示文本和位图

    Label(window, text='书名:')
    

    Entry:输入控件,用于显示简单的文本内容

    pwd = StringVar()
    Entry(manager, textvariable=pwd, show='*')
    

    解析:pwd是存储输入的字符串变量,textvariable绑定的是变量的值,show表示显示出来形式,比如输入密码的时候显示出来的是***


    几何管理(控件的布置)

    Tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,以下是Tkinter公开的几何管理类:包、网格、位置

    (1)pack方法:包装

    #常用的pack(), 多数按照上和左的方式排列,不指定时默认为上。
    tk.Label(window,text='123nihao你好',fg='red').pack(side='top')       # 上
    tk.Label(window,text='123nihao你好',fg='red').pack(side='bottom') # 下
    tk.Label(window,text='123nihao你好',fg='red').pack(side='left')      # 左
    tk.Label(window,text='123nihao你好',fg='red').pack(side='right')   # 右
     
    tk.Label(window,text='123nihao你好',fg='red').pack(anchor='n')    # 北,效果同上
    tk.Label(window,text='123nihao你好',fg='red').pack(anchor='s')    # 南,效果同上
    tk.Label(window,text='123nihao你好',fg='red').pack(anchor='w')  # 西
    tk.Label(window,text='123nihao你好',fg='red').pack(anchor='e')   # 东
    

    (2)grid方法:网格

    #以规律的方格形式呈现。比如下面的代码就是创建一个三行三列的表格:参数row 为行,colum 为列,padx 单元格左右间距,pady单元格上下间距,ipadx单元格内部元素与单元格的左右间距,ipady单元格内部元素与单元格的上下间距。
    for i in range(3):
        for j in range(3):
          l=tk.Label(window,text='123nihao你好',bg='yellow',font=('Arial', 12), width=10, height=2)
           l.grid(row=i, column=j, padx=5, pady=10, ipadx=1, ipady=20)
    

    (3)place方法:位置

    tk.Label(window, text='Pl', font=('Arial', 20), ).place(x=20, y=100, anchor='nw')
    tk.Label(window, text='Pl', font=('Arial', 20), ).place(x=20, y=200, anchor='nw')
    tk.Label(window, text='Pl', font=('Arial', 20), ).place(x=80, y=100, anchor='nw')
    tk.Label(window, text='Pl', font=('Arial', 20), ).place(x=80, y=200, anchor='nw')
    

    注意

    3种方式不要混在一起同时执行,会导致程序卡掉,暂不清楚原因


    使窗口始终在屏幕的中间

    tk = tkinter.Tk()
    # 设置窗口居中
    width = 300
    height = 100
    #分别得到屏幕的宽度和搞度
    screenwidth = tk.winfo_screenwidth()
    screenheight = tk.winfo_screenheight()
    alignstr = '%dx%d+%d+%d' % (width, height, (screenwidth-width)/2, (screenheight-height)/2)
    tk.geometry(alignstr)
    
    # 设置窗口大小不可改变,可以不写
    tk.resizable(width=False,height=False)
    tk.mainloop()
    

    点击按钮后显示一个新的窗口

    (1)显示新窗口的时候销毁原来的窗口

    root = Tk()
    root.geometry(500,300)
    
    root.destroy()
    global new
    new = Tk()
    new.geometry(500,300)
    

    (2)在原来的窗口上生成一个子窗口(Toplevel)

    root = Tk()
    root.geometry(500,300)
    
    new = Toplevel(root)
    new.geometry(500,300)
    

    让当前窗口始终在最前面

    在打开子窗口时,比如在弹出messagebox的信息后,子窗口可能就会变成在主窗口之下,解决这个问题,就让当前窗口始终在最前

    root = Tk()
    root.geometry(500,300)
    
    new = Toplevel(root)
    new.geometry(500,300)
    new..wm_attributes("-topmost", 1)
    

    但是这样会出现一个问题就是,如果弹出提示信息的时候,提示框会被压在窗口之下,那么可以这样来解决,当要弹出提示框时,先将当前最前的窗口隐藏,等提示框点完后,再决定再显示还是销毁最前窗口

    # 隐藏当前窗口
    root.withdraw()
    messagebox.showerror(message='没有该读者的信息')
    # 显示隐藏的窗口
    root.deiconify()
    
  • 相关阅读:
    ArcGis面要素空间连接,取相交面积最大者 C#
    迅雷下载器无限制版_无敏感_无限速
    redhat 6.8 配置 centos6 163 的 yum 源
    apache cgi 程序: End of script output before headers
    centos php 安装 decrypt
    url传输中+转为%2B取到变空格的问题
    快速搭建自己的搜索引擎
    ffmpeg 文件推流 rtsp和rtmp
    svn 服务器操作
    edusoho迁移
  • 原文地址:https://www.cnblogs.com/Dandelion-L/p/11802265.html
Copyright © 2020-2023  润新知