zoukankan      html  css  js  c++  java
  • Python之tkinter创建GUI界面

    from tkinter import ttk
    from tkinter import *
    import tkinter as tk


    window = Tk()
    window.title('固件批量升级工具')#GUI窗口标题
    window.geometry('500x500+1000+200')#长*宽+显示在屏幕上的水平位置+显示在屏幕上的垂直位置
    tab_main=ttk.Notebook()#创建分页栏
    tab_main.grid(row = 0,column = 0,columnspan = 13,ipadx = 15)
    tab1=Frame(tab_main)#创建第一页框架
    tab1.place(x=0,y=30)
    tab_main.add(tab1,text='9000模式')


    (1)分页栏
    tab_main=ttk.Notebook()#创建分页栏
    tab_main.grid(row = 0,column = 0,columnspan = 13,ipadx = 15)
    tab1=Frame(tab_main)#创建分页栏的第一页框架
    tab1.place(x=0,y=30)
    (2)标签
    lab1=Label(tab1,text="XC9000IP地址:")
    lab1.grid(row = 0,column = 0,columnspan = 13,ipadx = 15)
    (3)下拉框
    cmb1= ttk.Combobox(tab1,width=20,height=100)
    cmb1.grid(row = 0,column = 30,columnspan = 40,rowspan=2,ipadx = 12,ipady = 5,pady=10)
    cmb1['value'] = ('192.168.3.100','192.168.5.200','192.168.3.250','192.168.3.98','192.168.4.2')
    cmb1.current(0)
    (4)勾选按钮
    Var=tk.IntVar()#接收勾选框的值,勾选值为Ture
    cb= tk.Checkbutton(tab1,text='重启',variable=Var,onvalue=1,offvalue=0,anchor='w')
    cb.grid(row = 6,column = 7,rowspan=1)
    (5)输入框
    name_input1= Text(tab1,width='10',height=4)
    name_input1.grid(row = 4,column = 30,columnspan = 30,ipadx = 55,pady=10)
    (6)返回值框
    t = tk.Text(tab1,width=40, height=10)
    t.grid(row = 10,column = 30,columnspan = 10,ipadx = 10,ipady = 1,pady=10,padx=2)
    (7)按钮
    btnOk = tk.Button(tab1,
            text='确认',
            width=2,
            height=1,
            padx=1,
            pady=1,
            anchor='center',
            command=print_name)
    btnOk.grid(row=6, column=35, columnspan=1, ipadx=40,padx=20)
    (8)选择按钮
    var = tk.StringVar()
    r1 = tk.Radiobutton(tab4, text='更新', variable=var, value='updata')
    r1 .grid(row=2, column=33)
    r2 = tk.Radiobutton(tab4, text='重启', variable=var, value='reboot')
    r2.grid(row=2, column=35)
    (9)位置分配方式
    1.grid
      row:行;column:列
      ipadx:设置控件里面水平方向空白区域大小; ipady:设置控件里面垂直方向空白区域大小;
      padx:设置控件周围水平方向空白区域保留大小; pady:设置控件周围垂直方向空白区域保留大小;
      columnspan:合并列
      例如:lab1=Label(tab1,text="XC9000IP地址:")
           grid(row=6, column=35, columnspan=3)
      将35、36、37三列合并给标签,标签显示在三列中居中显示两边会有空余
    2.pack
      pack是一种相对布局方式,指定控件的相对位置,精确位置会由系统完成
      Label(window,text='first',bg='red').pack(side=LEFT)靠左
      Label(window,text='second',bg='green').pack(side=RIGHT)靠右
      Label(window,text='third',bg='yellow').pack(side=BOTTOM靠底部
      Button(window,text='fourth',bg='blue').pack(fill=X)和窗口一样宽
    3.palce
      place()方法内的x和y参数可直接设定窗口组件的左上方位置,单位是像素
      lab1.place(x=0,y=0)
      lab2.place(x=30,y=30)

    下面是我自己设计的一个设备升级界面代码,仅供参考

    from tkinter import ttk
    from tkinter import *
    import tkinter as tk
    window = Tk()
    window.title('固件批量升级工具')#GUI窗口标题
    window.geometry('500x500+1000+200')#长*宽+显示在屏幕上的水平位置+显示在屏幕上的垂直位置
    tab_main=ttk.Notebook()#创建分页栏
    tab_main.grid(row = 0,column = 0,columnspan = 13,ipadx = 15)
    tab1=Frame(tab_main)#创建第一页框架
    tab1.place(x=0,y=30)
    tab_main.add(tab1,text='9000模式')
    #第一行标签和下拉框
    lab1=Label(tab1,text="XC9000IP地址:")
    lab1.grid(row = 0,column = 0,columnspan = 13,ipadx = 15)
    cmb1= ttk.Combobox(tab1,width=20,height=100)
    cmb1.grid(row = 0,column = 30,columnspan = 40,rowspan=2,ipadx = 12,ipady = 5,pady=10)
    cmb1['value'] = ('192.168.3.100','192.168.5.200','192.168.3.250','192.168.3.98','192.168.4.2')
    cmb1.current(0)
    Var=tk.IntVar()
    cb= tk.Checkbutton(tab1,text='重启',variable=Var,onvalue=1,offvalue=0,anchor='w')
    cb.grid(row = 6,column = 7,rowspan=1)
    #第二行标签和下拉框
    lab2=Label(tab1,text="设备型号:")
    lab2.grid(row = 2,column = 0,columnspan = 13,ipadx = 20)
    cmb2 = ttk.Combobox(tab1,width=20,height=100)
    cmb2.grid(row = 2,column = 30,columnspan = 40,rowspan=2,ipadx = 12,ipady = 5,pady=10)
    cmb2['value'] = ('XC-9172NV','XC-9176V','XC-9038','XC-9031NV-HS','XC-9223A','XC-M8031')
    cmb2.current(0)
    #第三行标签和输入框
    lab3=Label(tab1,text="升级包地址:")
    lab3.grid(row = 4,column = 0,columnspan = 13,ipadx = 20)
    name_input1= Text(tab1,width='10',height=4)
    name_input1.grid(row = 4,column = 30,columnspan = 30,ipadx = 55,pady=10)
    # ipadx:设置控件里面水平方向空白区域大小; ipady:设置控件里面垂直方向空白区域大小;
    # padx:设置控件周围水平方向空白区域保留大小; pady:设置控件周围垂直方向空白区域保留大小;
    #结果返回框
    t = tk.Text(tab1,width=40, height=10)
    t.grid(row = 10,column = 30,columnspan = 10,ipadx = 10,ipady = 1,pady=10,padx=2)

    def print_name():
    IP_9000=cmb1.get()
    devices_name= cmb2.get()
    firmware=name_input1.get('1.0','3.20')
    ips = data.get_ips(IP_9000, devices_name)
    reboot=Var.get()
    a=tk.messagebox.askokcancel("确认信息", "确定执行吗?")
    if a==True:
    try:
    code=Url_mode.judge_tybe(devices_name)
    if code==1000:
    update=Url_mode.update_post(ips, firmware,devices_name)
    try:
    for ip in range(len(ips)):
    update[ip][ips[ip]].json()
    t.insert('insert', '设备更新状态为:')
    t.insert('insert', ' ')
    for ip in range(len(ips)):
    update1 = update[ip][ips[ip]].json()
    t.insert('insert', ' ')
    t.insert('insert', ips[ip])
    t.insert('insert', ',')
    t.insert('insert', update1)
    t.insert('insert', ' ')
    except Exception:
    t.insert('insert', '设备更新状态为:')
    t.insert('insert', ' ')
    t.insert('insert', ' ')
    t.insert('insert', update)
    t.insert('insert', ' ')
    elif code == 2000:
    update=Url_mode.update_get(ips, firmware,devices_name)
    try:
    for ip in range(len(ips)):
    update[ip][ips[ip]].json()
    t.insert('insert', '设备更新状态为:')
    t.insert('insert', ' ')
    for ip in range(len(ips)):
    print(update[ip][ips[ip]])
    update1 = update[ip][ips[ip]].json()
    t.insert('insert', ' ')
    t.insert('insert', ips[ip])
    t.insert('insert', ',')
    t.insert('insert', update1)
    t.insert('insert', ' ')
    except Exception:
    t.insert('insert', '设备更新状态为:')
    t.insert('insert', ' ')
    t.insert('insert', ' ')
    t.insert('insert', update)
    t.insert('insert', ' ')
    elif code==3000:
    update=Url_mode.update_post_two(ips, firmware,devices_name)
    try:
    for ip in range(len(ips)):
    update[ip][ips[ip]].json()
    t.insert('insert', '设备更新状态为:')
    t.insert('insert', ' ')
    for ip in range(len(ips)):
    print(update[ip][ips[ip]])
    update1 = update[ip][ips[ip]].json()
    t.insert('insert', ' ')
    t.insert('insert', ips[ip])
    t.insert('insert', ',')
    t.insert('insert', update1)
    t.insert('insert', ' ')
    except Exception:
    t.insert('insert', '设备更新状态为:')
    t.insert('insert', ' ')
    t.insert('insert', ' ')
    t.insert('insert', update)
    t.insert('insert', ' ')
    elif code==4000:
    update=Url_mode.update_get_two(ips, firmware, devices_name)
    try:
    for ip in range(len(ips)):
    update[ip][ips[ip]].json()
    t.insert('insert', '设备更新状态为:')
    t.insert('insert', ' ')
    for ip in range(len(ips)):
    print(update[ip][ips[ip]])
    update1 = update[ip][ips[ip]].json()
    t.insert('insert', ' ')
    t.insert('insert', ips[ip])
    t.insert('insert', ',')
    t.insert('insert', update1)
    t.insert('insert', ' ')
    except Exception:
    t.insert('insert', '设备更新状态为:')
    t.insert('insert', ' ')
    t.insert('insert', ' ')
    t.insert('insert', update)
    t.insert('insert', ' ')
    elif code==5000:
    update=Url_mode.update_post_get(ips, firmware, devices_name)
    try:
    for ip in range(len(ips)):
    update[ip][ips[ip]].json()
    t.insert('insert', '设备更新状态为:')
    t.insert('insert', ' ')
    for ip in range(len(ips)):
    print(update[ip][ips[ip]])
    update1 = update[ip][ips[ip]].json()
    t.insert('insert', ' ')
    t.insert('insert', ips[ip])
    t.insert('insert', ',')
    t.insert('insert', update1)
    t.insert('insert', ' ')
    except Exception:
    t.insert('insert', '设备更新状态为:')
    t.insert('insert', ' ')
    t.insert('insert', ' ')
    t.insert('insert', update)
    t.insert('insert', ' ')
    elif code==6000:
    update=Url_mode.update_get_post(ips, firmware, devices_name)
    try:
    for ip in range(len(ips)):
    update[ip][ips[ip]].json()
    t.insert('insert', '设备更新状态为:')
    t.insert('insert', ' ')
    for ip in range(len(ips)):
    print(update[ip][ips[ip]])
    update1 = update[ip][ips[ip]].json()
    t.insert('insert', ' ')
    t.insert('insert', ips[ip])
    t.insert('insert', ',')
    t.insert('insert', update1)
    t.insert('insert', ' ')
    except Exception:
    t.insert('insert', '设备更新状态为:')
    t.insert('insert', ' ')
    t.insert('insert', ' ')
    t.insert('insert', update)
    t.insert('insert', ' ')
    except Exception:
    t.insert('insert', '设备更新状态为:')
    t.insert('insert', ' ')
    t.insert('insert', ' ')
    res = "***更新失败*** "
    t.insert('insert', res)
    sleep(3)
    if reboot==1:
    try:
    reboot = Url_mode.update_reboot(ips, devices_name)
    try:
    for ip in range(len(ips)):
    reboot[ip][ips[ip]].json()
    t.insert('insert', '设备重启状态为:')
    t.insert('insert', ' ')
    for ip in range(len(ips)):
    reboot[ip][ips[ip]].json()
    for i in range(len(ips)):
    t.insert('insert', ' ')
    t.insert('insert', reboot[i])
    t.insert('insert', ' ')
    except Exception:
    for ip in range(len(ips)):
    if reboot[ip][ips[ip]] == '<Response [200]>':
    t.insert('insert', '设备重启状态为:')
    t.insert('insert', ' ')
    for i in range(len(ips)):
    t.insert('insert', ' ')
    t.insert('insert', reboot[i])
    t.insert('insert', ' ')
    else:
    for i in range(len(ips)):
    t.insert('insert', '设备重启状态为:')
    t.insert('insert', ' ')
    t.insert('insert', ' ')
    t.insert('insert', reboot[i])
    t.insert('insert', ' ')
    except Exception:
    t.insert('insert', '设备重启状态为:')
    t.insert('insert', ' ')
    t.insert('insert', ' ')
    reboot = "***重启失败*** "
    t.insert('insert', reboot)
    t.insert('insert', ' ')
    else:
    pass

    btnOk = tk.Button(tab1,
    text='确认',
    width=2,
    height=1,
    padx=1,
    pady=1,
    anchor='center',
    command=print_name)
    btnOk.grid(row=6, column=35, columnspan=1, ipadx=40,padx=20)


    如果想了解更多的tkinter内容可以点击进入这位大佬的博客
    https://www.cnblogs.com/shwee/p/9427975.html

  • 相关阅读:
    Bootstrap3.0学习第八轮
    内存管理相关的信息
    SVN merge
    Asp.Net MVC 3
    formValidator
    jquery 分页控件2
    从零开始学C++之STL(四):算法简介、7种算法分类
    (Java实现) 过河卒
    (Java实现) N皇后问题
    (Java实现) N皇后问题
  • 原文地址:https://www.cnblogs.com/1527275083gj/p/14970232.html
Copyright © 2011-2022 走看看