Posts 自动化运维之GUI设计
Post
Cancel

自动化运维之GUI设计

每个男孩内心都是追求酷炫屌炸的,在逐渐对命令行无感后,我盯上了图形化,将脚本进行GUI设计,想想就很酷。(其实是公司需求………………)

用知识的土壤来填埋这些坑洞

本次采用QT的PySide2进行GUI设计!

架构思路是将QT的信号、槽等,放在__init__下,我在GUI上触发相应的功能,便运行相应的实例,去执行实例的模块功能。

Qt 是一个跨平台的 C++图形用户界面库,由挪威 TrollTech 公司于1995年底出品。

PySide2 是来自Qt for Python 项目的官方 Python 模块 ,它提供对完整 Qt 5.12+ 框架的访问。

使用豆瓣源下载安装 pip install pyside2 -i https://pypi.douban.com/simple/

设计GUI可以使用2种方式: 1、调用相应的代码创建出来,但图形需要自身脑部构思(脑残党泪目) 2、使用QT界面生成器 Qt Designer,进行图形化设计,再调用各类信号和槽(真正的人类操作) Windows下,运行 Python安装目录下 Scripts\pyside2-designer.exe 这个可执行文件,启动Qt Designer。

QApplication提供了整个图形界面程序的底层管理功能,比如:初始化、程序入口参数的处理,用户事件(对界面的点击、输入、拖拽)分发给各个对应的控件,等等…

QUiLoader使独立的应用程序在运行时动态地创建用户界面,使用存储在UI文件或插件路径中指定的信息。 此外,可以自定义或派生自己的类加载器创建自己的用户界面。也就是说:用于动态的加载设计师生成的界面(QMainWindow、QWidget、QDialog)。 QUiLoader类允许创建基于存储在UI文件中的信息或指定插件路径的(使用Qt Designer创建的)小部件。指定插件路径可以使用pluginPaths()函数来检索。同样,一个UI文件的内容可以使用load()函数来检索。

GUI上图标需要使用ico格式,可以下载jpg后进行转换,推荐一个图标来源

源码

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
from PySide2.QtWidgets import QApplication,QMessageBox 
from PySide2.QtUiTools import QUiLoader
from PySide2.QtGui import  QIcon 
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC  
from selenium.webdriver.common.by import By  
from time import sleep   
import sys
from threading import Thread  
from time import sleep
import os

class Wzscript:   
    def __init__(self):  
        self.GUI= QUiLoader().load('xxx.ui')      
        self.GUI.back.clicked.connect(self.Multithreading)   
        self.GUI.action_Exit.triggered.connect(self.Exit)
        self.GUI.action_version.triggered.connect(self.version) 

    def version(self):
        QMessageBox.information(self.GUI,
            'xxx\n',
            'xxx'
        )
        
    def Exit(self):
        os._exit(0)

    def Multithreading(self):  
        self.GUI.textB_out.append('xx........................')
        self.GUI.textB_out.ensureCursorVisible()
        self.thread = Thread(   
            target = self.main
        )
        self.thread.start()   


    def main(self):
        web = webdriver.Chrome('C:\xxxx\chromedriver.exe')
        blacklist_if = self.GUI.lineE_url.text().split(':')[1]
        blacklist ='//xxx','//xxx','//xxx' 
        for blacklist_for in blacklist:
            if blacklist_if == blacklist_for:
                self.GUI.textB_out.append("{}".format(
                    'xxxxx'
                    ))
                self.GUI.textB_out.ensureCursorVisible()
                sys.exit(web.close())  

        web.get(self.GUI.lineE_url.text())         
        web.maximize_window() 
        sleep(x)
        web.implicitly_wait(x)    
        web.find_element_by_class_name('xx').click()  
        sleep(x)
        web.find_element_by_class_name('ui-xx-text').click() 
        sleep(x)
        web.find_element_by_class_name('ui-xx-text').click()  
        sleep(x)
        web.find_element_by_class_name('xx').click()  
        sleep(x)
        
        web.implicitly_wait(0) 
        locator = (By.CLASS_NAME, 'ui-xx-text') 
        element = EC.invisibility_of_element_located(locator)   
        if (element(web)):
            print(element(web))
        else:
            web.find_element_by_class_name('ui-xx-text').click() 
            
        sleep(x)
        web.close()
    
app = QApplication([])
app.setWindowIcon(QIcon('xx.png'))  
Wzscript = Wzscript()
Wzscript.GUI.show()   
sys.exit(app.exec_()) 

效果展示

图例

参考来源

白月黑羽
PySide2官方描述

This post is licensed under CC BY 4.0 by the author.

Contents

记XSS漏洞操练

人工智能之文字识别

Comments powered by Disqus.