使用Python GUI去创建阿里云负载均衡

前言

最近闲来无事研究了一下python3的gui,就用最基础的tkinter去做了一个购买阿里云负载均衡的脚本,先看一下效果:
akb48

点击“确认”按钮之后,就会出现这样一个谈话框:
akb48

确认参数完毕之后,若点击取消则返回上一层页面修改,如果点击确认则进行购买。

这个脚本需要的基础知识可以去看一下莫烦大大的tkinter教学系列,地址是https://morvanzhou.github.io/tutorials/python-basic/tkinter/ ,B站有全部的视频,不到10分钟一节课,还是很棒的。

脚本正文

脚本内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/usr/bin/env python 
# -*- coding:utf-8 -*-
#作者:ChrisChan
#用途:py3脚本,使用GUI购买阿里云SLB脚本
import tkinter as tk
import tkinter.ttk as ttk #下拉式菜单
from tkinter import messagebox #弹窗
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkslb.request.v20140515.CreateLoadBalancerRequest import CreateLoadBalancerRequest

#秘钥集合
aksk_A = ["第一个账号的ak","第一个账号的sk"]
aksk_B = ["第2个账号的ak","第2个账号的sk"]
aksk_C = ["第3个账号的ak","第3个账号的sk"]

#创建一个类可以建立负载均衡
class CreateSlb(object):
def __init__(self,ak,sk,domain):
self.ak = ak
self.sk = sk
self.domain = domain

def create(self,name,nettype):
client = AcsClient(self.ak,self.sk,self.domain)
request = CreateLoadBalancerRequest()
request.set_accept_format('json')
request.set_LoadBalancerSpec("slb.s1.small") #这里是负载均衡的规格,
request.set_LoadBalancerName(name)
request.set_AddressType(nettype)
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))

window = tk.Tk() #建立一个窗体
window.title("购买阿里云负载均衡") #窗体的标题

Label1 = tk.Label(window, text='请输入负载均衡名称:').grid(row=0, column=0)
v1 = tk.StringVar()
e1 = tk.Entry(window, textvariable=v1)
e1.grid(row=0,column=1,padx=10,pady=5) # 设置输入框显示的位置,以及长和宽属性

l = tk.Label(window,bg="yellow",width=20,text="默认值是1")
l.grid(row=1,column=1,padx=10,pady=5)

parameter1 = tk.StringVar()
l1 = tk.Label(window,bg='pink',width=20,height=5,text="请选择对应的阿里云账号")
l1.grid(row=2,column=1,rowspan=3,padx=10,pady=5)

parameter2 = tk.StringVar()
l2 = tk.Label(window,bg='yellow',width=20,text="请选择实例所在的地域")
l2.grid(row=5,column=1,padx=10,pady=5)

parameter3 = tk.StringVar()
l3 = tk.Label(window,bg='green',width=20,height=3,text="请选择网络类型")
l3.grid(row=10,column=1,rowspan=2,padx=10,pady=5)

def clickMe():
result = messagebox.askokcancel("请确认", '''
负载均衡名称是:%s,对应账号是:%s,所在区域是:%s,网络类型是:%s
''' % (v1.get(),parameter1.get(),region1.get(),parameter3.get())) #前面是弹窗主题,后面是弹窗内容
name = v1.get()
nettype = parameter3.get()
domain = region1.get()
account = parameter1.get()
print("负载均衡名称是:%s" % name) # 获取用户输入的信息
print("所在区域是:%s" % domain)
print("对应账号是:%s" % account)
print("网络类型是:%s" % nettype)
if result is True:
if account == "A":
ak = aksk_A[0]
sk = aksk_A[1]
getSLB = CreateSlb(ak,sk,domain) #将类实例化
getSLB.create(name,nettype) #执行购买函数

elif account == "B":
ak = aksk_B[0]
sk = aksk_B[1]
getSLB = CreateSlb(ak, sk, domain) # 将类实例化
getSLB.create(name,nettype) #执行购买函数
else:
ak = aksk_C[0]
sk = aksk_C[1]
getSLB = CreateSlb(ak, sk, domain) # 将类实例化
getSLB.create(name,nettype) #执行购买函数
print("购买完毕!")
else:
pass

def print_selection(v):
l.config(text="当前选择的值是:" + v) #V就是传入值也是获取的长度

def get_env():
l1.config(text="你选择了"+parameter1.get()) #使用config功能去改变原有l的参数,把text变成了提取var1里的值
#print(parameter1.get())

def get_region():
l2.config(text="你选择了"+region1.get())
#print(parameter2.get())

def get_network():
l3.config(text="你选择了"+parameter3.get())
#print(parameter3.get())

#选择环境
env1 = tk.Radiobutton(window,text="第一个账号",variable=parameter1,value='A',command=get_env)
env2 = tk.Radiobutton(window,text="第2个账号",variable=parameter1,value='B',command=get_env)
env3 = tk.Radiobutton(window,text="第3个账号",variable=parameter1,value='C',command=get_env)
env1.grid(row=2, column=0, padx=10, pady=5)
env2.grid(row=3, column=0, padx=10, pady=5)
env3.grid(row=4, column=0, padx=10, pady=5)

#选择地域,使用下拉列表
number = tk.StringVar()
region1 = ttk.Combobox(window,width=12,textvariable=number,state='readonly') #加入readonly,使下拉列表设置成为只读模式
region1['values'] = ("cn-hangzhou","cn-shenzhen","eu-central-1","ap-southeast-1","cn-hongkong") #下拉列表里面具体的元素
region1.grid(row=5,column=0)
region1.current(0)

#选择内/外网
network1 = tk.Radiobutton(window,text="内网",variable=parameter3,value='intranet',command=get_network)
network2 = tk.Radiobutton(window,text="外网",variable=parameter3,value='internet',command=get_network)
network1.grid(row=10, column=0, padx=10, pady=5)
network2.grid(row=11, column=0, padx=10, pady=5)

#尺度区间
s = tk.Scale(window,label="想要多少台?",from_=1,to=20,orient=tk.HORIZONTAL,resolution=1,command=print_selection)
#HORIZONTAL横向,length的单位是像素,resolution单位是取小数还是取整
s.grid(row=1, column=0, padx=10, pady=5)

#提交按钮
action = tk.Button(window, text='确认提交',width=10,command=clickMe)
action.grid(row=12, column=0, sticky=tk.W, padx=10, pady=5)
tk.Button(window, text='退出程序',width=10,command=window.quit).grid(row=12, column=1, sticky=tk.E, padx=10, pady=5)

tk.mainloop()

基本脚本的注释就已经讲明白了整个脚本执行的过程,简单说来就是界面输入对应的选项,再把这些选项传入到阿里云的api里达到购买负载均衡的目的。这里要注意一下,thinker布局只能从pack,grid,place里选择一种。

脚本就到此结束,后期再给这个脚本添加到对应的端口监听功能就完美了!

参考资料

https://www.mierhuo.com/code/106
https://www.jianshu.com/p/5dfeb29aed7b
https://www.cnblogs.com/ruo-li-suo-yi/p/7425307.html

感谢您请我喝咖啡~O(∩_∩)O,如果要联系请直接发我邮箱chenx1242@163.com,我会回复你的
-------------本文结束感谢您的阅读-------------