def query_wan1_ip(db_sql): db_ip = db_ip_text.get() db_name = db_logname_text.get() db_pass = db_logpasswd_text.get() db_port = int(db_port_text.get()) db_tunnel_ip = db_tunnel_ip_text.get() db_tunnel_logname = db_tunnel_logname_text.get() db_tunnel_pass = db_tunnel_logpasswd_text.get() db_tunnel_port = int(db_tunnel_port_text.get()) if db_tunnel_flag == 0: #db_tunnel_flag默认值0,若为0则不使用tunnel interface_query_value = utils.mysql_connect( db_ip, db_name, db_pass, MY_GUI.log_data_Text, db_sql) if db_tunnel_flag == 1: #db_tunnel_flag默认值0,若为1则使用tunnel interface_query_value = utils.mysql_tunnel_connet( db_tunnel_ip, db_tunnel_logname, db_tunnel_pass, db_tunnel_port, db_ip, db_name, db_pass, MY_GUI.log_data_Text, db_sql) if interface_query_value: #判断查询结果是否为空,若不为空则对结果进行处理 result_value = interface_query_value[0] # 从查询结果列表中取出第一个值,结果为一个元组 MY_GUI.result_data_Text.delete(1.0, END) for i in range(0, len(result_value)): # 从设备元组中取出每个设备 if isinstance(result_value[i][3], str): MY_GUI.init_data_Text.insert(tkinter.INSERT, result_value[i][3] + '\n') # 数据录入框框输出结果 MY_GUI.init_data_Text.update() i = i + 1 utils.write_log_to_Text(MY_GUI.log_data_Text, '数据库数据查询完成') # 打印日志
def query_phy_interface(db_sql): #物理接口查询函数 db_ip = db_ip_text.get() db_name = db_logname_text.get() db_pass = db_logpasswd_text.get() db_port = int(db_port_text.get()) db_tunnel_ip = db_tunnel_ip_text.get() db_tunnel_logname = db_tunnel_logname_text.get() db_tunnel_pass = db_tunnel_logpasswd_text.get() db_tunnel_port = int(db_tunnel_port_text.get()) if db_tunnel_flag == 0: #db_tunnel_flag默认值0,若为0则不使用tunnel interface_query_value = utils.mysql_connect( db_ip, db_name, db_pass, MY_GUI.log_data_Text, db_sql) if db_tunnel_flag == 1: #db_tunnel_flag默认值0,若为1则使用tunnel interface_query_value = utils.mysql_tunnel_connet( db_tunnel_ip, db_tunnel_logname, db_tunnel_pass, db_tunnel_port, db_ip, db_name, db_pass, MY_GUI.log_data_Text, db_sql) if interface_query_value: #判断查询结果是否为空,若不为空则对结果进行处理 result_value = interface_query_value[0] # 从查询结果列表中取出第一个值,结果为一个元组 MY_GUI.result_data_Text.delete(1.0, END) for i in range(0, len(result_value)): # 从设备元组中取出每个设备 result = '' for j in range(0, len( result_value[i])): # 从每个设备元组中取出每个数值,转换成字符串并进行拼接 result = result + str(result_value[i][j]) + ' ' j = j + 1 # print(result) MY_GUI.result_data_Text.insert(tkinter.INSERT, result + '\n') # 输出框输出结果 MY_GUI.result_data_Text.update() i = i + 1 utils.write_log_to_Text(MY_GUI.log_data_Text, '数据库数据查询完成') # 打印日志
def file_trans_put(): remote_ip_list = MY_GUI.init_data_Text.get(1.0, END).strip().split('\n') #远端ip 地址列表 localfile_list = local_flile_Text.get(1.0, END).strip().split('\n') #待上传文件列表 ssh_port = int(ssh_port_text.get()) ssh_name = ssh_logname_text.get() ssh_password = ssh_logpasswd_text.get() remote_path=remote_flilepath_text.get() #本地文件列表文件字符串相加,判断本地文件列表是否为空 check_localfile_list='' for i in range(0, len(localfile_list)): check_localfile_list = check_localfile_list + localfile_list[i] i = i + 1 count_ip=0 for ip in remote_ip_list: # 从地址列表取ip执行查询命令 global def_start global current_ip global current_file_name current_ip=ip #在窗口输出当前传输设备ip device_TexT.delete(1.0, END) device_TexT.insert(tkinter.INSERT, ip) device_TexT.update() #在窗口输出ip传输进度 count_ip=count_ip+1 device_rate= str(count_ip)+"/"+str(len(remote_ip_list)) device_rate_TexT.delete(1.0, END) device_rate_TexT.insert(tkinter.INSERT, str(device_rate)) device_rate_TexT.update() if def_start == 1: # 若def_start值为1则执行查询 if check_localfile_list: #判断本地文件是否为空,不为空则执行 for localfile in localfile_list: #取一个本地文件 localfile_dir_list=localfile.split('/') #以“/”分割成列表,取最后一个元素 remotefile=remote_path+localfile_dir_list[-1] #远端目录+本地文件名作为远端文件 # 在窗口输出当前传输文件名称 current_file_name=localfile_dir_list[-1] file_TexT.delete(1.0, END) file_TexT.insert(tkinter.INSERT,current_file_name) file_TexT.update() if radio_value==1: #文件传输协议,1为SFTP,2为SCP utils.ssh_sftp_put(ip, ssh_name, ssh_password,ssh_port,localfile,remotefile, MY_GUI.log_data_Text,remote_path) elif radio_value==2: #文件传输协议,1为SFTP,2为SCP ssh_scp_put(ip, ssh_name, ssh_password, ssh_port, localfile,remotefile, MY_GUI.log_data_Text,remote_path) else: #判断本地文件是否为空,为空则输出log utils.write_log_to_Text(MY_GUI.log_data_Text, "本地文件不能为空") break elif def_start == 0: # 若def_start值为0则终止查询并输出log utils.write_log_to_Text(MY_GUI.log_data_Text, "文件传输终止") break elif def_start == 2: # 若def_start值为2则暂停查询并弹出提示框 mes = messagebox.askyesno('提示', '是否继续执行') if mes is True: # 点击提示框‘YES’,继续执行查询 def_start = 1 else: def_start = 0 # 点击提示框‘NO’,停止查询
def get_cmdfile_path(): #从本地系统打开文件并获取文件内容 filepath = filedialog.askopenfilename() try: f = open(str(filepath), encoding='utf-8', errors='ignore') if f: readlines = f.readlines() f.close() for line in readlines: cmd_Text.insert(tkinter.INSERT, line) return readlines except Exception as e: utils.write_log_to_Text(MY_GUI.log_data_Text, e)
def device_query_start(): #开始查询函数,判断是否需要tunnel,如果需要tunnel则判断tunnel地址是否可达 global def_start global radio_value def_start = 1 #执行查询标志,0:停止 1:开始 3:暂停 ssh_tunnel_ip = tunnel_ip_text.get() #获取tunnel ip os_cmd = 'ping -c 5' + ' ' + ssh_tunnel_ip #ping 检测命令 if ssh_tunnel_flag == 1: #ssh_tunnel_flag 默认为0,不使用tunnel,若tunnel为1则使用tunnel tunnel_check_result = ping_check( os_cmd) #检测tunnel地址是否可达,可达则返回值0,否则为其他值 if tunnel_check_result == 0: device_tunnel_query_button() #若tunnel地址可达执行该函数 else: utils.write_log_to_Text(MY_GUI.log_data_Text, ssh_tunnel_ip + "地址不可达") else: device_query_button()
def ssh_scp_get(ip, user, password, port, local_file, remote_file, log_data_Text, remote_path): try: ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy) ssh_client.connect(ip, port, user, password, timeout=5) scpclient = SCPClient(ssh_client.get_transport(), progress=progress, socket_timeout=15.0) except Exception as e: utils.write_log_to_Text(log_data_Text, e) try: scpclient.get(remote_file, local_file) ssh_client.close() except FileNotFoundError: utils.write_log_to_Text(log_data_Text, "本地找不到指定文件" + local_file) except Exception as e: if "No such file or directory" in str(e): utils.write_log_to_Text(log_data_Text, ip + remote_file + "目录不存在") else: utils.write_log_to_Text(log_data_Text, e) else: utils.write_log_to_Text(log_data_Text, ip + remote_file + "文件下载成功")
def output_result_file(self): file_path = filedialog.asksaveasfilename(title=u'保存文件') #print('保存文件:', file_path) file_text = self.result_data_Text.get(1.0, END) if file_path is not None: try: with open(file=file_path, mode='w', encoding='utf-8') as file: file.write(file_text) self.result_data_Text.delete(1.0, END) dialog.Dialog( None, { 'title': 'File Modified', 'text': '保存完成', 'bitmap': 'warning', 'default': 0, 'strings': ('OK', 'Cancle') }) utils.write_log_to_Text(self.log_data_Text, '保存完成,文件路径:' + file_path) except Exception as e: utils.write_log_to_Text(self.log_data_Text, e)
def thin_interface(dev_sn): try: cmd = "cat /etc/config/network" result = rtty_query(cmd, dev_sn) # 获取查询原始结果 r1 = result.strip().split('\n') #print(r1) result_list = [] for i in range( len(r1)): #遍历查询结果的每一个元素,查找包含字符interface和ifname的元素,并加入新的列表 r2 = str(r1[i].strip()) #去掉每一个元素的前后空格 #print(r2) r4 = r2.find("interface") #查找包含interface的元素,不包含返回值为-1 r5 = r2.find("ifname") #查找包含ifname的元素,不包含返回值为-1 r6 = r2.find("pppoe") #print("r4=",r4) if r4 != -1: #如果interface包含在该元素中,则以‘分割,取第二个元素加入新列表 r3 = r2.split("\'") #print(r3[1]) result_list.append(r3[1]) #print(result_list) continue if r6 != -1: r3 = r2.split("\'") # print(r3[1]) result_list.append(r3[1]) continue if r5 != -1: #如果ifname包含在该元素中,则以‘分割,取第二个元素加入新列表 r3 = r2.split("\'") #print(r3[1]) result_list.append(r3[1]) continue #print(result_list) return result_list except Exception as e: utils.write_log_to_Text(MY_GUI.log_data_Text, dev_sn + " " + str(e))
def date_query(): global def_start dev_sn_list = MY_GUI.init_data_Text.get(1.0, END).strip().split( '\n') # 从页面获取sn列表 # print(dev_sn_list) count_sn = 0 for dev_sn in dev_sn_list: # 在窗口输出当前传输设备ip dev_TexT.delete(1.0, END) dev_TexT.insert(tkinter.INSERT, dev_sn) dev_TexT.update() # 在窗口输出ip传输进度 count_sn = count_sn + 1 dev_rate = str(count_sn) + "/" + str(len(dev_sn_list)) dev_rate_TexT.delete(1.0, END) dev_rate_TexT.insert(tkinter.INSERT, str(dev_rate)) dev_rate_TexT.update() if def_start == 1: # 若def_start值为1则开始查询 if dev_sn: #判断dev_sn 是否为空 MY_GUI.result_data_Text.insert( tkinter.INSERT, ("=") * 15 + dev_sn + ("=") * 15 + '\n') # 输出结果到页面 MY_GUI.result_data_Text.update() check = dev_model(dev_sn) # 通过查询设备类型是返回值是否为None判断是否可达 # print(check) if check is not None: flexthinedge_query(dev_sn) else: utils.write_log_to_Text(MY_GUI.log_data_Text, dev_sn + "不可达!") continue else: utils.write_log_to_Text(MY_GUI.log_data_Text, dev_sn + "设备sn不能为空!") elif def_start == 0: # 若def_start值为0则终止查询并输出log utils.write_log_to_Text(MY_GUI.log_data_Text, "查询终止") break elif def_start == 2: # 若def_start值为2则暂停查询并弹出提示框 mes = messagebox.askyesno('提示', '是否继续执行') if mes is True: # 点击提示框‘YES’,继续执行查询 def_start = 1 else: def_start = 0 # 点击提示框‘NO’,停止查询
def data_process(dev_sn, result, identifier, split_flag, out_name): if result == "": MY_GUI.result_data_Text.insert(tkinter.INSERT, out_name + "\n") # 输出结果到页面 MY_GUI.result_data_Text.update() MY_GUI.result_data_Text.see(END) utils.write_log_to_Text(MY_GUI.log_data_Text, dev_sn + " " + out_name + " 未查询到") elif result == None: MY_GUI.result_data_Text.insert(tkinter.INSERT, out_name + "\n") # 输出结果到页面 MY_GUI.result_data_Text.update() MY_GUI.result_data_Text.see(END) utils.write_log_to_Text(MY_GUI.log_data_Text, dev_sn + " " + out_name + " 未查询到") else: if identifier in str(result): r1 = result.split('\n') # 以换行符将原始结果分隔成列表 for i in range(len(r1)): # 取r1列表包含"dev_model"的元素 if identifier in r1[i]: r2 = r1[i] r3 = r2.split(split_flag) # 以'为分隔符分隔列表r3 result_out = r3[1] # 取列表r3第2个元素 MY_GUI.result_data_Text.insert(tkinter.INSERT, out_name + result_out + "\n") # 输出结果到页面 MY_GUI.result_data_Text.update() MY_GUI.result_data_Text.see(END) break else: MY_GUI.result_data_Text.insert(tkinter.INSERT, out_name + "\n") # 输出结果到页面 MY_GUI.result_data_Text.update() MY_GUI.result_data_Text.see(END) utils.write_log_to_Text(MY_GUI.log_data_Text, dev_sn + " " + out_name + " 未查询到")
def device_query_button(): #设备查询按钮函数,不使用tunnel ssh_port = int(ssh_port_text.get()) ssh_name = ssh_logname_text.get() ssh_password = ssh_logpasswd_text.get() ip_list = MY_GUI.init_data_Text.get(1.0, END).strip().split( '\n') #从页面获取IP地址列表 # print(ip_list) cmd_list = cmd_Text.get(1.0, END).strip().split('\n') #从页面获取命令列表 MY_GUI.result_data_Text.delete(1.0, END) #清空结果输出框 #检查命令框是否为空,若命令列表为空,则命令列表左右字符串相加也为空 check_cmd = '' for i in range(0, len(cmd_list)): check_cmd = check_cmd + cmd_list[i] i = i + 1 count_ip = 0 for ip in ip_list: #从地址列表取ip执行查询命令 global def_start #在窗口输出当前传输设备ip device_TexT.delete(1.0, END) device_TexT.insert(tkinter.INSERT, ip) device_TexT.update() count_ip = count_ip + 1 #在窗口输出ip传输进度 device_rate = str(count_ip) + "/" + str(len(ip_list)) device_rate_TexT.delete(1.0, END) device_rate_TexT.insert(tkinter.INSERT, str(device_rate)) device_rate_TexT.update() if def_start == 1: #若def_start值为1则执行查询 if check_cmd: if ip: # 判断设备ip是否为空 device_result = utils.sshlogin(ssh_name, ssh_password, ssh_port, ip, MY_GUI.log_data_Text, cmd_list) else: utils.write_log_to_Text(MY_GUI.log_data_Text, "设备ip不能为空") continue else: utils.write_log_to_Text(MY_GUI.log_data_Text, "命令不能为空") break elif def_start == 0: #若def_start值为0则终止查询并输出log utils.write_log_to_Text(MY_GUI.log_data_Text, "查询运行终止") break elif def_start == 2: #若def_start值为2则暂停查询并弹出提示框 mes = messagebox.askyesno('提示', '是否继续执行') if mes is True: #点击提示框‘YES’,继续执行查询 def_start = 1 else: def_start = 0 #点击提示框‘NO’,停止查询 result = '' if device_result == ['']: utils.write_log_to_Text(MY_GUI.log_data_Text, ip + " " + "未查询到数据") elif device_result == None: utils.write_log_to_Text(MY_GUI.log_data_Text, ip + " " + "未查询到数据") else: # 对查询原始结果进行处理,原始数据为列表 if radio_value == 1: # 单选框返回值为1则结果逐条输出 for i in range(0, len(device_result)): result = str(device_result[i]) i = i + 1 MY_GUI.result_data_Text.insert( tkinter.INSERT, "*" * 20 + ip + "*" * 20 + "\n" + result + '\n' * 2) MY_GUI.result_data_Text.update() MY_GUI.result_data_Text.see(END) elif radio_value == 2: # 单选框返回值为2则结果合并为一条输出 for i in range(0, len(device_result)): result = result + str(device_result[i]) + ' ' i = i + 1 MY_GUI.result_data_Text.insert(tkinter.INSERT, result + '\n') MY_GUI.result_data_Text.update() MY_GUI.result_data_Text.see(END) # print(result) utils.write_log_to_Text(MY_GUI.log_data_Text, ip + " " + "设备数据查询完成")
def flexthinedge_query(dev_sn): #设备名称查询 if name_select.get() == 1: cmd = "uci show rtty" result = rtty_query(cmd, dev_sn) # 获取查询原始结果 identifier = "description" out_name = "设备名称:" split_flag = "\'" data_process(dev_sn, result, identifier, split_flag, out_name) #设备型号查询 if model_select.get() == 1: result_out = dev_model(dev_sn) MY_GUI.result_data_Text.insert(tkinter.INSERT, "设备型号:" + result_out + "\n") # 输出结果到页面 MY_GUI.result_data_Text.update() MY_GUI.result_data_Text.see(END) #设备版本查询 if dev_version_select.get() == 1: cmd = "uci show ovslan" result = rtty_query(cmd, dev_sn) # 获取查询原始结果 identifier = "dev_version=" out_name = "设备版本:" split_flag = "\'" data_process(dev_sn, result, identifier, split_flag, out_name) #设备运行模式查询 if dev_mode_select.get() == 1: cmd = "uci show ovslan" result = rtty_query(cmd, dev_sn) # 获取查询原始结果 identifier = "dev_mode=" out_name = "运行模式:" split_flag = "\'" data_process(dev_sn, result, identifier, split_flag, out_name) #WAN1接口地址查询 if wan1_select.get() == 1: port_list = thin_interface(dev_sn) for i in range(len(port_list)): if port_list[i] == "WAN": if port_list[i + 2] == "pppoe": wan_port = "pppoe-WAN" else: wan_port = port_list[i + 1] cmd = "ifconfig " + wan_port result = rtty_query(cmd, dev_sn) #获取查询原始结果 identifier = "inet addr" out_name = "WAN:" split_flag = ":" data_process(dev_sn, result, identifier, split_flag, out_name) break #WAN2接口地址查询 if wan2_select.get() == 1: port_list = thin_interface(dev_sn) for i in range(len(port_list)): if port_list[i] == "WAN2": if port_list[i + 2] == "pppoe": wan_port = "pppoe-WAN" else: wan_port = port_list[i + 1] cmd = "ifconfig " + wan_port result = rtty_query(cmd, dev_sn) # 获取查询原始结果 identifier = "inet addr" out_name = "WAN2:" split_flag = ":" data_process(dev_sn, result, identifier, split_flag, out_name) break #WAN3接口地址查询 if wan3_select.get() == 1: port_list = thin_interface(dev_sn) for i in range(len(port_list)): if port_list[i] == "WAN3": if port_list[i + 2] == "pppoe": wan_port = "pppoe-WAN" else: wan_port = port_list[i + 1] cmd = "ifconfig " + wan_port result = rtty_query(cmd, dev_sn) # 获取查询原始结果 identifier = "inet addr" out_name = "WAN3:" split_flag = ":" data_process(dev_sn, result, identifier, split_flag, out_name) break #LAN口地址查询 if lan_select.get() == 1: cmd = "ifconfig br-LAN" result = rtty_query(cmd, dev_sn) # 获取查询原始结果 identifier = "inet addr" out_name = "LAN:" split_flag = ":" data_process(dev_sn, result, identifier, split_flag, out_name) #设备VLAN查询 if vlan_select.get() == 1: cmd = "uci show vlan" result = rtty_query(cmd, dev_sn) # 获取查询原始结果 identifier = "tag" out_name = "VLAN:" split_flag = "\'" data_process(dev_sn, result, identifier, split_flag, out_name) #模组厂商查询 if lte_Manufacturer_select.get() == 1: cmd = "comtool -e -d /dev/ttyUSB2 -c ATI" result = rtty_query(cmd, dev_sn) # 获取查询原始结果 if "Quectel" in str(result): #Quectel模组 MY_GUI.result_data_Text.insert(tkinter.INSERT, "模组厂商:" + "Quectel" + "\n") # 输出结果到页面 MY_GUI.result_data_Text.update() MY_GUI.result_data_Text.see(END) else: #高新兴 广和通模组 identifier = "Manufacturer" out_name = "模组厂商:" split_flag = ":" data_process(dev_sn, result, identifier, split_flag, out_name) #模组型号 if lte_model_select.get() == 1: cmd = "comtool -e -d /dev/ttyUSB2 -c ATI" result = rtty_query(cmd, dev_sn) # 获取查询原始结果 identifier = "Model" out_name = "模组型号:" split_flag = ":" data_process(dev_sn, result, identifier, split_flag, out_name) #模组版本 if lte_version_select.get() == 1: cmd = "comtool -e -d /dev/ttyUSB2 -c ATI" result = rtty_query(cmd, dev_sn) # 获取查询原始结果 identifier = "Revision" out_name = "模组版本:" split_flag = ":" data_process(dev_sn, result, identifier, split_flag, out_name) #模组IMEI if lte_imei_select.get() == 1: cmd = "comtool -e -d /dev/ttyUSB2 -c ATI" result = rtty_query(cmd, dev_sn) # 获取查询原始结果 identifier = "IMEI" out_name = "模组IMEI:" split_flag = ":" data_process(dev_sn, result, identifier, split_flag, out_name) #SIM 是否插卡 if lte_sim_select.get() == 1: cmd = "comtool -e -d /dev/ttyUSB2 -c AT+CPIN?" result = rtty_query(cmd, dev_sn) # 获取查询原始结果 identifier = "+CPIN:" out_name = "SIM状态:" split_flag = ":" data_process(dev_sn, result, identifier, split_flag, out_name) #SIM 卡号 if lte_ccid_select.get() == 1: cmd1 = "comtool -e -d /dev/ttyUSB2 -c AT+CCID?" cmd2 = "comtool -e -d /dev/ttyUSB2 -c AT+ZGETICCID" result1 = rtty_query(cmd1, dev_sn) # 获取查询原始结果 result2 = rtty_query(cmd2, dev_sn) # 获取查询原始结果 if "+CCID:" in str(result1): identifier = "+CCID:" out_name = "SIM卡号:" split_flag = ":" data_process(dev_sn, result1, identifier, split_flag, out_name) else: identifier = "+ZGETICCID:" out_name = "SIM卡号:" split_flag = ":" data_process(dev_sn, result2, identifier, split_flag, out_name) #SIM 驻网状态 if lte_crge_select.get() == 1: cmd = "comtool -e -d /dev/ttyUSB2 -c AT+CREG?" result = rtty_query(cmd, dev_sn) # 获取查询原始结果 identifier = "+CREG:" out_name = "驻网状态:" split_flag = ":" data_process(dev_sn, result, identifier, split_flag, out_name) #LTE信号强度查询 if cqs_select.get() == 1: cmd = "comtool -e -d /dev/ttyUSB1 -c AT+CSQ" result = rtty_query(cmd, dev_sn) # 获取查询原始结果 identifier = "+CSQ:" out_name = "信号强度:" split_flag = ":" data_process(dev_sn, result, identifier, split_flag, out_name) #频段 if lte_zcellinfo_select.get() == 1: cmd = "comtool -e -d /dev/ttyUSB2 -c at+zcellinfo?" result = rtty_query(cmd, dev_sn) # 获取查询原始结果 identifier = "+ZCELLINFO:" out_name = "频段:" split_flag = ":" data_process(dev_sn, result, identifier, split_flag, out_name) #运营商 if lte_operator_select.get() == 1: cmd = "comtool -e -d /dev/ttyUSB2 -c at+cops?" result = rtty_query(cmd, dev_sn) # 获取查询原始结果 if result == "": MY_GUI.result_data_Text.insert(tkinter.INSERT, "运营商:" + "\n") # 输出结果到页面 MY_GUI.result_data_Text.update() MY_GUI.result_data_Text.see(END) utils.write_log_to_Text(MY_GUI.log_data_Text, dev_sn + "运营商:" + " 未查询到") elif result == None: MY_GUI.result_data_Text.insert(tkinter.INSERT, "运营商:" + "\n") # 输出结果到页面 MY_GUI.result_data_Text.update() MY_GUI.result_data_Text.see(END) utils.write_log_to_Text(MY_GUI.log_data_Text, dev_sn + "运营商:" + " 未查询到") else: MY_GUI.result_data_Text.insert(tkinter.INSERT, "运营商:" + result + "\n") # 输出结果到页面 MY_GUI.result_data_Text.update() MY_GUI.result_data_Text.see(END)