分页管理,避免一次性输出卡死
# from hexEditor import *
# -*- coding: utf-8 -*-
################################################################################
## Form generated from reading UI file 'hexEditor.ui'
##
## Created by: Qt User Interface Compiler version 5.15.2
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.pushButton_f_byte = QPushButton(self.centralwidget)
self.pushButton_f_byte.setObjectName(u"pushButton_f_byte")
self.pushButton_f_byte.setGeometry(QRect(610, 30, 81, 31))
self.spinBox_hexpage = QSpinBox(self.centralwidget)
self.spinBox_hexpage.setObjectName(u"spinBox_hexpage")
self.spinBox_hexpage.setGeometry(QRect(430, 30, 71, 31))
self.pushButton_f_update = QPushButton(self.centralwidget)
self.pushButton_f_update.setObjectName(u"pushButton_f_update")
self.pushButton_f_update.setGeometry(QRect(520, 30, 81, 31))
self.plainTextEdit = QPlainTextEdit(self.centralwidget)
self.plainTextEdit.setObjectName(u"plainTextEdit")
self.plainTextEdit.setGeometry(QRect(10, 70, 781, 481))
self.pushButton_hexsave = QPushButton(self.centralwidget)
self.pushButton_hexsave.setObjectName(u"pushButton_hexsave")
self.pushButton_hexsave.setGeometry(QRect(700, 30, 81, 31))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QMenuBar(MainWindow)
self.menubar.setObjectName(u"menubar")
self.menubar.setGeometry(QRect(0, 0, 800, 23))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QStatusBar(MainWindow)
self.statusbar.setObjectName(u"statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QMetaObject.connectSlotsByName(MainWindow)
# setupUi
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
self.pushButton_f_byte.setText(QCoreApplication.translate("MainWindow", u"\u6253\u5f00", None))
self.pushButton_f_update.setText(QCoreApplication.translate("MainWindow", u"\u5237\u65b0", None))
self.pushButton_hexsave.setText(QCoreApplication.translate("MainWindow", u"\u4fdd\u5b58", None))
# retranslateUi
import sys
import re
import os
import PySide2
if 1:
dirname = os.path.dirname(PySide2.__file__)
plugin_path = os.path.join(dirname, 'plugins', 'platforms')
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = plugin_path
class MainWinUi(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWinUi, self).__init__(parent) # 调用父类的初始化
self.setupUi(self)
self.pushButton_f_byte.clicked.connect(lambda: self.filebyte(reload=False))
self.spinBox_hexpage.valueChanged.connect(self.hexpagechange)
self.pushButton_hexsave.clicked.connect(self.hexsave)
if 1:
def splitlis(self,lis,n):
for i in range(0, len(lis), n):
yield lis[i: i + n]
def filebyte(self, reload=False):
if reload == False or self.byteviewsrc == "":
src = QFileDialog.getOpenFileName()[0]
self.byteviewsrc = src
self.hexcnt=open(self.byteviewsrc, 'rb').read().hex()
self.hexinterval=22
self.hexpagecnt=1024
self.hexlis=self.splitlis(self.hexcnt,self.hexpagecnt*2)
self.hexlis=list(self.hexlis)
self.spinBox_hexpage.setMaximum(0 if len(self.hexlis)==0 else len(self.hexlis)-1)
self.hexinx=int(self.spinBox_hexpage.text())
self.nowtext=self.hexlis[self.hexinx]
self.plainTextEdit.clear()
self.plainTextEdit.insertPlainText(self.nowtext)
def hexpagechange(self):
self.hexlis[self.hexinx]=re.sub('[^0-9a-f]', '', self.plainTextEdit.toPlainText())
self.hexinx = int(self.spinBox_hexpage.text())
self.nowtext=self.hexlis[self.hexinx]
self.plainTextEdit.clear()
self.plainTextEdit.insertPlainText(self.nowtext)
def hexsave(self):
self.hexlis[self.hexinx]=re.sub('[^0-9a-f]', '', self.plainTextEdit.toPlainText())
self.hexinx = int(self.spinBox_hexpage.text())
self.nowtext=self.hexlis[self.hexinx]
dst=QFileDialog.getSaveFileName()[0]
fp=open(dst,'wb+')
cnt=''
for x in self.hexlis: cnt+=x
fp.write(bytes.fromhex(cnt))
fp.close()
if __name__ == '__main__':
app = QApplication()
ui = MainWinUi()
ui.show()
sys.exit(app.exec_())