IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> python语言可换主题ttk界面从服务器拿日志文件 -> 正文阅读

[系统运维]python语言可换主题ttk界面从服务器拿日志文件

简单界面tkinter库,稍微美化界面就安装一下ttkthemes

pip3 install ttkthemes

简单使用

themes = ttkthemes.THEMES
        themesName = themes[random.randint(0, len(themes) - 1)]
        print('主题 ' + themesName)
        top = ttkthemes.ThemedTk(theme=themesName, toplevel=True, themebg=True)
        # top = Tk()

这样代码只能是启动的时候就定下来主题,运行中要更换记得要同时设置一下背景和字体

采用vb插件画好基础界面,使用中又添加了些小功能

https://github.com/cdhigh/tkinter-designer
class Application_ui(Frame):
    # The class will create all widgets for UI.
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.master.title('拿日志文件')
        self.master.protocol('WM_DELETE_WINDOW', self.EV_WM_DELETE_WINDOW)
        # To center the window on the screen.
        w = 800
        h = 300
        ws = self.master.winfo_screenwidth()
        hs = self.master.winfo_screenheight()
        x = (ws / 2) - (w / 2)
        y = (hs / 2) - (h / 2)
        self.master.geometry('%dx%d+%d+%d' % (w, h, x, y))

        self.createWidgets()
        self.Combo1.current(0)

    def createWidgets(self):
        self.top = self.winfo_toplevel()
        if os.path.exists("sd.png"):
            self.top.iconphoto(True, PhotoImage(file='sd.png'))

        self.style = Style()
        self.Text1Font = Font(font=('阿里巴巴普惠体', 11))
        self.style.configure('.', font=self.Text1Font)
        self.Label1Var = StringVar(value='目标')
        self.style.configure('TLabel1.TLabel', anchor='w', font=self.Text1Font)
        self.Label1 = Label(self.top, text='目标', textvariable=self.Label1Var, style='TLabel1.TLabel')
        self.Label1.setText = lambda x: self.Label1Var.set(x)
        self.Label1.text = lambda: self.Label1Var.get()
        self.Label1.place(relx=0.026, rely=0.054, relwidth=0.06, relheight=0.08)

        self.Combo1List = ['192.168.45.116', '192.168.45.251', '192.168.45.235', '192.168.70.23', '192.168.70.24', ]
        self.Combo1Var = StringVar(value='192.168.45.116')
        self.Combo1 = Combobox(self.top, text='192.168.45.116', textvariable=self.Combo1Var, values=self.Combo1List, font=self.Text1Font)
        self.Combo1.setText = lambda x: self.Combo1Var.set(x)
        self.Combo1.text = lambda: self.Combo1Var.get()
        self.Combo1.place(relx=0.1, rely=0.054, relwidth=0.22)

        self.Command2Var = StringVar(value='拿文件')
        self.style.configure('TCommand2.TButton', font=self.Text1Font)
        self.Command2 = Button(self.top, text='拿文件', textvariable=self.Command2Var, command=self.Command2_Cmd, style='TCommand2.TButton')
        self.Command2.setText = lambda x: self.Command2Var.set(x)
        self.Command2.text = lambda: self.Command2Var.get()
        self.Command2.place(relx=0.82, rely=0.4, relwidth=0.14)

        self.Command1Var = StringVar(value='退出')
        self.style.configure('TCommand1.TButton', font=self.Text1Font)
        self.Command1 = Button(self.top, text='退出', textvariable=self.Command1Var, command=self.Command1_Cmd, style='TCommand1.TButton')
        self.Command1.setText = lambda x: self.Command1Var.set(x)
        self.Command1.text = lambda: self.Command1Var.get()
        self.Command1.place(relx=0.82, rely=0.7, relwidth=0.14)

        self.Text1 = Text(self.top, font=self.Text1Font)
        self.Text1.place(relx=0.026, rely=0.187, relwidth=0.776, relheight=0.726)
        self.Text1.insert('1.0', 'Text1')

        self.topRadioVar = StringVar(value='1')
        self.style.configure('TOption2.TRadiobutton', font=self.Text1Font)
        self.Option2 = Radiobutton(self.top, text='缓存', value='1', variable=self.topRadioVar, style='TOption2.TRadiobutton')
        self.Option2.setValue = lambda x: self.topRadioVar.set('1' if x else '0')
        self.Option2.value = lambda: 1 if self.topRadioVar.get() == '1' else 0
        self.Option2.place(relx=0.43, rely=0.054, relwidth=0.09, relheight=0.1)

        self.style.configure('TOption1.TRadiobutton', font=self.Text1Font)
        self.Option1 = Radiobutton(self.top, text='实时', value='0', variable=self.topRadioVar, style='TOption1.TRadiobutton')
        self.Option1.setValue = lambda x: self.topRadioVar.set('0' if x else '1')
        self.Option1.value = lambda: 0 if self.topRadioVar.get() == '0' else 1
        self.Option1.place(relx=0.34, rely=0.054, relwidth=0.09, relheight=0.1)

        self.style.configure('TLabel2.TLabel', anchor='w', font=self.Text1Font)
        self.Label2 = Label(self.top, text='主题', style='TLabel2.TLabel')
        self.Label2.place(relx=0.74, rely=0.054, relwidth=0.06, relheight=0.08)

        self.Combo2List = ['adapta', 'arc', 'winxpblue', 'smog', 'scidblue', 'yaru', ]
        self.Combo2Var = StringVar(value='arc')
        self.Combo2 = Combobox(self.top, text='arc', textvariable=self.Combo2Var, values=self.Combo2List, font=self.Text1Font)
        self.Combo2.setText = lambda x: self.Combo2Var.set(x)
        self.Combo2.text = lambda: self.Combo2Var.get()
        self.Combo2.place(relx=0.82, rely=0.054, relwidth=0.14)
        self.Combo2Var.trace('w', self.Combo2_Change)
        self.Combo2.bind('<<ComboboxSelected>>', self.Combo2_Change)

然后是具体调用功能代码

class Application(Application_ui):
    # The class will implement callback function for events and your logical code.
    def __init__(self, master=None):
        Application_ui.__init__(self, master)
        self.host_ip = extract_ip()
        self.Combo1.set(self.host_ip)

    def change_theme(root, themes_name):
        """
        更改风格
        """
        print(themes_name)
        style = ttkthemes.ThemedStyle(root)
        style.set_theme(themes_name)
        color = Style(root).lookup("TFrame", "background", default="white")
        root.top.config(background=color)
        root.style.configure('.', font=root.Text1Font)

    def EV_WM_DELETE_WINDOW(self, event=None):
        if askyesno(title='退出确认', message='请问是否要退出?'):
            self.master.destroy()

    def Command2_Cmd(self, event=None):
        ip = self.Combo1.get()
        print(ip)
        r = requests.get('http://%s:8080/uploadFile?ext=1&type=%s' % (ip, self.topRadioVar.get()))
        file = r.content.decode()
        self.Text1.insert(INSERT, file + '\n')
        if ip == self.host_ip:
            os.system('scp qzc@%s:%s %s' % (ip, file, os.getcwd()))
        else:
            os.system('scp root@%s:%s %s' % (ip, file, os.getcwd()))
        self.Text1.insert(INSERT, os.getcwd() + '\n')

    def Combo2_Change(self, *args):
        print(self.Combo2.get())
        self.change_theme(self.Combo2.get())

    def Command1_Cmd(self, event=None):
        e = askyesno(title='退出确认', message='请问是否要退出?')
        if e:
            self.quit()

原理很简单,通过http接口拿到服务器文件名,然后用scp命令把文件下载到本地,记得是通过命令ssh-copy-id -i root@192.168.70.23事先向服务器认证过了,否则拿文件时因为没输入密码失败

用到一个查询本机ip地址公用函数

def extract_ip():
    """
    查询本机ip地址
    :return:
    """
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('10.255.255.255', 1))
        ip = s.getsockname()[0]
    except Exception:
        ip = '127.0.0.1'
    finally:
        s.close()
    return ip

可以编译成独立文件脱离python环境使用

pyinstaller -F -w getjclog.py

linux下面文件本身没有图标,编译命令就不需要加ico了,运行起来如果想再任务栏显示图标,可以放一个sd.png文件到可执行文件同路径下

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-10 12:16:32  更:2022-05-10 12:16:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:46:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码