class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(720, 400) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") # 画板 self.board = PaintBoard(self.centralwidget) self.board.setEnabled(True) self.board.setGeometry(QtCore.QRect(200, 10, 500, 360)) self.board.setObjectName("widget") # UI初始化 # 连接状态提示 self.lineEdit = QtWidgets.QLineEdit(self.centralwidget) self.lineEdit.setGeometry(QtCore.QRect(10, 30, 170, 30)) font = QtGui.QFont() font.setPointSize(17) self.lineEdit.setFont(font) self.lineEdit.setReadOnly(True) # 缩放比例调整 self.label = QtWidgets.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(20, 110, 81, 21)) font = QtGui.QFont() font.setPointSize(12) self.label.setFont(font) self.label.setObjectName("label") self.lineEdit.setObjectName("lineEdit") self.doubleSpinBox = QtWidgets.QDoubleSpinBox(self.centralwidget) self.doubleSpinBox.setGeometry(QtCore.QRect(110, 110, 62, 22)) self.doubleSpinBox.setMinimum(10.0) self.doubleSpinBox.setMaximum(90.0) self.doubleSpinBox.setProperty("value", 50.0) self.doubleSpinBox.setObjectName("doubleSpinBox") self.doubleSpinBox.valueChanged.connect(self.changerate) # # 纵坐标调整 # self.label = QtWidgets.QLabel(self.centralwidget) # self.label.setGeometry(QtCore.QRect(20, 90, 81, 21)) # font = QtGui.QFont() # font.setPointSize(12) # self.label.setFont(font) # self.label.setObjectName("label") # self.lineEdit.setObjectName("lineEdit") # self.doubleSpinBox = QtWidgets.QDoubleSpinBox(self.centralwidget) # self.doubleSpinBox.setGeometry(QtCore.QRect(110, 90, 62, 22)) # self.doubleSpinBox.setMinimum(16.0) # self.doubleSpinBox.setProperty("value", 32.0) # self.doubleSpinBox.setObjectName("doubleSpinBox") # # # 横坐标调整 # self.label_2 = QtWidgets.QLabel(self.centralwidget) # self.label_2.setGeometry(QtCore.QRect(20, 130, 81, 21)) # font = QtGui.QFont() # font.setPointSize(12) # self.label_2.setFont(font) # self.label_2.setObjectName("label_2") # self.doubleSpinBox_2 = QtWidgets.QDoubleSpinBox(self.centralwidget) # self.doubleSpinBox_2.setGeometry(QtCore.QRect(110, 130, 62, 22)) # self.doubleSpinBox_2.setMinimum(50.0) # self.doubleSpinBox_2.setMaximum(99.0) # self.doubleSpinBox_2.setObjectName("doubleSpinBox_2") # 峰峰值标签 self.label_3 = QtWidgets.QLabel(self.centralwidget) self.label_3.setGeometry(QtCore.QRect(20, 190, 81, 31)) font = QtGui.QFont() font.setPointSize(17) self.label_3.setFont(font) self.label_3.setObjectName("label_3") self.label_4 = QtWidgets.QLabel(self.centralwidget) self.label_4.setGeometry(QtCore.QRect(110, 200, 71, 16)) self.label_4.setObjectName("label_4") # 频率标签 self.label_5 = QtWidgets.QLabel(self.centralwidget) self.label_5.setGeometry(QtCore.QRect(20, 220, 81, 31)) font = QtGui.QFont() font.setPointSize(17) self.label_5.setFont(font) self.label_5.setObjectName("label_5") self.label_6 = QtWidgets.QLabel(self.centralwidget) self.label_6.setGeometry(QtCore.QRect(110, 230, 71, 16)) self.label_6.setObjectName("label_6") # 控制按钮 self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(30, 300, 140, 50)) font = QtGui.QFont() font.setPointSize(22) self.pushButton.setFont(font) self.pushButton.setObjectName("pushButton") self.running = False self.pushButton.clicked.connect(self.switch) # 菜单 MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 718, 23)) self.menubar.setObjectName("menubar") self.menu = QtWidgets.QMenu(self.menubar) self.menu.setObjectName("menu") # 二级菜单标签 # 选择串口标签 self.menu_2 = QtWidgets.QMenu(self.menu) self.menu_2.setObjectName("menu_2") MainWindow.setMenuBar(self.menubar) # 选择串口 self.actionCOM1 = QtWidgets.QAction(MainWindow) self.actionCOM1.setObjectName("actionCOM1") self.actionCOM1.triggered.connect(lambda: self.selectCOM(0)) self.actionCOM2 = QtWidgets.QAction(MainWindow) self.actionCOM2.setObjectName("actionCOM2") self.actionCOM2.triggered.connect(lambda: self.selectCOM(1)) self.actionCOM3 = QtWidgets.QAction(MainWindow) self.actionCOM3.setObjectName("actionCOM3") self.actionCOM3.triggered.connect(lambda: self.selectCOM(2)) self.menu_2.addAction(self.actionCOM1) self.menu_2.addAction(self.actionCOM2) self.menu_2.addAction(self.actionCOM3) self.menu.addAction(self.menu_2.menuAction()) self.menubar.addAction(self.menu.menuAction()) # 定时器接收数据 self.pretime = time() self.timer = QtCore.QTimer() self.timer.timeout.connect(self.data_receive) self.retranslateUi(MainWindow) self.initdata() QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): # 文字初始化 _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "FPGA_Display")) self.lineEdit.setText(_translate("MainWindow", "端口未选择")) self.label.setText(_translate("MainWindow", "缩放比例")) # self.label.setText(_translate("MainWindow", "纵坐标大小")) # self.label_2.setText(_translate("MainWindow", "横坐标大小")) self.label_3.setText(_translate("MainWindow", "峰峰值:")) self.label_4.setText(_translate("MainWindow", "0")) self.label_5.setText(_translate("MainWindow", " 频率:")) self.label_6.setText(_translate("MainWindow", "0")) self.pushButton.setText(_translate("MainWindow", "开始")) self.menu.setTitle(_translate("MainWindow", "菜单")) self.menu_2.setTitle(_translate("MainWindow", "选择端口")) self.actionCOM1.setText(_translate("MainWindow", "COM1")) self.actionCOM2.setText(_translate("MainWindow", "COM2")) self.actionCOM3.setText(_translate("MainWindow", "COM3")) def initdata(self): # 初始化串行端口 # self.currentCOM=0 # self.COMs=[serial.Serial("COM3",9600,timeout=0.5) for i in range(1,3)] # 获取可用的端口 port_list = list(serial.tools.list_ports.comports()) self.port_num = len(port_list) for i in port_list: print(i.device) self.currentCOM_index = -1 self.currentCOM = None self.COMs = [] if self.port_num == 0: print("没有可用端口") self.pushButton.setEnabled(False) self.actionCOM1.setEnabled(False) self.actionCOM2.setEnabled(False) self.actionCOM3.setEnabled(False) else: # 有可用的端口 # 初始化缓存区,缓冲区定义为MAXBUFF字节 self.MAXBUFF=100 self.databuff = [] self.buffremain = self.MAXBUFF # 初始化端口 self.lineEdit.setText("端口COM1已打开") self.currentCOM_index = 0 self.COMs = [Serial(port=seri.device, baudrate=9600, timeout=0.5,parity=PARITY_NONE, stopbits = STOPBITS_ONE,bytesize=SEVENBITS) for seri in port_list] self.currentCOM = self.COMs[0] if self.port_num == 1: self.actionCOM2.setEnabled(False) self.actionCOM3.setEnabled(False) elif self.port_num == 2: self.actionCOM3.setEnabled(False) # 改变缩放比例 def changerate(self): self.MAXBUFF = int(self.doubleSpinBox.value()*2) # self.buffremain = self.MAXBUFF # self.databuff = [] # 打开串口 def port_open(self): # self.currentCOM.port = self.s1__box_2.currentText() # self.currentCOM.baudrate = int(self.s1__box_3.currentText()) # self.currentCOM.bytesize = int(self.s1__box_4.currentText()) # self.currentCOM.stopbits = int(self.s1__box_6.currentText()) # self.currentCOM.parity = self.s1__box_5.currentText() # self.currentCOM.baudrate=9600 # self.currentCOM.bytesize=8 # self.currentCOM.stopbits=1 # self.currentCOM.parity="N" try: self.currentCOM.open() except (Exception, BaseException) as e: print(e) print( "Port Error", "此串口不能被打开!") # 打开串口接收定时器,周期为2ms self.timer.start(10) return self.currentCOM.isOpen() # 关闭串口 def port_close(self): self.timer.stop() try: self.currentCOM.close() except: pass return not self.currentCOM.isOpen() # 在菜单中选择端口 def selectCOM(self, n): self.currentCOM_index = n if (n < self.port_num) else 0 self.currentCOM = self.COMs[n] self.lineEdit.setText("端口COM%d已打开" % (n + 1)) print("OK", n) # 运行/停止运行按钮 def switch(self): # 尝试进行切换 result=False if self.running: result=self.port_close() else: result=self.port_open() # 根据切换结果进行设置 if result: self.running = not self.running if self.running: self.pushButton.setText("暂停") else: self.pushButton.setText("开始") else: print("false") # 接收数据 def data_receive(self): try: # 获取缓存区中的个数 num = self.currentCOM.inWaiting() num = num if num < self.buffremain else self.buffremain except (Exception, BaseException) as e: print(e) exit(-1) if num > 0: data = self.currentCOM.read(num) num = len(data) print(data) # 统计接收字符的数量 self.buffremain -= num # 添加数据到缓冲区中 self.databuff.extend(data) else: pass if self.buffremain <= 0: self.refresh() # 缓冲区满,触发刷新 def refresh(self): fre=0 mid = (max(self.databuff)+min(self.databuff))/2 now = time() perid = now-self.pretime self.pretime = time() # 计算频率 for i in range(len(self.databuff)-2): if (self.databuff[i]-mid)*(self.databuff[i+2]-mid)<0: fre+=1 # 计算峰峰值 vvp=max(self.databuff)-min(self.databuff) self.label_4.setText(str(vvp)) self.label_6.setText(str(round(fre/2/perid,2))) self.board.draw_wave(self.databuff) self.buffremain = self.MAXBUFF self.databuff = [] print("=================refresh!!!!================")
def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(720, 400) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") # 画板 self.board = PaintBoard(self.centralwidget) self.board.setEnabled(True) self.board.setGeometry(QtCore.QRect(200, 10, 500, 360)) self.board.setObjectName("widget") # UI初始化 # 连接状态提示 self.lineEdit = QtWidgets.QLineEdit(self.centralwidget) self.lineEdit.setGeometry(QtCore.QRect(10, 30, 170, 30)) font = QtGui.QFont() font.setPointSize(17) self.lineEdit.setFont(font) self.lineEdit.setReadOnly(True) # 缩放比例调整 self.label = QtWidgets.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(20, 110, 81, 21)) font = QtGui.QFont() font.setPointSize(12) self.label.setFont(font) self.label.setObjectName("label") self.lineEdit.setObjectName("lineEdit") self.doubleSpinBox = QtWidgets.QDoubleSpinBox(self.centralwidget) self.doubleSpinBox.setGeometry(QtCore.QRect(110, 110, 62, 22)) self.doubleSpinBox.setMinimum(10.0) self.doubleSpinBox.setMaximum(90.0) self.doubleSpinBox.setProperty("value", 50.0) self.doubleSpinBox.setObjectName("doubleSpinBox") self.doubleSpinBox.valueChanged.connect(self.changerate) # # 纵坐标调整 # self.label = QtWidgets.QLabel(self.centralwidget) # self.label.setGeometry(QtCore.QRect(20, 90, 81, 21)) # font = QtGui.QFont() # font.setPointSize(12) # self.label.setFont(font) # self.label.setObjectName("label") # self.lineEdit.setObjectName("lineEdit") # self.doubleSpinBox = QtWidgets.QDoubleSpinBox(self.centralwidget) # self.doubleSpinBox.setGeometry(QtCore.QRect(110, 90, 62, 22)) # self.doubleSpinBox.setMinimum(16.0) # self.doubleSpinBox.setProperty("value", 32.0) # self.doubleSpinBox.setObjectName("doubleSpinBox") # # # 横坐标调整 # self.label_2 = QtWidgets.QLabel(self.centralwidget) # self.label_2.setGeometry(QtCore.QRect(20, 130, 81, 21)) # font = QtGui.QFont() # font.setPointSize(12) # self.label_2.setFont(font) # self.label_2.setObjectName("label_2") # self.doubleSpinBox_2 = QtWidgets.QDoubleSpinBox(self.centralwidget) # self.doubleSpinBox_2.setGeometry(QtCore.QRect(110, 130, 62, 22)) # self.doubleSpinBox_2.setMinimum(50.0) # self.doubleSpinBox_2.setMaximum(99.0) # self.doubleSpinBox_2.setObjectName("doubleSpinBox_2") # 峰峰值标签 self.label_3 = QtWidgets.QLabel(self.centralwidget) self.label_3.setGeometry(QtCore.QRect(20, 190, 81, 31)) font = QtGui.QFont() font.setPointSize(17) self.label_3.setFont(font) self.label_3.setObjectName("label_3") self.label_4 = QtWidgets.QLabel(self.centralwidget) self.label_4.setGeometry(QtCore.QRect(110, 200, 71, 16)) self.label_4.setObjectName("label_4") # 频率标签 self.label_5 = QtWidgets.QLabel(self.centralwidget) self.label_5.setGeometry(QtCore.QRect(20, 220, 81, 31)) font = QtGui.QFont() font.setPointSize(17) self.label_5.setFont(font) self.label_5.setObjectName("label_5") self.label_6 = QtWidgets.QLabel(self.centralwidget) self.label_6.setGeometry(QtCore.QRect(110, 230, 71, 16)) self.label_6.setObjectName("label_6") # 控制按钮 self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(30, 300, 140, 50)) font = QtGui.QFont() font.setPointSize(22) self.pushButton.setFont(font) self.pushButton.setObjectName("pushButton") self.running = False self.pushButton.clicked.connect(self.switch) # 菜单 MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 718, 23)) self.menubar.setObjectName("menubar") self.menu = QtWidgets.QMenu(self.menubar) self.menu.setObjectName("menu") # 二级菜单标签 # 选择串口标签 self.menu_2 = QtWidgets.QMenu(self.menu) self.menu_2.setObjectName("menu_2") MainWindow.setMenuBar(self.menubar) # 选择串口 self.actionCOM1 = QtWidgets.QAction(MainWindow) self.actionCOM1.setObjectName("actionCOM1") self.actionCOM1.triggered.connect(lambda: self.selectCOM(0)) self.actionCOM2 = QtWidgets.QAction(MainWindow) self.actionCOM2.setObjectName("actionCOM2") self.actionCOM2.triggered.connect(lambda: self.selectCOM(1)) self.actionCOM3 = QtWidgets.QAction(MainWindow) self.actionCOM3.setObjectName("actionCOM3") self.actionCOM3.triggered.connect(lambda: self.selectCOM(2)) self.menu_2.addAction(self.actionCOM1) self.menu_2.addAction(self.actionCOM2) self.menu_2.addAction(self.actionCOM3) self.menu.addAction(self.menu_2.menuAction()) self.menubar.addAction(self.menu.menuAction()) # 定时器接收数据 self.pretime = time() self.timer = QtCore.QTimer() self.timer.timeout.connect(self.data_receive) self.retranslateUi(MainWindow) self.initdata() QtCore.QMetaObject.connectSlotsByName(MainWindow)
def __InitData(self): ''' 初始化成员变量 ''' self.__paintBoard = PaintBoard(self) self.__colorList = QColor.colorNames() #获取颜色列表(字符串类型)
class MainWidget(QWidget): def __init__(self, Parent=None): ''' Constructor ''' super().__init__(Parent) self.__InitData() #先初始化数据,再初始化界面 self.__InitView() def __InitData(self): ''' 初始化成员变量 ''' self.__paintBoard = PaintBoard(self) #获取颜色列表(字符串类型) self.__colorList = QColor.colorNames() def __InitView(self): ''' 初始化界面 ''' self.setFixedSize(640,480) self.setWindowTitle("PaintBoard Example PyQt5") #新建一个水平布局作为本窗体的主布局 main_layout = QHBoxLayout(self) #设置主布局内边距以及控件间距为10px main_layout.setSpacing(10) #在主界面左侧放置画板 main_layout.addWidget(self.__paintBoard) #新建垂直子布局用于放置按键 sub_layout = QVBoxLayout() #设置此子布局和内部控件的间距为10px sub_layout.setContentsMargins(10, 10, 10, 10) self.__btn_Clear = QPushButton("清空画板") self.__btn_Clear.setParent(self) #设置父对象为本界面 #将按键按下信号与画板清空函数相关联 self.__btn_Clear.clicked.connect(self.__paintBoard.Clear) sub_layout.addWidget(self.__btn_Clear) self.__btn_Quit = QPushButton("退出") self.__btn_Quit.setParent(self) #设置父对象为本界面 self.__btn_Quit.clicked.connect(self.Quit) sub_layout.addWidget(self.__btn_Quit) self.__btn_Save = QPushButton("保存作品") self.__btn_Save.setParent(self) self.__btn_Save.clicked.connect(self.on_btn_Save_Clicked) sub_layout.addWidget(self.__btn_Save) self.__cbtn_Eraser = QCheckBox(" 使用橡皮擦") self.__cbtn_Eraser.setParent(self) self.__cbtn_Eraser.clicked.connect(self.on_cbtn_Eraser_clicked) sub_layout.addWidget(self.__cbtn_Eraser) splitter = QSplitter(self) #占位符 sub_layout.addWidget(splitter) self.__label_penThickness = QLabel(self) self.__label_penThickness.setText("画笔粗细") self.__label_penThickness.setFixedHeight(20) sub_layout.addWidget(self.__label_penThickness) self.__spinBox_penThickness = QSpinBox(self) self.__spinBox_penThickness.setMaximum(20) self.__spinBox_penThickness.setMinimum(2) self.__spinBox_penThickness.setValue(10) #默认粗细为10 self.__spinBox_penThickness.setSingleStep(2) #最小变化值为2 self.__spinBox_penThickness.valueChanged.connect(self.on_PenThicknessChange)#关联spinBox值变化信号和函数on_PenThicknessChange sub_layout.addWidget(self.__spinBox_penThickness) self.__label_penColor = QLabel(self) self.__label_penColor.setText("画笔颜色") self.__label_penColor.setFixedHeight(20) sub_layout.addWidget(self.__label_penColor) self.__comboBox_penColor = QComboBox(self) self.__fillColorList(self.__comboBox_penColor) #用各种颜色填充下拉列表 self.__comboBox_penColor.currentIndexChanged.connect(self.on_PenColorChange) #关联下拉列表的当前索引变更信号与函数on_PenColorChange sub_layout.addWidget(self.__comboBox_penColor) main_layout.addLayout(sub_layout) #将子布局加入主布局 def __fillColorList(self, comboBox): index_black = 0 index = 0 for color in self.__colorList: if color == "black": index_black = index index += 1 pix = QPixmap(70,20) pix.fill(QColor(color)) comboBox.addItem(QIcon(pix),None) comboBox.setIconSize(QSize(70,20)) comboBox.setSizeAdjustPolicy(QComboBox.AdjustToContents) comboBox.setCurrentIndex(index_black) def on_PenColorChange(self): color_index = self.__comboBox_penColor.currentIndex() color_str = self.__colorList[color_index] self.__paintBoard.ChangePenColor(color_str) def on_PenThicknessChange(self): penThickness = self.__spinBox_penThickness.value() self.__paintBoard.ChangePenThickness(penThickness) def on_btn_Save_Clicked(self): savePath = QFileDialog.getSaveFileName(self, 'Save Your Paint', '.\\', '*.png') print(savePath) if savePath[0] == "": print("Save cancel") return image = self.__paintBoard.GetContentAsQImage() image.save(savePath[0]) def on_cbtn_Eraser_clicked(self): if self.__cbtn_Eraser.isChecked(): self.__paintBoard.EraserMode = True #进入橡皮擦模式 else: self.__paintBoard.EraserMode = False #退出橡皮擦模式 def Quit(self): self.close()
class MainWidget(QWidget): def __init__(self, Parent=None): ''' Constructor ''' super().__init__(Parent) self.__InitData() #先初始化数据,再初始化界面 self.__InitView() def __InitData(self): ''' 初始化成员变量 ''' self.__paintBoard = PaintBoard(self) self.__colorList = QColor.colorNames() #获取颜色列表(字符串类型) def __InitView(self): ''' 初始化界面 ''' self.setFixedSize(2560,1600) self.setWindowTitle("图形学画板") main_layout = QHBoxLayout(self) #新建一个水平布局作为本窗体的主布局 main_layout.setSpacing(10) #设置主布局内边距以及控件间距为10px sub_layout_LEVEL1 = QVBoxLayout() #新建垂直子布局用于放置按键 sub_layout_LEVEL1.setContentsMargins(10, 10, 10, 10) #设置此子布局和内部控件的间距为10px main_layout.addLayout(sub_layout_LEVEL1) #将子布局1加入主布局 sub_layout_LEVEL2 = QVBoxLayout() # 新建垂直子布局用于放置按键 sub_layout_LEVEL2.setContentsMargins(10, 10, 10, 10) # 设置此子布局和内部控件的间距为10px main_layout.addLayout(sub_layout_LEVEL2) # 将子布局2加入主布局 sub_layout_LEVEL3 = QVBoxLayout() # 新建垂直子布局用于放置按键 sub_layout_LEVEL3.setContentsMargins(10, 10, 10, 10) # 设置此子布局和内部控件的间距为10px main_layout.addLayout(sub_layout_LEVEL3) # 将子布局2加入主布局 sub_layout_LEVEL2_1 = QHBoxLayout() # 新建水平子布局用于放置按键 sub_layout_LEVEL2_1.setContentsMargins(10, 10, 10, 10) # 设置此子布局和内部控件的间距为10px sub_layout_LEVEL2.addLayout(sub_layout_LEVEL2_1) sub_layout_LEVEL2_2 = QHBoxLayout() # 新建水平子布局用于放置按键 sub_layout_LEVEL2_2.setContentsMargins(10, 10, 10, 10) # 设置此子布局和内部控件的间距为10px sub_layout_LEVEL2.addLayout(sub_layout_LEVEL2_2) sub_layout_LEVEL2_3 = QHBoxLayout() # 新建水平子布局用于放置按键 sub_layout_LEVEL2_3.setContentsMargins(10, 10, 10, 10) # 设置此子布局和内部控件的间距为10px sub_layout_LEVEL2.addLayout(sub_layout_LEVEL2_3) sub_layout_LEVEL2_4 = QHBoxLayout() # 新建水平子布局用于放置按键 sub_layout_LEVEL2_4.setContentsMargins(10, 10, 10, 10) # 设置此子布局和内部控件的间距为10px sub_layout_LEVEL2.addLayout(sub_layout_LEVEL2_4) #放置左侧图标 self.__btn_Quit = QPushButton(" 退出") self.__btn_Quit.setIcon(QIcon("1.png")) # 设置图标 self.__btn_Quit.setFixedHeight(60) self.__btn_Quit.setFixedWidth(200) self.__btn_Quit.setParent(self) #设置父对象为本界面 self.__btn_Quit.clicked.connect(self.Quit) sub_layout_LEVEL1.addWidget(self.__btn_Quit) self.__btn_Save = QPushButton("保存作品") self.__btn_Save.setIcon(QIcon("1.png")) # 设置图标 self.__btn_Save.setFixedHeight(60) self.__btn_Save.setFixedWidth(200) self.__btn_Save.setParent(self) self.__btn_Save.clicked.connect(self.on_btn_Save_Clicked) sub_layout_LEVEL1.addWidget(self.__btn_Save) self.__btn_Load = QPushButton("读取作品") self.__btn_Load.setIcon(QIcon("1.png")) # 设置图标 self.__btn_Load.setFixedHeight(60) self.__btn_Load.setFixedWidth(200) self.__btn_Load.setParent(self) self.__btn_Load.clicked.connect(self.on_btn_Load_Clicked) sub_layout_LEVEL1.addWidget(self.__btn_Load) splitter = QSplitter(self) #占位符 sub_layout_LEVEL1.addWidget(splitter) self.__cbtn_drawline=QPushButton(" 直线") self.__cbtn_drawline.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_drawline.setFixedHeight(60) self.__cbtn_drawline.setFixedWidth(200) self.__cbtn_drawline.setParent(self) self.__cbtn_drawline.clicked.connect(self.on_cbtn_drawline_clicked) sub_layout_LEVEL1.addWidget(self.__cbtn_drawline) self.__cbtn_zhexian = QPushButton(" 折线") self.__cbtn_zhexian.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_zhexian.setFixedHeight(60) self.__cbtn_zhexian.setFixedWidth(200) self.__cbtn_zhexian.setParent(self) self.__cbtn_zhexian.clicked.connect(self.on_cbtn_zhexian_clicked) sub_layout_LEVEL1.addWidget(self.__cbtn_zhexian) self.__cbtn_zhijiaoxian = QPushButton(" 直角线") self.__cbtn_zhijiaoxian.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_zhijiaoxian.setFixedHeight(60) self.__cbtn_zhijiaoxian.setFixedWidth(200) self.__cbtn_zhijiaoxian.setParent(self) self.__cbtn_zhijiaoxian.clicked.connect(self.on_cbtn_zhijiaoxian_clicked) sub_layout_LEVEL1.addWidget(self.__cbtn_zhijiaoxian) self.__cbtn_duobianxing = QPushButton(" 多边形") self.__cbtn_duobianxing.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_duobianxing.setFixedHeight(60) self.__cbtn_duobianxing.setFixedWidth(200) self.__cbtn_duobianxing.setParent(self) self.__cbtn_duobianxing.clicked.connect(self.on_cbtn_duobianxing_clicked) sub_layout_LEVEL1.addWidget(self.__cbtn_duobianxing) self.__cbtn_circle = QPushButton(" 圆 ") self.__cbtn_circle.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_circle.setFixedHeight(60) self.__cbtn_circle.setFixedWidth(200) self.__cbtn_circle.setParent(self) self.__cbtn_circle.clicked.connect(self.on_cbtn_circle_clicked) sub_layout_LEVEL1.addWidget(self.__cbtn_circle) self.__cbtn_oval = QPushButton(" 椭圆") self.__cbtn_oval.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_oval.setFixedHeight(60) self.__cbtn_oval.setFixedWidth(200) self.__cbtn_oval.setParent(self) self.__cbtn_oval.clicked.connect(self.on_cbtn_oval_clicked) sub_layout_LEVEL1.addWidget(self.__cbtn_oval) self.__cbtn_yuanhu = QPushButton(" 圆弧") self.__cbtn_yuanhu.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_yuanhu.setFixedHeight(60) self.__cbtn_yuanhu.setFixedWidth(200) self.__cbtn_yuanhu.setParent(self) self.__cbtn_yuanhu.clicked.connect(self.on_cbtn_yuanhu_clicked) sub_layout_LEVEL1.addWidget(self.__cbtn_yuanhu) self.__cbtn_tuoyuanhu = QPushButton(" 椭圆弧") self.__cbtn_tuoyuanhu.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_tuoyuanhu.setFixedHeight(60) self.__cbtn_tuoyuanhu.setFixedWidth(200) self.__cbtn_tuoyuanhu.setParent(self) self.__cbtn_tuoyuanhu.clicked.connect(self.on_cbtn_tuoyuanhu_clicked) sub_layout_LEVEL1.addWidget(self.__cbtn_tuoyuanhu) self.__cbtn_renyiquxian = QPushButton("任意曲线") self.__cbtn_renyiquxian.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_renyiquxian.setFixedHeight(60) self.__cbtn_renyiquxian.setFixedWidth(200) self.__cbtn_renyiquxian.setParent(self) self.__cbtn_renyiquxian.clicked.connect(self.on_cbtn_renyiquxian_clicked) sub_layout_LEVEL1.addWidget(self.__cbtn_renyiquxian) self.__cbtn_smooth_rectangle = QPushButton("圆角矩形") self.__cbtn_smooth_rectangle.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_smooth_rectangle.setFixedHeight(60) self.__cbtn_smooth_rectangle.setFixedWidth(200) self.__cbtn_smooth_rectangle.setParent(self) self.__cbtn_smooth_rectangle.clicked.connect(self.on_cbtn_smooth_rectangle_clicked) sub_layout_LEVEL1.addWidget(self.__cbtn_smooth_rectangle) self.__cbtn_rectangle = QPushButton(" 矩形") self.__cbtn_rectangle.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_rectangle.setFixedHeight(60) self.__cbtn_rectangle.setFixedWidth(200) self.__cbtn_rectangle.setParent(self) self.__cbtn_rectangle.clicked.connect(self.on_cbtn_rectangle_clicked) sub_layout_LEVEL1.addWidget(self.__cbtn_rectangle) self.__cbtn_character = QPushButton(" 字符") self.__cbtn_character.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_character.setFixedHeight(60) self.__cbtn_character.setFixedWidth(200) self.__cbtn_character.setParent(self) self.__cbtn_character.clicked.connect(self.on_cbtn_character_clicked) sub_layout_LEVEL1.addWidget(self.__cbtn_character) splitter = QSplitter(self) #占位符 sub_layout_LEVEL1.addWidget(splitter) self.__cbtn_Eraser = QCheckBox("橡皮擦") self.__cbtn_Eraser.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_Eraser.setFixedHeight(60) self.__cbtn_Eraser.setFixedWidth(200) self.__cbtn_Eraser.setParent(self) self.__cbtn_Eraser.clicked.connect(self.on_cbtn_Eraser_clicked) sub_layout_LEVEL1.addWidget(self.__cbtn_Eraser) self.__btn_Clear = QPushButton("清空画板") self.__btn_Clear.setParent(self) # 设置父对象为本界面 self.__btn_Clear.setIcon(QIcon("1.png")) # 设置图标 self.__btn_Clear.setFixedHeight(60) self.__btn_Clear.setFixedWidth(200) self.__btn_Clear.clicked.connect(self.__paintBoard.Clear) # 将按键按下信号与画板清空函数相关联 sub_layout_LEVEL1.addWidget(self.__btn_Clear) splitter = QSplitter(self) #占位符 sub_layout_LEVEL1.addWidget(splitter) self.__label_penThickness = QLabel(self) self.__label_penThickness.setText("画笔粗细") self.__label_penThickness.setFixedHeight(60) self.__label_penThickness.setFixedWidth(200) sub_layout_LEVEL1.addWidget(self.__label_penThickness) self.__spinBox_penThickness = QSpinBox(self) self.__spinBox_penThickness.setFixedHeight(60) self.__spinBox_penThickness.setFixedWidth(200) self.__spinBox_penThickness.setMaximum(20) self.__spinBox_penThickness.setMinimum(2) self.__spinBox_penThickness.setValue(10) #默认粗细为10 self.__spinBox_penThickness.setSingleStep(2) #最小变化值为1 self.__spinBox_penThickness.valueChanged.connect(self.on_PenThicknessChange)#关联spinBox值变化信号和函数on_PenThicknessChange sub_layout_LEVEL1.addWidget(self.__spinBox_penThickness) self.__label_penThickness = QLabel(self) self.__label_penThickness.setText("选择颜色") self.__label_penThickness.setFixedHeight(60) self.__label_penThickness.setFixedWidth(200) sub_layout_LEVEL1.addWidget(self.__label_penThickness) self.__comboBox_penColor = QComboBox(self) self.__comboBox_penColor.setFixedHeight(60) self.__comboBox_penColor.setFixedWidth(200) self.__fillColorList(self.__comboBox_penColor) #用各种颜色填充下拉列表 self.__comboBox_penColor.currentIndexChanged.connect(self.on_PenColorChange) #关联下拉列表的当前索引变更信号与函数on_PenColorChange sub_layout_LEVEL1.addWidget(self.__comboBox_penColor) self.__btn_fillcolor = QPushButton("填充颜色") self.__btn_fillcolor.setIcon(QIcon("1.png")) # 设置图标 self.__btn_fillcolor.setFixedHeight(60) self.__btn_fillcolor.setFixedWidth(200) self.__btn_fillcolor.setParent(self) self.__btn_fillcolor.clicked.connect(self.on_btn_fillcolor_Clicked) sub_layout_LEVEL1.addWidget(self.__btn_fillcolor) #放置中间图标 sub_layout_LEVEL2_2.addWidget(self.__paintBoard)#放置画板 self.__cbtn_recall = QPushButton(" 撤回") self.__cbtn_recall.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_recall.setFixedHeight(60) self.__cbtn_recall.setFixedWidth(200) self.__cbtn_recall.setParent(self) self.__cbtn_recall.clicked.connect(self.on_cbtn_recall_clicked) sub_layout_LEVEL2_3.addWidget(self.__cbtn_recall) self.__cbtn_repetition = QPushButton(" 重复") self.__cbtn_repetition.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_repetition.setFixedHeight(60) self.__cbtn_repetition.setFixedWidth(200) self.__cbtn_repetition.setParent(self) self.__cbtn_repetition.clicked.connect(self.on_cbtn_repetition_clicked) sub_layout_LEVEL2_3.addWidget(self.__cbtn_repetition) self.__cbtn_aim_left = QPushButton(" 左对齐") self.__cbtn_aim_left.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_aim_left.setFixedHeight(60) self.__cbtn_aim_left.setFixedWidth(200) self.__cbtn_aim_left.setParent(self) self.__cbtn_aim_left.clicked.connect(self.on_cbtn_aim_left_clicked) sub_layout_LEVEL2_1.addWidget(self.__cbtn_aim_left) self.__cbtn_aim_middle = QPushButton("中间对齐") self.__cbtn_aim_middle.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_aim_middle.setFixedHeight(60) self.__cbtn_aim_middle.setFixedWidth(200) self.__cbtn_aim_middle.setParent(self) self.__cbtn_aim_middle.clicked.connect(self.on_cbtn_aim_middle_clicked) sub_layout_LEVEL2_1.addWidget(self.__cbtn_aim_middle) self.__cbtn_aim_right = QPushButton(" 右对齐") self.__cbtn_aim_right.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_aim_right.setFixedHeight(60) self.__cbtn_aim_right.setFixedWidth(200) self.__cbtn_aim_right.setParent(self) self.__cbtn_aim_right.clicked.connect(self.on_cbtn_aim_right_clicked) sub_layout_LEVEL2_1.addWidget(self.__cbtn_aim_right) self.__cbtn_cut_inside = QPushButton(" 内裁剪") self.__cbtn_cut_inside.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_cut_inside.setFixedHeight(60) self.__cbtn_cut_inside.setFixedWidth(200) self.__cbtn_cut_inside.setParent(self) self.__cbtn_cut_inside.clicked.connect(self.on_cbtn_cut_inside_clicked) sub_layout_LEVEL2_4.addWidget(self.__cbtn_cut_inside) self.__cbtn_cut_outside = QPushButton(" 外裁剪") self.__cbtn_cut_outside.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_cut_outside.setFixedHeight(60) self.__cbtn_cut_outside.setFixedWidth(200) self.__cbtn_cut_outside.setParent(self) self.__cbtn_cut_outside.clicked.connect(self.on_cbtn_cut_outside_clicked) sub_layout_LEVEL2_4.addWidget(self.__cbtn_cut_outside) #放置右侧图标 self.__cbtn_select = QPushButton(" 选择") self.__cbtn_select.setIcon(QIcon("1.png")) # 设置图标 self.__cbtn_select.setFixedHeight(60) self.__cbtn_select.setFixedWidth(200) self.__cbtn_select.setParent(self) self.__cbtn_select.clicked.connect(self.on_cbtn_select_clicked) sub_layout_LEVEL3.addWidget(self.__cbtn_select) def __fillColorList(self, comboBox): index_black = 0 index = 0 for color in self.__colorList: if color == "black": index_black = index index += 1 pix = QPixmap(70,20) pix.fill(QColor(color)) comboBox.addItem(QIcon(pix),None) comboBox.setIconSize(QSize(70,20)) comboBox.setSizeAdjustPolicy(QComboBox.AdjustToContents) comboBox.setCurrentIndex(index_black) def on_PenColorChange(self): color_index = self.__comboBox_penColor.currentIndex() color_str = self.__colorList[color_index] self.__paintBoard.ChangePenColor(color_str) def on_PenThicknessChange(self): penThickness = self.__spinBox_penThickness.value() self.__paintBoard.ChangePenThickness(penThickness) def on_btn_Save_Clicked(self): savePath = QFileDialog.getSaveFileName(self, 'Save Your Paint', '.\\', '*.png') print(savePath) if savePath[0] == "": print("Save cancel") return image = self.__paintBoard.GetContentAsQImage() image.save(savePath[0]) def on_cbtn_Eraser_clicked(self): if self.__cbtn_Eraser.isChecked(): self.__paintBoard.EraserMode = True #进入橡皮擦模式 else: self.__paintBoard.EraserMode = False #退出橡皮擦模式 def on_cbtn_drawline_clicked(self): print("划线函数") def on_btn_Load_Clicked(self): print("读取作品") def on_cbtn_zhexian_clicked(self): print("折线") def on_cbtn_zhijiaoxian_clicked(self): print("直角线") def on_cbtn_duobianxing_clicked(self): print("多边形") def on_cbtn_circle_clicked(self): print("圆") def on_cbtn_oval_clicked(self): print("椭圆") def on_cbtn_yuanhu_clicked(self): print("圆弧") def on_cbtn_tuoyuanhu_clicked(self): print("椭圆弧") def on_cbtn_renyiquxian_clicked(self): print("任意曲线") def on_cbtn_smooth_rectangle_clicked(self): print("圆角矩形") def on_cbtn_rectangle_clicked(self): print("矩形") def on_cbtn_character_clicked(self): print("字符") def on_cbtn_recall_clicked(self): print("撤回") def on_cbtn_repetition_clicked(self): print("重复") def on_cbtn_aim_left_clicked(self): print("左对齐") def on_cbtn_aim_middle_clicked(self): print("中间对齐") def on_cbtn_aim_right_clicked(self): print("右对齐") def on_cbtn_cut_inside_clicked(self): print("内裁剪") def on_cbtn_cut_outside_clicked(self): print("外裁剪") def on_cbtn_select_clicked(self): print("选择") def on_btn_fillcolor_Clicked(self): print("填充颜色") # def on_cbtn_drawline_clicked(self): # print("划线函数") # # def on_cbtn_drawline_clicked(self): # print("划线函数") # # def on_cbtn_drawline_clicked(self): # print("划线函数") # # def on_cbtn_drawline_clicked(self): # print("划线函数") # # def on_cbtn_drawline_clicked(self): # print("划线函数") # # def on_cbtn_drawline_clicked(self): # print("划线函数") def on_cbtn_drawline_clicked(self): print("划线函数") def Quit(self): self.close()
class MainWidget(QWidget): def __init__(self, Parent=None): super().__init__(Parent) self.__InitData() self.__InitView() f = open("params15000.json", "r") data = json.load(f) f.close() self.biase = np.array(data["biase"]) self.w_in = np.array(data["w_in"]) self.w_out = np.array(data["w_out"]) def __InitData(self): self.__paintBoard = PaintBoard(self) self.__colorList = QColor.colorNames() def __InitView(self): # self.setFixedSize(640,480) # self.setFixedSize(480,410) self.setFixedSize(800, 618) self.setWindowTitle("Handwritten Digit Recognition Based on HOG-ELM") self.setWindowIcon(QIcon('ICON.ico')) main_layout = QHBoxLayout(self) main_layout.setSpacing(10) main_layout.addWidget(self.__paintBoard) self.font = QtGui.QFont() self.font.setFamily("Consolas") self.font.setPointSize(15) sub_layout = QVBoxLayout() sub_layout.setContentsMargins(10, 10, 10, 10) self.__btn_Clear = QPushButton("Clear Board") self.__btn_Clear.setParent(self) self.__btn_Clear.setFixedSize(146, 70) self.__btn_Clear.setFont(self.font) self.__btn_Clear.clicked.connect(self.__paintBoard.Clear) sub_layout.addWidget(self.__btn_Clear) self.__btn_Quit = QPushButton("Exit") self.__btn_Quit.setParent(self) self.__btn_Quit.setFixedSize(146, 70) self.__btn_Quit.setFont(self.font) self.__btn_Quit.clicked.connect(self.Quit) sub_layout.addWidget(self.__btn_Quit) self.__btn_Save = QPushButton("Save Board") self.__btn_Save.setParent(self) self.__btn_Save.setFixedSize(146, 70) self.__btn_Save.setFont(self.font) self.__btn_Save.clicked.connect(self.on_btn_Save_Clicked) sub_layout.addWidget(self.__btn_Save) self.__cbtn_Eraser = QCheckBox("Eraser") self.__cbtn_Eraser.setParent(self) self.__cbtn_Eraser.setFont(self.font) self.__cbtn_Eraser.clicked.connect(self.on_cbtn_Eraser_clicked) sub_layout.addWidget(self.__cbtn_Eraser) self.__label_result = QLabel(self) self.__label_result.setAlignment(Qt.AlignCenter) self.__label_result.setFixedWidth(146) self.__label_result.setFixedHeight(80) self.__label_result.setFrameStyle(PyQt5.QtWidgets.QFrame.Box) self.__label_result.setFrameShadow(PyQt5.QtWidgets.QFrame.Raised) self.__label_result.setLineWidth(6) self.__label_result.setMidLineWidth(5) self.__label_result.setStyleSheet('background-color: rgb(255,123,100)') sub_layout.addWidget(self.__label_result) self.__btn_Recognize = QPushButton("Recognition") self.__btn_Recognize.setParent(self) self.__btn_Recognize.setFixedSize(146, 70) self.__btn_Recognize.setFont(self.font) self.__btn_Recognize.clicked.connect(self.on_btn_Recognize_clicked) sub_layout.addWidget(self.__btn_Recognize) self.__label_timage = QLabel(self) self.__label_timage.setAlignment(Qt.AlignCenter) self.__label_timage.setFixedWidth(146) self.__label_timage.setFixedHeight(80) self.__label_timage.setFrameStyle(PyQt5.QtWidgets.QFrame.Box) self.__label_timage.setFrameShadow(PyQt5.QtWidgets.QFrame.Raised) self.__label_timage.setLineWidth(6) self.__label_timage.setMidLineWidth(5) self.__label_timage.setStyleSheet('background-color: rgb(125,143,50)') sub_layout.addWidget(self.__label_timage) self.__btn_Random = QPushButton("RandomDigit \nFrom TestSet") self.__btn_Random.setParent(self) self.__btn_Random.setFixedSize(146, 70) self.font.setPointSize(13) self.__btn_Random.setFont(self.font) self.__btn_Random.clicked.connect(self.on_btn_RandomDigit_Clicked) sub_layout.addWidget(self.__btn_Random) main_layout.addLayout(sub_layout) def __fillColorList(self, comboBox): index_black = 0 index = 0 for color in self.__colorList: if color == "black": index_black = index index += 1 pix = QPixmap(70, 20) pix.fill(QColor(color)) comboBox.addItem(QIcon(pix), None) comboBox.setIconSize(QSize(70, 20)) comboBox.setSizeAdjustPolicy(QComboBox.AdjustToContents) comboBox.setCurrentIndex(index_black) def on_PenColorChange(self): color_index = self.__comboBox_penColor.currentIndex() color_str = self.__colorList[color_index] self.__paintBoard.ChangePenColor(color_str) def on_PenThicknessChange(self): penThickness = self.__spinBox_penThickness.value() self.__paintBoard.ChangePenThickness(penThickness) def on_btn_Save_Clicked(self): savePath = QFileDialog.getSaveFileName(self, 'Save Your Paint', '.\\', '*.png') print(savePath) if savePath[0] == "": print("Save cancel") return image = self.__paintBoard.GetContentAsQImage() image.save(savePath[0]) def on_cbtn_Eraser_clicked(self): if self.__cbtn_Eraser.isChecked(): self.__paintBoard.EraserMode = True else: self.__paintBoard.EraserMode = False def on_btn_RandomDigit_Clicked(self): f = open('x_test_10000.pkl', 'rb') x_test = pickle.load(f, encoding='bytes') f.close() ff = open('y_test_10000.pkl', 'rb') y_test = pickle.load(ff, encoding='bytes') ff.close() random_id = random.randint(0, 9999) image = Image.fromarray(np.reshape(x_test[random_id], (28, 28)) * 255).convert('L') new_image = image.resize((44, 44)) # new_image.show() new_image.save('tpic.png') pixmap = QPixmap('tpic.png') self.__label_timage.setPixmap(pixmap) res = self.judge(np.reshape(x_test[random_id], (28, 28))) myres = "{0}|{1}".format(res, int(y_test[random_id])) # show my result font = QtGui.QFont() font.setFamily('Consolas') font.setBold(True) font.setPointSize(18) font.setWeight(75) self.__label_result.setFont(font) self.__label_result.setText(myres) def sigmoid(self, x): return 1.0 / (1.0 + np.exp(-x)) def judge(self, input_v): fd = hog(input_v, orientations=5, pixels_per_cell=(4, 4), cells_per_block=(3, 3), block_norm='L1-sqrt', transform_sqrt=True, feature_vector=True, visualise=False ) length = len(fd) y_hat = np.dot(self.w_out, self.sigmoid(np.dot(self.w_in, np.reshape(fd, (length, 1))) + self.biase.transpose())) res_id = np.argmax(y_hat) y_hat[y_hat < 0] = 0 prapability = y_hat[res_id] / np.sum(y_hat) myres = "{0}({1}%)".format(res_id, int(prapability * 100)) return myres def on_btn_Recognize_clicked(self): savePath = "tmp.png" image = self.__paintBoard.GetContentAsQImage() image.save(savePath) t_image = Image.open(savePath).convert('L') newt_image = t_image.resize((28, 28)) # newt_image.save("tmp1.png") np_image = np.array(newt_image) / 255.0 # print (np_image.shape) # print (np_image) myres = self.judge(np_image) # show my result font = QtGui.QFont() font.setFamily('Consolas') font.setBold(True) font.setPointSize(20) font.setWeight(75) self.__label_result.setFont(font) self.__label_result.setText(myres) # print (myres) def Quit(self): self.close()
def __InitData(self): self.__paintBoard = PaintBoard(self) self.__colorList = QColor.colorNames()
class MainWidget(QWidget): def __init__(self, Parent=None): ''' Constructor ''' super().__init__(Parent) self.__InitData() #先初始化数据,再初始化界面 self.__InitView() def __InitData(self): ''' 初始化成员变量 ''' self.__paintBoard = PaintBoard(self) #获取颜色列表(字符串类型) self.__colorList = QColor.colorNames() def __InitView(self): ''' 初始化界面 ''' #新建一个水平布局作为本窗体的主布局 main_layout = QHBoxLayout(self) #设置主布局内边距以及控件间距为10px main_layout.setSpacing(10) #在主界面左侧放置画板 main_layout.addWidget(self.__paintBoard) #新建垂直子布局用于放置按键 sub_layout = QVBoxLayout() #设置此子布局和内部控件的间距为10px sub_layout.setContentsMargins(10, 10, 10, 10) self.__btn_Clear = QPushButton("清空画板") self.__btn_Clear.setParent(self) #设置父对象为本界面 #将按键按下信号与画板清空函数相关联 self.__btn_Clear.clicked.connect(self.__paintBoard.Clear) sub_layout.addWidget(self.__btn_Clear) self.setFixedSize(660,480) self.setWindowTitle("手写数字识别") ''' ''' ''' self.label_name = QLabel('江西理工大学', self) self.label_name.setGeometry(500,200,120,35) self.label_name = QLabel('信息工程学院', self) self.label_name.setGeometry(500,230,100,35) self.label_name = QLabel('电信172', self) self.label_name.setGeometry(500,260,100,35) self.label_name = QLabel('夏奥', self) self.label_name.setGeometry(500,290,100,35) ''' self.label_name=QLabel('识别结果',self) self.label_name.setGeometry(500,200,100,35) self.__btn_Recognize=QPushButton("开始识别") self.__btn_Recognize.setParent(self) self.__btn_Recognize.clicked.connect(self.on_btn_Recognize_Clicked) sub_layout.addWidget(self.__btn_Recognize) self.__btn_Quit = QPushButton("退出") self.__btn_Quit.setParent(self) #设置父对象为本界面 self.__btn_Quit.clicked.connect(self.Quit) sub_layout.addWidget(self.__btn_Quit) self.lcd_num=QLCDNumber(13,self) #self.lcd_num.resize(100,100) self.lcd_num.setDigitCount(1) self.lcd_num.move(500,400) sub_layout.addWidget(self.lcd_num) ''' self.__btn_Save = QPushButton("保存作品") self.__btn_Save.setParent(self) self.__btn_Save.clicked.connect(self.on_btn_Save_Clicked) sub_layout.addWidget(self.__btn_Save) ''' ''' self.__cbtn_Eraser = QCheckBox(" 使用橡皮擦") self.__cbtn_Eraser.setParent(self) self.__cbtn_Eraser.clicked.connect(self.on_cbtn_Eraser_clicked) sub_layout.addWidget(self.__cbtn_Eraser) ''' splitter = QSplitter(self) #占位符 sub_layout.addWidget(splitter) self.__label_penThickness = QLabel(self) self.__label_penThickness.setText("画笔粗细") self.__label_penThickness.setFixedHeight(20) sub_layout.addWidget(self.__label_penThickness) self.__spinBox_penThickness = QSpinBox(self) self.__spinBox_penThickness.setMaximum(60) self.__spinBox_penThickness.setMinimum(2) self.__spinBox_penThickness.setValue(30) #默认粗细为10 self.__spinBox_penThickness.setSingleStep(2) #最小变化值为2 self.__spinBox_penThickness.valueChanged.connect(self.on_PenThicknessChange)#关联spinBox值变化信号和函数on_PenThicknessChange sub_layout.addWidget(self.__spinBox_penThickness) self.__label_penColor = QLabel(self) self.__label_penColor.setText("画笔颜色") self.__label_penColor.setFixedHeight(20) sub_layout.addWidget(self.__label_penColor) self.__comboBox_penColor = QComboBox(self) self.__fillColorList(self.__comboBox_penColor) #用各种颜色填充下拉列表 self.__comboBox_penColor.currentIndexChanged.connect(self.on_PenColorChange) #关联下拉列表的当前索引变更信号与函数on_PenColorChange sub_layout.addWidget(self.__comboBox_penColor) main_layout.addLayout(sub_layout) #将子布局加入主布局 def __fillColorList(self, comboBox): index_black = 0 index = 0 for color in self.__colorList: if color == "black": index_black = index index += 1 pix = QPixmap(70,20) pix.fill(QColor(color)) comboBox.addItem(QIcon(pix),None) comboBox.setIconSize(QSize(70,20)) comboBox.setSizeAdjustPolicy(QComboBox.AdjustToContents) comboBox.setCurrentIndex(index_black) def on_PenColorChange(self): color_index = self.__comboBox_penColor.currentIndex() color_str = self.__colorList[color_index] self.__paintBoard.ChangePenColor(color_str) def on_PenThicknessChange(self): penThickness = self.__spinBox_penThickness.value() self.__paintBoard.ChangePenThickness(penThickness) ''' def on_btn_Save_Clicked(self): savePath = QFileDialog.getSaveFileName(self, 'Save Your Paint', '.\\', '*.png') print(savePath) if savePath[0] == "": print("Save cancel") return image = self.__paintBoard.GetContentAsQImage() image.save(savePath[0]) ''' def on_cbtn_Eraser_clicked(self): if self.__cbtn_Eraser.isChecked(): self.__paintBoard.EraserMode = True #进入橡皮擦模式 else: self.__paintBoard.EraserMode = False #退出橡皮擦模式 def on_btn_Recognize_Clicked(self): savePath = "C:/Users/夜了/.vscode/knn/pic/test.png" image = self.__paintBoard.GetContentAsQImage() #im=image.resize((48,48),Image.ANTIALIAS) image.save(savePath) print(savePath) ans=work() self.lcd_num.display(ans) def Quit(self): self.close()
def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.setFixedSize(1200, 657) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.img_ori = QtWidgets.QLabel(self.centralwidget) self.img_ori.setGeometry(QtCore.QRect(80, 155, 440, 440)) self.img_ori.setText("") self.img_ori.setObjectName("img_ori") self.PaintBoard = PaintBoard(self.centralwidget) self.PaintBoard.setGeometry(QtCore.QRect(80, 155, 440, 440)) self.PaintBoard.setMouseTracking(True) self.PaintBoard.setText("") self.PaintBoard.setObjectName("PaintBoard") self.img_rst = QtWidgets.QLabel(self.centralwidget) self.img_rst.setGeometry(QtCore.QRect(680, 155, 440, 440)) self.img_rst.setText("") self.img_rst.setObjectName("img_rst") self.PaintBoard2 = PaintBoard(self.centralwidget) self.PaintBoard2.setGeometry(QtCore.QRect(680, 155, 440, 440)) self.PaintBoard2.setMouseTracking(True) self.PaintBoard2.setText("") self.PaintBoard2.setObjectName("PaintBoard2") self.line = QtWidgets.QFrame(self.centralwidget) self.line.setGeometry(QtCore.QRect(70, 140, 460, 16)) self.line.setFrameShape(QtWidgets.QFrame.HLine) self.line.setFrameShadow(QtWidgets.QFrame.Sunken) self.line.setObjectName("line") self.line_2 = QtWidgets.QFrame(self.centralwidget) self.line_2.setGeometry(QtCore.QRect(670, 140, 460, 16)) self.line_2.setFrameShape(QtWidgets.QFrame.HLine) self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_2.setObjectName("line_2") self.line_3 = QtWidgets.QFrame(self.centralwidget) self.line_3.setGeometry(QtCore.QRect(70, 600, 460, 16)) self.line_3.setFrameShape(QtWidgets.QFrame.HLine) self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_3.setObjectName("line_3") self.line_4 = QtWidgets.QFrame(self.centralwidget) self.line_4.setGeometry(QtCore.QRect(670, 600, 460, 16)) self.line_4.setFrameShape(QtWidgets.QFrame.HLine) self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_4.setObjectName("line_4") self.line_5 = QtWidgets.QFrame(self.centralwidget) self.line_5.setGeometry(QtCore.QRect(60, 150, 20, 461)) self.line_5.setFrameShape(QtWidgets.QFrame.VLine) self.line_5.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_5.setObjectName("line_5") self.line_6 = QtWidgets.QFrame(self.centralwidget) self.line_6.setGeometry(QtCore.QRect(520, 150, 20, 461)) self.line_6.setFrameShape(QtWidgets.QFrame.VLine) self.line_6.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_6.setObjectName("line_6") self.line_7 = QtWidgets.QFrame(self.centralwidget) self.line_7.setGeometry(QtCore.QRect(660, 150, 20, 461)) self.line_7.setFrameShape(QtWidgets.QFrame.VLine) self.line_7.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_7.setObjectName("line_7") self.line_8 = QtWidgets.QFrame(self.centralwidget) self.line_8.setGeometry(QtCore.QRect(1120, 150, 20, 461)) self.line_8.setFrameShape(QtWidgets.QFrame.VLine) self.line_8.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_8.setObjectName("line_8") self.pushButton_undo = QtWidgets.QPushButton(self.centralwidget) self.pushButton_undo.setEnabled(False) self.pushButton_undo.setGeometry(QtCore.QRect(70, 610, 230, 30)) self.pushButton_undo.setObjectName("pushButton_undo") self.pushButton_empty = QtWidgets.QPushButton(self.centralwidget) self.pushButton_empty.setGeometry(QtCore.QRect(300, 610, 230, 30)) self.pushButton_empty.setObjectName("pushButton_empty") self.pushButton_save2 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_save2.setEnabled(False) self.pushButton_save2.setGeometry(QtCore.QRect(670, 610, 230, 30)) self.pushButton_save2.setObjectName("pushButton_save2") self.pushButton_mask = QtWidgets.QPushButton(self.centralwidget) self.pushButton_mask.setGeometry(QtCore.QRect(900, 610, 230, 30)) self.pushButton_mask.setObjectName("pushButton_mask") self.go = QtWidgets.QPushButton(self.centralwidget) self.go.setEnabled(False) self.go.setGeometry(QtCore.QRect(545, 310, 111, 111)) self.go.setText("") icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap("icon/process.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.go.setIcon(icon) self.go.setIconSize(QtCore.QSize(111, 111)) self.go.setObjectName("go") self.pushButton_load = QtWidgets.QPushButton(self.centralwidget) self.pushButton_load.setGeometry(QtCore.QRect(0, 0, 111, 111)) self.pushButton_load.setText("") icon1 = QtGui.QIcon() icon1.addPixmap(QtGui.QPixmap("icon/load.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_load.setIcon(icon1) self.pushButton_load.setIconSize(QtCore.QSize(80, 80)) self.pushButton_load.setObjectName("pushButton_load") self.pushButton_save = QtWidgets.QPushButton(self.centralwidget) self.pushButton_save.setEnabled(False) self.pushButton_save.setGeometry(QtCore.QRect(110, 0, 111, 111)) self.pushButton_save.setText("") icon2 = QtGui.QIcon() icon2.addPixmap(QtGui.QPixmap("icon/save.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_save.setIcon(icon2) self.pushButton_save.setIconSize(QtCore.QSize(80, 80)) self.pushButton_save.setObjectName("pushButton_save") self.pushButton_pen = QtWidgets.QPushButton(self.centralwidget) self.pushButton_pen.setGeometry(QtCore.QRect(370, 0, 111, 111)) self.pushButton_pen.setText("") icon3 = QtGui.QIcon() icon3.addPixmap(QtGui.QPixmap("icon/pen.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_pen.setIcon(icon3) self.pushButton_pen.setIconSize(QtCore.QSize(80, 80)) self.pushButton_pen.setCheckable(True) self.pushButton_pen.setChecked(True) self.pushButton_pen.setObjectName("pushButton_pen") self.label_7 = QtWidgets.QLabel(self.centralwidget) self.label_7.setGeometry(QtCore.QRect(480, 0, 71, 51)) font = QtGui.QFont() font.setPointSize(12) self.label_7.setFont(font) self.label_7.setAlignment(QtCore.Qt.AlignCenter) self.label_7.setObjectName("label_7") self.label_8 = QtWidgets.QLabel(self.centralwidget) self.label_8.setGeometry(QtCore.QRect(480, 60, 71, 51)) font = QtGui.QFont() font.setPointSize(12) self.label_8.setFont(font) self.label_8.setAlignment(QtCore.Qt.AlignCenter) self.label_8.setObjectName("label_8") self.Slider = QtWidgets.QSlider(self.centralwidget) self.Slider.setGeometry(QtCore.QRect(560, 75, 121, 22)) self.Slider.setMinimum(1) self.Slider.setMaximum(50) self.Slider.setSingleStep(1) self.Slider.setPageStep(1) self.Slider.setSliderPosition(10) self.Slider.setOrientation(QtCore.Qt.Horizontal) self.Slider.setObjectName("Slider") self.line_9 = QtWidgets.QFrame(self.centralwidget) self.line_9.setGeometry(QtCore.QRect(480, 45, 241, 20)) self.line_9.setFrameShape(QtWidgets.QFrame.HLine) self.line_9.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_9.setObjectName("line_9") self.line_11 = QtWidgets.QFrame(self.centralwidget) self.line_11.setGeometry(QtCore.QRect(480, 100, 241, 20)) self.line_11.setFrameShape(QtWidgets.QFrame.HLine) self.line_11.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_11.setObjectName("line_11") self.pushButton_rect = QtWidgets.QPushButton(self.centralwidget) self.pushButton_rect.setGeometry(QtCore.QRect(740, 0, 101, 111)) self.pushButton_rect.setText("") icon4 = QtGui.QIcon() icon4.addPixmap(QtGui.QPixmap("icon/rect.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_rect.setIcon(icon4) self.pushButton_rect.setIconSize(QtCore.QSize(80, 80)) self.pushButton_rect.setCheckable(True) self.pushButton_rect.setObjectName("pushButton_rect") self.pushButton_circle = QtWidgets.QPushButton(self.centralwidget) self.pushButton_circle.setGeometry(QtCore.QRect(840, 0, 101, 111)) self.pushButton_circle.setText("") icon5 = QtGui.QIcon() icon5.addPixmap(QtGui.QPixmap("icon/oval.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_circle.setIcon(icon5) self.pushButton_circle.setIconSize(QtCore.QSize(80, 80)) self.pushButton_circle.setCheckable(True) self.pushButton_circle.setObjectName("pushButton_circle") self.pushButton_dots = QtWidgets.QPushButton(self.centralwidget) self.pushButton_dots.setGeometry(QtCore.QRect(940, 0, 101, 111)) self.pushButton_dots.setText("") icon6 = QtGui.QIcon() icon6.addPixmap(QtGui.QPixmap("icon/dots.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_dots.setIcon(icon6) self.pushButton_dots.setIconSize(QtCore.QSize(80, 80)) self.pushButton_dots.setCheckable(True) self.pushButton_dots.setObjectName("pushButton_dots") self.pushButton_mode = QtWidgets.QPushButton(self.centralwidget) self.pushButton_mode.setGeometry(QtCore.QRect(240, 0, 111, 111)) self.pushButton_mode.setText("") icon7 = QtGui.QIcon() icon7.addPixmap(QtGui.QPixmap("icon/eraser.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_mode.setIcon(icon7) self.pushButton_mode.setIconSize(QtCore.QSize(80, 80)) self.pushButton_mode.setCheckable(True) self.pushButton_mode.setChecked(False) self.pushButton_mode.setObjectName("pushButton_mode") self.label_9 = QtWidgets.QLabel(self.centralwidget) self.label_9.setGeometry(QtCore.QRect(0, 110, 221, 31)) font = QtGui.QFont() font.setFamily("等线") font.setPointSize(15) self.label_9.setFont(font) self.label_9.setAlignment(QtCore.Qt.AlignCenter) self.label_9.setObjectName("label_9") self.label_10 = QtWidgets.QLabel(self.centralwidget) self.label_10.setGeometry(QtCore.QRect(240, 110, 111, 31)) font = QtGui.QFont() font.setFamily("等线") font.setPointSize(15) self.label_10.setFont(font) self.label_10.setAlignment(QtCore.Qt.AlignCenter) self.label_10.setObjectName("label_10") self.label_11 = QtWidgets.QLabel(self.centralwidget) self.label_11.setGeometry(QtCore.QRect(370, 110, 361, 31)) font = QtGui.QFont() font.setFamily("等线") font.setPointSize(15) self.label_11.setFont(font) self.label_11.setAlignment(QtCore.Qt.AlignCenter) self.label_11.setObjectName("label_11") self.label_12 = QtWidgets.QLabel(self.centralwidget) self.label_12.setGeometry(QtCore.QRect(740, 110, 401, 31)) font = QtGui.QFont() font.setFamily("等线") font.setPointSize(15) self.label_12.setFont(font) self.label_12.setAlignment(QtCore.Qt.AlignCenter) self.label_12.setObjectName("label_12") self.pushButton_black = QtWidgets.QPushButton(self.centralwidget) self.pushButton_black.setGeometry(QtCore.QRect(550, 0, 81, 51)) self.pushButton_black.setText("") icon8 = QtGui.QIcon() icon8.addPixmap(QtGui.QPixmap("icon/black.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_black.setIcon(icon8) self.pushButton_black.setIconSize(QtCore.QSize(81, 51)) self.pushButton_black.setObjectName("pushButton_black") self.pushButton_white = QtWidgets.QPushButton(self.centralwidget) self.pushButton_white.setGeometry(QtCore.QRect(630, 0, 91, 51)) self.pushButton_white.setText("") icon9 = QtGui.QIcon() icon9.addPixmap(QtGui.QPixmap("icon/white.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_white.setIcon(icon9) self.pushButton_white.setIconSize(QtCore.QSize(81, 51)) self.pushButton_white.setObjectName("pushButton_white") self.line_12 = QtWidgets.QFrame(self.centralwidget) self.line_12.setGeometry(QtCore.QRect(220, 0, 20, 141)) self.line_12.setFrameShape(QtWidgets.QFrame.VLine) self.line_12.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_12.setObjectName("line_12") self.line_13 = QtWidgets.QFrame(self.centralwidget) self.line_13.setGeometry(QtCore.QRect(350, 0, 20, 141)) self.line_13.setFrameShape(QtWidgets.QFrame.VLine) self.line_13.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_13.setObjectName("line_13") self.line_14 = QtWidgets.QFrame(self.centralwidget) self.line_14.setGeometry(QtCore.QRect(720, 0, 20, 141)) self.line_14.setFrameShape(QtWidgets.QFrame.VLine) self.line_14.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_14.setObjectName("line_14") self.line_15 = QtWidgets.QFrame(self.centralwidget) self.line_15.setGeometry(QtCore.QRect(0, 136, 1201, 16)) self.line_15.setFrameShape(QtWidgets.QFrame.HLine) self.line_15.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_15.setObjectName("line_15") self.line_16 = QtWidgets.QFrame(self.centralwidget) self.line_16.setGeometry(QtCore.QRect(710, 0, 20, 111)) self.line_16.setFrameShape(QtWidgets.QFrame.VLine) self.line_16.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_16.setObjectName("line_16") self.pushButton_seg = QtWidgets.QPushButton(self.centralwidget) self.pushButton_seg.setEnabled(False) self.pushButton_seg.setGeometry(QtCore.QRect(1040, 0, 101, 111)) self.pushButton_seg.setText("") icon10 = QtGui.QIcon() icon10.addPixmap(QtGui.QPixmap("icon/seg.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_seg.setIcon(icon10) self.pushButton_seg.setIconSize(QtCore.QSize(80, 80)) self.pushButton_seg.setObjectName("pushButton_seg") self.label_width = QtWidgets.QLabel(self.centralwidget) self.label_width.setGeometry(QtCore.QRect(680, 60, 41, 51)) self.label_width.setAlignment(QtCore.Qt.AlignCenter) self.label_width.setObjectName("label_width") self.pushButton_geo_black = QtWidgets.QPushButton(self.centralwidget) self.pushButton_geo_black.setGeometry(QtCore.QRect(1140, 0, 61, 55)) self.pushButton_geo_black.setText("") icon11 = QtGui.QIcon() icon11.addPixmap(QtGui.QPixmap("icon/black2.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_geo_black.setIcon(icon11) self.pushButton_geo_black.setIconSize(QtCore.QSize(61, 55)) self.pushButton_geo_black.setObjectName("pushButton_geo_black") self.pushButton_geo_white = QtWidgets.QPushButton(self.centralwidget) self.pushButton_geo_white.setGeometry(QtCore.QRect(1140, 55, 61, 55)) self.pushButton_geo_white.setText("") icon12 = QtGui.QIcon() icon12.addPixmap(QtGui.QPixmap("icon/white2.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_geo_white.setIcon(icon12) self.pushButton_geo_white.setIconSize(QtCore.QSize(61, 55)) self.pushButton_geo_white.setObjectName("pushButton_geo_white") self.label_13 = QtWidgets.QLabel(self.centralwidget) self.label_13.setGeometry(QtCore.QRect(1140, 110, 61, 31)) font = QtGui.QFont() font.setFamily("等线") font.setPointSize(12) self.label_13.setFont(font) self.label_13.setAlignment(QtCore.Qt.AlignCenter) self.label_13.setObjectName("label_13") self.Thanos = QtWidgets.QPushButton(self.centralwidget) self.Thanos.setEnabled(False) self.Thanos.setGeometry(QtCore.QRect(545, 440, 111, 111)) self.Thanos.setText("") icon13 = QtGui.QIcon() icon13.addPixmap(QtGui.QPixmap("icon/snap.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.Thanos.setIcon(icon13) self.Thanos.setIconSize(QtCore.QSize(110, 110)) self.Thanos.setCheckable(False) self.Thanos.setChecked(False) self.Thanos.setObjectName("Thanos") self.comboBox = QtWidgets.QComboBox(self.centralwidget) self.comboBox.setEnabled(False) self.comboBox.setGeometry(QtCore.QRect(546, 595, 110, 21)) font = QtGui.QFont() font.setPointSize(10) self.comboBox.setFont(font) self.comboBox.setMaxVisibleItems(6) self.comboBox.setObjectName("comboBox") self.pushButton_add_label = QtWidgets.QPushButton(self.centralwidget) self.pushButton_add_label.setEnabled(False) self.pushButton_add_label.setGeometry(QtCore.QRect(546, 620, 55, 21)) self.pushButton_add_label.setObjectName("pushButton_add_label") self.pushButton_clear_label = QtWidgets.QPushButton(self.centralwidget) self.pushButton_clear_label.setEnabled(False) self.pushButton_clear_label.setGeometry(QtCore.QRect(602, 620, 55, 21)) self.pushButton_clear_label.setObjectName("pushButton_clear_label") self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget) self.textBrowser.setGeometry(QtCore.QRect(546, 553, 110, 40)) font = QtGui.QFont() font.setPointSize(10) self.textBrowser.setFont(font) self.textBrowser.setObjectName("textBrowser") MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow)