版本信息: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)