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', '\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)
如果想了解更多的tkinter内容可以点击进入这位大佬的博客
https://www.cnblogs.com/shwee/p/9427975.html