Tkinter制作工具学习记录(二)实现目录切换

1.paramiko建立连接

    def tk_Connect_service(cmd):
        #获取IP
        mcsip = EntryMSCIP.get()
        # 获取SSHClient实例
        client = paramiko.SSHClient()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        # 连接SSH服务端
        try:
            client.connect(mcsip, username="", password="", port=)
            stdin, stdout, stderr = client.exec_command(command=cmd)
            result = stdout.read().decode('utf-8')
            return result
        except:
            messagebox.showerror('提示', '未能连接SSH服务端')
            frameccu.destroy()
            btn1.config(state='disable')
            Radiobuttonsucess.config(bg='grey')

2.远程查询指定路径下的目录

 

 #dir存放路径
 dir = []
 #起始路径
 file_path = '/home'
 def tk_Get_Mapdir(self):
        #清空dir
        dir.clear()
        #插入起始路径
        dir.append(file_path)
        #listbox作为目录展示
        listbox.delete(0, 'end')
        #s1 = "| awk '{print $9}'"
        #过滤掉不需要展示的目录
        s2 = "| grep ginger_[maplog]"
        cmd = 'ls   %s   %s' % (file_path, s2)
        print(cmd)
        #paramiko远程执行命令
        result = method.tk_Connect_service(cmd=cmd)
        #输出的结果拼在一起
        i = ' '.join(result.split())
        s = i.split(' ')
        if s != '':
            #将路径展示到label
            labelpath.config(text=file_path)
            for k in s:
                #listbox作为目录展示
                listbox.insert('end', k)
        else:
            listbox.insert('end', '没有查询到地图文件')

3.双击listbox中的目录实现进入下级目录,右键菜单返回上级

方法绑定 

 #返回菜单
 menubarmap = tk.Menu(frameccu, tearoff=0)
 #绑定返回方法
 menubarmap.add_command(label='返回', command=lambda: method.updir(self=self))
 #事件
 def pop(event):
    menubarmap.post(event.x_root, event.y_root)
 #右键绑定事件
 listbox.bind("<Button-3>", pop)
 #绑定双击触发的方法
 listbox.bind('<Double-Button-1>', method.tk_next_dir)

切换下级目录方法 

    global dir
    global r
    #存放路径
    dir = []
    #设置初始路径
    dir.append(file_path)
    def tk_next_dir(self):
        #dirselect 获取listbox双击选择的目录
        dirselect = listbox.get(listbox.curselection())
        #dir2 为拼接的下级路径
        dir2 = dir[-1] + '/' + dirselect
        #label显示拼接的下级路径
        labelpath.config(text=dir2)
        #判断是否为json文件
        if 'json' in dirselect:
            #开启下拉框
            combobox.config(state='normal')
            combobox.set('')
            #预览json文件
            cmd = 'cat   %s ' % dir2
            result = method.tk_Connect_service(cmd=cmd)
            textview.delete(0.0, END)
            #将输出转化为json格式
            r = json.loads(result)
            dict = []
            for name in r:
                dict.append(name)
                #下拉框插入json key
                combobox.config(values=dict)
            #输出标准格式json
            y = json.dumps(r, sort_keys=True, indent=4, separators=(',', ': '), ensure_ascii=False)
            textview.insert(INSERT, y)
            textview.see(END)
        #如果双击的是yaml文件,直接预览,不做处理
        elif 'yaml' in dirselect:
            #处理yaml
            combobox.config(state='disable')
            cmd = 'cat   %s ' % dir2
            result = method.tk_Connect_service(cmd=cmd)
            textview.delete(0.0, END)
            textview.insert(INSERT, result)
            textview.see(END)
        #如果双击的是日志文件,直接预览,不做处理
        elif '.log' in dirselect:
            combobox.config(state='disable')
            cmd = 'cat   %s ' % dir2
            result = method.tk_Connect_service(cmd=cmd)
            textview.delete(0.0, END)
            textview.insert(INSERT, result)
            textview.see(END)
        #其他情况
        else:
            combobox.config(state='disable')
            dir.append(dir2)

            listbox.delete(0, 'end')
            cmd = 'ls   %s ' % dir[-1]
            result = method.tk_Connect_service(cmd=cmd)
            i = ' '.join(result.split())
            if i == '':
                listbox.insert('end', '目录为空')
               # print('目录为空时的dir---', dir)
            else:
                s = i.split(' ')
                if s != ' ':
                    for k in s:
                        listbox.insert('end', k)
                else:
                    listbox.insert('end', '没有查询到文件')

返回方法:将存放路径的dir字典中的最后元素删除

    def updir(self):
        listbox.delete(0, 'end')
        del dir[-1]
        #if len(dir) == 0:
        if dir[-1] == '/home/ginger':
            print('kong')
            method.tk_Get_Mapdir(self=self)
        else:
            s2 = "| grep ginger_[maplog]"
            cmd = 'ls  %s  ' % (dir[-1])
            print(cmd)
            result = method.tk_Connect_service(cmd=cmd)
            i = ' '.join(result.split())
            s = i.split(' ')
            if s != '':
                for k in s:
                    listbox.insert('end', k)
                print('返回上一级后的dir', dir)
                labelpath.config(text=dir[-1])
            else:
                listbox.insert('end', '没有查询到文件')
combobox选择需要查看的key
    def serch(self):
        p = labelpath.cget('text')
        cmd = 'cat   %s ' % p
        result = method.tk_Connect_service(cmd=cmd)
        r = json.loads(result)
        k = combobox.get()
        textview.delete(0.0, END)
        d1 = r[k]
        y = json.dumps(d1, sort_keys=True, indent=4, separators=(',', ': '), ensure_ascii=False)
        textview.insert(INSERT, y)
        textview.see(END)

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值