pyqt4 GUI编程初识笔记1

 版本信息:python3.6.4 +pyqt4.11.4+win7

如上图所示,实现功能:输入相应信息后,点击begin按钮执行程序。代码如下:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'test.ui'
#
# Created by: PyQt4 UI code generator 4.11.4
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

#coding=utf-8
import win32gui,win32con,win32api,readline 
import os,time,sys
import urllib.request as urllib2
from os import listdir
readline.parse_and_bind("control-v:paste")   #可以进行复制粘贴


def open_app(app_dir):#打开路径下应用
    os.startfile(app_dir)


# 已知子窗口的窗体类名,窗口名,寻找第index号个同类型的兄弟窗口
def find_idxSubHandle(pHandle, winClass, index):
    #    assert type(index)==int and index>=0       #assert断言,错误时报错
    handle = win32gui.FindWindowEx(pHandle, 0, winClass, None)
    while index >= 0:
        handle = win32gui.FindWindowEx(pHandle, handle, winClass, None)
        index -= 1
    #print('%x' % handle)
    return handle

def cursor_point():
    """
     获取当前鼠标位置
    """
    pos = win32api.GetCursorPos()
    return int(pos[0]), int(pos[1])

def mouse_left_click(button):  #鼠标移动到元素位置,点击鼠标左键
    left, top, right, bottom = win32gui.GetWindowRect(button) #获取按钮句柄的坐标
    #print(left,top,right,bottom)
    win32api.SetCursorPos((left+5,top+5)) #设置鼠标位置
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)  #按住鼠标左键
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)  #释放鼠标左键

def  set_ip(SysIPAddress,ip_start_list):  #填写搜索起始ip
    ip_start_1,ip_start_2,ip_start_3,ip_start_4=ip_start_list[0],ip_start_list[1],ip_start_list[2],ip_start_list[3]

    text1=find_idxSubHandle(SysIPAddress, 'Edit', 2)  #第一位
    print('%x'%text1)
    win32gui.SendMessage(text1, win32con.WM_SETTEXT, None, ip_start_1)

    text2=find_idxSubHandle(SysIPAddress, 'Edit', 6)  #第二位
    win32gui.SendMessage(text2, win32con.WM_SETTEXT, None, ip_start_2)  

    text3=find_idxSubHandle(SysIPAddress, 'Edit', 5)  
    win32gui.SendMessage(text3, win32con.WM_SETTEXT, None, ip_start_3)  #第三位


    text4=find_idxSubHandle(SysIPAddress, 'Edit', 4)  #最后一位
    win32gui.SendMessage(text4, win32con.WM_SETTEXT, None, ip_start_4)

def update(dialog,addr):#选择内核升级文件,并确定升级
    dialog_ker=find_idxSubHandle(dialog, '#32770', 1)
    #button_ker=find_idxSubHandle(dialog_ker, 'Button', 0) #内核升级按钮
    button_file=find_idxSubHandle(dialog_ker, 'Button', 3)
    #mouse_left_click(button_file)
    win32gui.PostMessage(button_file,win32con.BM_CLICK)
    
    time.sleep(0.5)
    dialog_file=win32gui.FindWindow('#32770', u'打开')  # 对话框
    ComboBoxEx32=win32gui.FindWindowEx(dialog_file,0,'ComboBoxEx32',None)
    ComboBox=win32gui.FindWindowEx(ComboBoxEx32,0,'ComboBox',None)
    Edit=win32gui.FindWindowEx(ComboBox,0,'Edit',None)   #文件选择对话框下
    win32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, addr)

    button_sure=win32gui.FindWindowEx(dialog_file,0,'Button',None)
    #mouse_left_click(button_sure)
    win32gui.PostMessage(button_sure,win32con.BM_CLICK)
    
    #time.sleep(3)

    dialog_sure=win32gui.FindWindow('#32770', u'选择设备对话框')  # 对话框
    while not dialog_sure:
           dialog_sure=win32gui.FindWindow('#32770', u'选择设备对话框')  # 对话框
    time.sleep(1)
    dialog_sure_button=find_idxSubHandle(dialog_sure, 'Button', 17)
    #mouse_left_click(dialog_sure_button)
    win32gui.PostMessage(dialog_sure_button,win32con.BM_CLICK)


    #time.sleep(1)
    begin_update_dialog=find_idxSubHandle(dialog, '#32770', 1)
    #print('%x'%begin_update_dialog)
    button_begin_update=find_idxSubHandle(begin_update_dialog, 'Button', 7)
    #print('%x'%button_begin_update)
    #mouse_left_click(button_begin_update)
    win32gui.PostMessage(button_begin_update,win32con.BM_CLICK)

    time.sleep(2)
    dialog_2=win32gui.FindWindow('#32770',u'IPCConfig')
    dialog_update_sure=win32gui.FindWindowEx(dialog_2,0,'Button','确定')
    #mouse_left_click(dialog_update_sure)
    win32gui.PostMessage(dialog_update_sure,win32con.BM_CLICK)


def update_end(dialog_1):#检测是否升级结束
    '''
    while  1:
      Static=find_idxSubHandle(dialog_1, 'Static', 12)
      b=win32gui.GetWindowText(Static)
      if b=='即将完成....':
        while 1:
          Static=find_idxSubHandle(dialog_1, 'Static', 12)
          d=win32gui.GetWindowText(Static)
          if d=='':
            return None
    '''
    time.sleep(5)
    while True:
        buf_size = win32gui.SendMessage(dialog_1, win32con.WM_GETTEXTLENGTH, 0, 0) + 1 # 要加上截尾的字节
        if buf_size==1:
            break
        else:
            time.sleep(1)

def search(dialog,ip_start,ip_end):  #搜索设备
    button = find_idxSubHandle(dialog, 'Button', 5)
    #mouse_left_click(button)
    win32gui.PostMessage(button,win32con.BM_CLICK)
    

    time.sleep(0.5)
    dialog_search = win32gui.FindWindow('#32770', u'手动搜索')  # 对话框


    SysIPAddress_begin=win32gui.FindWindowEx(dialog_search,0,'SysIPAddress32',None)  #开始ip
    #set_ip(SysIPAddress_begin,ip_start_list)  
    win32gui.SendMessage(SysIPAddress_begin, win32con.WM_SETTEXT, None, ip_start)



    SysIPAddress_end=find_idxSubHandle(dialog_search, 'SysIPAddress32', 6)  #结束ip
    #set_ip(SysIPAddress_end,ip_end_list)

    text6=find_idxSubHandle(SysIPAddress_end, 'Edit', 4) 
    #win32gui.PostMessage(text6,win32con.BM_CLICK) 
    mouse_left_click(text6)   #光标定位到结束ip最后一位
     
    for i in range(3): 
       win32api.keybd_event(39,0,0,0)
       win32api.keybd_event(39,0,win32con.KEYEVENTF_KEYUP,0)
       time.sleep(0.1)
       win32api.keybd_event(46,0,0,0)
       win32api.keybd_event(46,0,win32con.KEYEVENTF_KEYUP,0)
       time.sleep(0.1)
       

    win32gui.SendMessage(SysIPAddress_end, win32con.WM_SETTEXT, None, ip_end)


    button_search=win32gui.FindWindowEx(dialog_search,0,'Button','搜索')
    #mouse_left_click(button_search)
    win32gui.PostMessage(button_search,win32con.BM_CLICK)
    time.sleep(20)

class ipc_update(object):
    """docstring for ipc_update"""
    def __init__(self):
        #super(ipc_update, self).__init__()
        #dialog = win32gui.FindWindow('#32770', u'IPCConfig')  # 对话框
        
        
        app_dir = r'.\*****.lnk'
        open_app(app_dir)
        time.sleep(20)
        #print('1')
 
        dialog = win32gui.FindWindow('#32770', u'IPCConfig')  # 对话框
        win32gui.ShowWindow(dialog, win32con.SW_SHOWMAXIMIZED)   #最大化窗口
        win32gui.SetForegroundWindow(dialog) #激活窗口

        Button = win32gui.FindWindowEx(dialog, 0, 'Button', '批量升级')
        win32gui.SendMessage(Button,win32con.BM_CLICK)
        #mouse_left_click(Button)
 
def see_version(ip):
    *******

def print_write(file,temp):
    print(temp)
    file.write(temp+'\n')

def filepath_to_filename(filepath):
    filename_list=listdir(filepath)
    for filename in filename_list:
        if  filename.endswith('bin') or filename.endswith('tgz'):
            filename=filepath+'\\'+filename
    return  filename



try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName(_fromUtf8("Dialog"))
        Dialog.resize(1020, 515)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(_fromUtf8(":/image/li.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        '''
        palette1 = QtGui.QPalette()
        palette1.setBrush(Dialog.backgroundRole(), QtGui.QBrush(QtGui.QPixmap('li.png')))   # 设置背景图片
        Dialog.setPalette(palette1)
        '''
        Dialog.setWindowIcon(icon)
        Dialog.setStyleSheet(_fromUtf8("background-image: url(:/image/li.png);"))
        self.pushButton = QtGui.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(700, 440, 111, 51))
        self.pushButton.setStyleSheet(_fromUtf8("QPushButton{\n"
"   text-decoration:none;  \n"
"    background:#2f435e;  \n"
"    color:#f2f2f2;  \n"
"      \n"
"    padding: 10px 30px 10px 30px;  \n"
"    font-size:16px;  \n"
"    font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;  \n"
"    font-weight:bold;  \n"
"    border-radius:3px;  \n"
"}"))
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.label = QtGui.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(290, 40, 151, 41))
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif"))
        font.setPointSize(2)
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        font.setStrikeOut(False)
        self.label.setFont(font)
        self.label.setStyleSheet(_fromUtf8("QLabel{\n"
"   text-decoration:none;  \n"
"    background:#2f435e;  \n"
"    color:#f2f2f2;  \n"
"      \n"
"    padding: 10px 30px 10px 30px;  \n"
"    font-size:16px;  \n"
"    font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;  \n"
"    font-weight:bold;  \n"
"    border-radius:3px;  \n"
"}"))
        self.label.setTextFormat(QtCore.Qt.AutoText)
        self.label.setObjectName(_fromUtf8("label"))
        self.label_2 = QtGui.QLabel(Dialog)
        self.label_2.setGeometry(QtCore.QRect(290, 110, 151, 41))
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif"))
        font.setPointSize(2)
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        font.setStrikeOut(False)
        self.label_2.setFont(font)
        self.label_2.setStyleSheet(_fromUtf8("QLabel{\n"
"   text-decoration:none;  \n"
"    background:#2f435e;  \n"
"    color:#f2f2f2;  \n"
"      \n"
"    padding: 10px 30px 10px 30px;  \n"
"    font-size:16px;  \n"
"    font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;  \n"
"    font-weight:bold;  \n"
"    border-radius:3px;  \n"
"}"))
        self.label_2.setObjectName(_fromUtf8("label_2"))
        self.label_3 = QtGui.QLabel(Dialog)
        self.label_3.setGeometry(QtCore.QRect(290, 180, 151, 41))
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif"))
        font.setPointSize(2)
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        font.setStrikeOut(False)
        self.label_3.setFont(font)
        self.label_3.setStyleSheet(_fromUtf8("QLabel{\n"
"   text-decoration:none;  \n"
"    background:#2f435e;  \n"
"    color:#f2f2f2;  \n"
"      \n"
"    padding: 10px 30px 10px 30px;  \n"
"    font-size:16px;  \n"
"    font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;  \n"
"    font-weight:bold;  \n"
"    border-radius:3px;  \n"
"}"))
        self.label_3.setObjectName(_fromUtf8("label_3"))
        self.label_4 = QtGui.QLabel(Dialog)
        self.label_4.setGeometry(QtCore.QRect(290, 240, 181, 41))
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif"))
        font.setPointSize(2)
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        font.setStrikeOut(False)
        self.label_4.setFont(font)
        self.label_4.setStyleSheet(_fromUtf8("QLabel{\n"
"   text-decoration:none;  \n"
"    background:#2f435e;  \n"
"    color:#f2f2f2;  \n"
"      \n"
"    padding: 10px 30px 10px 30px;  \n"
"    font-size:16px;  \n"
"    font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;  \n"
"    font-weight:bold;  \n"
"    border-radius:3px;  \n"
"}"))
        self.label_4.setObjectName(_fromUtf8("label_4"))
        self.label_5 = QtGui.QLabel(Dialog)
        self.label_5.setGeometry(QtCore.QRect(290, 310, 181, 41))
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif"))
        font.setPointSize(2)
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        font.setStrikeOut(False)
        self.label_5.setFont(font)
        self.label_5.setStyleSheet(_fromUtf8("QLabel{\n"
"   text-decoration:none;  \n"
"    background:#2f435e;  \n"
"    color:#f2f2f2;  \n"
"      \n"
"    padding: 10px 30px 10px 30px;  \n"
"    font-size:16px;  \n"
"    font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;  \n"
"    font-weight:bold;  \n"
"    border-radius:3px;  \n"
"}"))
        self.label_5.setObjectName(_fromUtf8("label_5"))
        self.label_6 = QtGui.QLabel(Dialog)
        self.label_6.setGeometry(QtCore.QRect(290, 380, 151, 41))
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif"))
        font.setPointSize(2)
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        font.setStrikeOut(False)
        self.label_6.setFont(font)
        self.label_6.setStyleSheet(_fromUtf8("QLabel{\n"
"   text-decoration:none;  \n"
"    background:#2f435e;  \n"
"    color:#f2f2f2;  \n"
"      \n"
"    padding: 10px 30px 10px 30px;  \n"
"    font-size:16px;  \n"
"    font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;  \n"
"    font-weight:bold;  \n"
"    border-radius:3px;  \n"
"}"))
        self.label_6.setObjectName(_fromUtf8("label_6"))



        self.pushButton_2 = QtGui.QPushButton(Dialog)
        self.pushButton_2.setGeometry(QtCore.QRect(660, 250, 41, 31))
        self.pushButton_2.setStyleSheet(_fromUtf8("QPushButton{\n"
"   text-decoration:none;  \n"
"    background:#2f435e;  \n"
"    color:#f2f2f2;  \n"
"      \n"
"    padding: 10px 30px 10px 30px;  \n"
"    font-size:16px;  \n"
"    font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;  \n"
"    font-weight:bold;  \n"
"    border-radius:3px; \n"
"}"))
        self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
        self.pushButton_3 = QtGui.QPushButton(Dialog)
        self.pushButton_3.setGeometry(QtCore.QRect(660, 320, 41, 31))
        self.pushButton_3.setStyleSheet(_fromUtf8("QPushButton{\n"
"   text-decoration:none;  \n"
"    background:#2f435e;  \n"
"    color:#f2f2f2;  \n"
"      \n"
"    padding: 10px 30px 10px 30px;  \n"
"    font-size:16px;  \n"
"    font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;  \n"
"    font-weight:bold;  \n"
"    border-radius:3px; \n"
"}"))
        self.pushButton_3.setObjectName(_fromUtf8("pushButton_3"))
        self.lineEdit = QtGui.QLineEdit(Dialog)
        self.lineEdit.setGeometry(QtCore.QRect(480, 40, 121, 41))
        self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
        self.lineEdit.setStyleSheet(_fromUtf8("QLineEdit{\n"
"   text-decoration:none;  \n"

"      \n"
"    padding: 10px 30px 10px 30px;  \n"
"    font-size:14px;  \n"
"    font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;  \n"
"    font-weight:bold;  \n"
"    border-radius:3px; \n"
"}"))

        self.lineEdit_2 = QtGui.QLineEdit(Dialog)
        self.lineEdit_2.setGeometry(QtCore.QRect(480, 110, 150, 41))
        self.lineEdit_2.setObjectName(_fromUtf8("lineEdit_2"))
        self.lineEdit_2.setStyleSheet(_fromUtf8("QLineEdit{\n"
"   text-decoration:none;  \n"

"      \n"
"    padding: 10px 30px 10px 30px;  \n"
"    font-size:14px;  \n"
"    font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;  \n"
"    font-weight:bold;  \n"
"    border-radius:3px; \n"
"}"))        
        self.lineEdit_3 = QtGui.QLineEdit(Dialog)
        self.lineEdit_3.setGeometry(QtCore.QRect(480, 180, 150, 41))
        self.lineEdit_3.setObjectName(_fromUtf8("lineEdit_3"))
        self.lineEdit_3.setStyleSheet(_fromUtf8("QLineEdit{\n"
"   text-decoration:none;  \n"

"      \n"
"    padding: 10px 30px 10px 30px;  \n"
"    font-size:14px;  \n"
"    font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;  \n"
"    font-weight:bold;  \n"
"    border-radius:3px; \n"
"}"))
        self.lineEdit_4 = QtGui.QLineEdit(Dialog)
        self.lineEdit_4.setGeometry(QtCore.QRect(480, 240, 150, 41))
        self.lineEdit_4.setObjectName(_fromUtf8("lineEdit_4"))
        self.lineEdit_4.setStyleSheet(_fromUtf8("QLineEdit{\n"
"   text-decoration:none;  \n"

"      \n"
"    padding: 10px 30px 10px 30px;  \n"
"    font-size:14px;  \n"
"    font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;  \n"
"    font-weight:bold;  \n"
"    border-radius:3px; \n"
"}"))
        self.lineEdit_5 = QtGui.QLineEdit(Dialog)
        self.lineEdit_5.setGeometry(QtCore.QRect(480, 310, 150, 41))
        self.lineEdit_5.setObjectName(_fromUtf8("lineEdit_5"))
        self.lineEdit_5.setStyleSheet(_fromUtf8("QLineEdit{\n"
"   text-decoration:none;  \n"

"      \n"
"    padding: 10px 30px 10px 30px;  \n"
"    font-size:14px;  \n"
"    font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;  \n"
"    font-weight:bold;  \n"
"    border-radius:3px; \n"
"}"))
        self.lineEdit_6 = QtGui.QLineEdit(Dialog)
        self.lineEdit_6.setGeometry(QtCore.QRect(480, 380, 121, 41))
        self.lineEdit_6.setObjectName(_fromUtf8("lineEdit_6"))
        self.lineEdit_6.setStyleSheet(_fromUtf8("QLineEdit{\n"
"   text-decoration:none;  \n"

"      \n"
"    padding: 10px 30px 10px 30px;  \n"
"    font-size:14px;  \n"
"    font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;  \n"
"    font-weight:bold;  \n"
"    border-radius:3px; \n"
"}"))

        self.retranslateUi(Dialog)
        QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL(_fromUtf8("clicked()")), Dialog.liulan1)
        QtCore.QObject.connect(self.pushButton_3, QtCore.SIGNAL(_fromUtf8("clicked()")), Dialog.liulan2)
        QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), Dialog.begin_start)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(_translate("Dialog", "Dialog", None))
        self.pushButton.setText(_translate("Dialog", "begin", None))
        self.label.setText(_translate("Dialog", "ip个数:", None))
        self.label_2.setText(_translate("Dialog", "输入起始ip:", None))
        self.label_3.setText(_translate("Dialog", "输入结束ip:", None))
        self.label_4.setText(_translate("Dialog", "内核文件1路径:", None))
        self.label_5.setText(_translate("Dialog", "内核文件2路径:", None))
        self.label_6.setText(_translate("Dialog", "升级次数:", None))
        self.pushButton_2.setText(_translate("Dialog", "...", None))
        self.pushButton_3.setText(_translate("Dialog", "...", None))

import picture_rc,sys

class MainWindow(QtGui.QDialog): 
    def __init__(self,parent=None):
        QtGui.QWidget.__init__(self,parent)
        self.ui=Ui_Dialog()# Ui_Dialog为.ui产生.py文件中窗体类名,经测试类名以Ui_为前缀,加上UI窗体对象名(此处为Dialog,见上图)
        self.ui.setupUi(self)

        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)     #构造函数中设置去掉菜单栏

    def mousePressEvent(self, event):
        self.pressX = event.x()    #记录鼠标按下的时候的坐标
        self.pressY = event.y()

    def mouseMoveEvent(self, event):
        x = event.x()
        y = event.y()   #获取移动后的坐标
        moveX = x-self.pressX
        moveY = y-self.pressY  #计算移动了多少
        positionX = self.frameGeometry().x() + moveX
        positionY = self.frameGeometry().y() + moveY    #计算移动后主窗口在桌面的位置
        self.move(positionX, positionY)    #移动主窗口    
      
        
    def liulan1(self):
        self.ui.lineEdit_4.setText("") #设置文本框内容
        file_path=QtGui.QFileDialog.getExistingDirectory( self, 'Open' )## 弹出对话框,选择文件夹
        self.ui.lineEdit_4.setText(file_path) #设置文本框内容
    def liulan2(self):
        self.ui.lineEdit_5.setText("") #设置文本框内容
        file_path=QtGui.QFileDialog.getExistingDirectory( self, 'Open' )## 弹出对话框,选择文件夹
        self.ui.lineEdit_5.setText(file_path) 

    def begin_start(self):
        device_num=self.ui.lineEdit.text()  #获取文本框中文本, .toPlainText()为多行文本框QTextLine中函数,.text()为单行文本框QLineEdit函数
        ip_start=self.ui.lineEdit_2.text()
        ip_end=self.ui.lineEdit_3.text()
        file_addr1=self.ui.lineEdit_4.text()
        file_addr2=self.ui.lineEdit_5.text()
        update_num=self.ui.lineEdit_6.text()
        
        ip_start_list=ip_start.split('.')
         
        if not ip_end:
          ip_end=ip_start

        
        file_addr1=filepath_to_filename(file_addr1)
        
        file_addr2=filepath_to_filename(file_addr2)

        a=ipc_update() 
        
        dialog = win32gui.FindWindow('#32770', u'IPCConfig')  # 对话框
        search(dialog,ip_start,ip_end)

        ip_list=[]
        
        file= open('result.txt', 'w+')

        for n in range(int(device_num)):
            ip_list.append(ip_start)
            ip_start='.'.join([ip_start_list[0],ip_start_list[1],
                ip_start_list[2],str((int(ip_start_list[3])+1))]) 

        success_num=0
        print_write(file,"升级开始时间为:%s"%(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))))

        for i  in range(int(update_num)):
           version_begin=[]
           version_end=[]
           results=''
           if not file_addr2:
             file_version='V'+file_addr1.split('_')[-2]
             #print(file_version)
             for ip in ip_list:
               print_write(file,'%s升级前设备版本号:%s   文件版本号:%s'%(ip,see_version(ip),file_version))
               version_begin.append(file_version)

             update(dialog,file_addr1)
             time.sleep(0.5)

             dialog_ker=find_idxSubHandle(dialog, '#32770', 1)
             dialog_1=win32gui.FindWindowEx(dialog_ker,0,'Edit', None)
             update_end(dialog_1)
             
             time.sleep(0.5)
             #for ip in ip_list:
             for j in range(len(ip_list)):
               ver=see_version(ip_list[j])
               version_end.append(ver)
               if version_end[j]==file_version:
                 success_num=success_num+1
                 results='成功'
               else:
                 results='失败'
               print_write(file,'%s升级后设备版本号:%s   升级%s'%(ip_list[j],ver,results))

             print_write(file,'第%s次升级结束'%(i+1))
             

           else:
             if (i+1)%2==0:
                file_addr=file_addr2
             else:
                file_addr=file_addr1
             file_version='V'+file_addr.split('_')[-2]
             #print(file_version)
             for ip in ip_list:
               print_write(file,'%s升级前设备版本号:%s   文件版本号:%s'%(ip,see_version(ip),file_version))
               version_begin.append(file_version)

             update(dialog,file_addr)
             time.sleep(0.5)

             dialog_ker=find_idxSubHandle(dialog, '#32770', 1)
             dialog_1=win32gui.FindWindowEx(dialog_ker,0,'Edit', None)
             update_end(dialog_1)
             #print('第%s次升级结束'%(i+1))
             time.sleep(0.5)
             
             #for ip in ip_list:
             for j in range(len(ip_list)):
               ver=see_version(ip_list[j])
               version_end.append(ver)
               if version_end[j]==file_version:
                 success_num=success_num+1
                 results='成功'
               else:
                 results='失败'
               print_write(file,'%s升级后设备版本号:%s   升级%s'%(ip_list[j],ver,results))
             print_write(file,'第%s次升级结束'%(i+1))
             
               
        print_write(file,"升级结束时间为:%s"%(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))))
        print_write(file,'升级成功次数:%s'%(success_num/int(device_num)))
        file.close()





if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    
    myapp=MainWindow()
    myapp.show()
    #myapp.btn.clicked.connect(ui2.show)
    app.exec_()

pyqt  GUI主要在class Ui_Dialog(object)声明之下,class Ui_Dialog(object)以上部分为具体实现功能的逻辑,可忽略。begin函数下前6句为获取输入框文本,之下为具体功能逻辑,可忽略。

本界面主要实现:可在输入框中输入信息,点击  ...按钮可以选择文件夹并将文件夹路径输入在输入框中,点击begin按钮获取输入框中对应信息并执行程序。

点击pushButton_2按钮绑定执行函数liulan1:

 QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL(_fromUtf8("clicked()")), Dialog.liulan1)

构造函数中设置去掉菜单栏:self.setWindowFlags(QtCore.Qt.FramelessWindowHint)     

def mousePressEvent(self, event),def mouseMoveEvent(self, event)用来使菜单栏去掉后还能用鼠标拖动移动界面

self.ui.lineEdit_4.setText( text):设置输入框文本

self.ui.lineEdit.toPlainText():获取输入框文本

QtGui.QFileDialog.getExistingDirectory:弹出对话框,选择文件夹

特别注意:

在class Ui_Dialog中

        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(_fromUtf8(":/image/li.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        '''
        palette1 = QtGui.QPalette()
        palette1.setBrush(Dialog.backgroundRole(), QtGui.QBrush(QtGui.QPixmap('li.png')))   # 设置背景图片
        Dialog.setPalette(palette1)
        '''
        Dialog.setWindowIcon(icon)
        Dialog.setStyleSheet(_fromUtf8("background-image: url(:/image/li.png);"))

设置背景图片以及图标图片,需要的是png格式图片,jpg格式图片设置不成功(暂不清楚何种原因)。

设置图片前需要现在此py文件相同路径下新建.qrc文件(如picture.qrc)并把图片li.png也放在相同路径下,内容如下:(prefix为前缀,程序调用图片url时需要加上前缀)

<RCC>
    <qresource prefix="/image">
        <file>li.png</file>
    </qresource>
</RCC>

之后用命令

pyrcc4 -py3  pictu.qrc -o pictu_rc.py  #将qrc资源文件转换为python资源文件

pyrcc4.exe位于python文件夹Lib\site-packages\PyQt4路径下,要将其路径加入环境变量,-py3是因为默认会转换为python2的资源文件,因此需要声明-py3。

如果不想转换图片为资源文件,也可以用以下方法:(直接将同路径下的li.png图片作为背景图片)

        palette1 = QtGui.QPalette()
        palette1.setBrush(Dialog.backgroundRole(), QtGui.QBrush(QtGui.QPixmap('li.png')))   # 设置背景图片
        Dialog.setPalette(palette1)
发布了24 篇原创文章 · 获赞 30 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/yufen9987/article/details/86060992