from tkinter import ttk
from tkinter import *
import tkinter as tkwindow = 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', '\n')
                    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', '\n')
                except Exception:
                    t.insert('insert', '设备更新状态为:')
                    t.insert('insert', '\n')
                    t.insert('insert', '    ')
                    t.insert('insert', update)
                    t.insert('insert', '\n')
            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', '\n')
                    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', '\n')
                except Exception:
                    t.insert('insert', '设备更新状态为:')
                    t.insert('insert', '\n')
                    t.insert('insert', '    ')
                    t.insert('insert', update)
                    t.insert('insert', '\n')
            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', '\n')
                    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', '\n')
                except Exception:
                    t.insert('insert', '设备更新状态为:')
                    t.insert('insert', '\n')
                    t.insert('insert', '    ')
                    t.insert('insert', update)
                    t.insert('insert', '\n')
            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', '\n')
                    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', '\n')
                except Exception:
                    t.insert('insert', '设备更新状态为:')
                    t.insert('insert', '\n')
                    t.insert('insert', '    ')
                    t.insert('insert', update)
                    t.insert('insert', '\n')
            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', '\n')
                    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', '\n')
                except Exception:
                    t.insert('insert', '设备更新状态为:')
                    t.insert('insert', '\n')
                    t.insert('insert', '    ')
                    t.insert('insert', update)
                    t.insert('insert', '\n')
            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', '\n')
                    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', '\n')
                except Exception:
                    t.insert('insert', '设备更新状态为:')
                    t.insert('insert', '\n')
                    t.insert('insert', '    ')
                    t.insert('insert', update)
                    t.insert('insert', '\n')
        except Exception:
            t.insert('insert', '设备更新状态为:')
            t.insert('insert', '\n')
            t.insert('insert', '    ')
            res = "***更新失败***\n"
            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', '\n')
                    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', '\n')
                except Exception:
                    for ip in range(len(ips)):
                        if reboot[ip][ips[ip]] == '<Response [200]>':
                            t.insert('insert', '设备重启状态为:')
                            t.insert('insert', '\n')
                            for i in range(len(ips)):
                                t.insert('insert', '    ')
                                t.insert('insert', reboot[i])
                                t.insert('insert', '\n')
                        else:
                            for i in range(len(ips)):
                                t.insert('insert', '设备重启状态为:')
                                t.insert('insert', '\n')
                                t.insert('insert', '    ')
                                t.insert('insert', reboot[i])
                                t.insert('insert', '\n')
            except Exception:
                t.insert('insert', '设备重启状态为:')
                t.insert('insert', '\n')
                t.insert('insert', '    ')
                reboot = "***重启失败***\n"
                t.insert('insert', reboot)
                t.insert('insert', '\n')
    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)