def _create_fontcombobox(self, name): """Return a combobox for modifying a multiple-getValue setting.""" setting = self.settingItems[name] # Create the combobox and populate it combo = QFontComboBox() combo.setMinimumWidth(100) combo.setMaximumWidth(150) combo.setFontFilters(QFontComboBox.AllFonts) # 设置过滤器 # Ugly event handler! def combo_changed(index): self._changedSettings[name] = combo.currentFont().family() combo.currentFontChanged.connect(combo_changed) # Set the initial getValue, if any def combo_update(value): combo.setCurrentFont(QFont(value)) self._updateActions[name] = combo_update # combo_update(self.currentSettings.get(name, list(SettingEnums.enums[valuetype].values())[0])) return combo
class QmyMainWindow(QMainWindow): def __init__(self,parent=None): super().__init__(parent)#调用父类构造函数,创建窗体 self.ui = Ui_MainWindow()#创建Ui对象 self.ui.setupUi(self)#构造UI self.__buildUI() self.__spinFontSize.valueChanged[int].connect(self.do_fontSize_Changed) self.__comboFontName.currentIndexChanged[str].connect(self.do_fontName_Changed) self.setCentralWidget(self.ui.textEdit) ##==========自定义功能函数========== def __buildUI(self): self.__LabFile = QLabel(self)#QLabel组件显示信息 self.__LabFile.setMinimumWidth(150) self.__LabFile.setText('文件名: ') self.ui.statusBar.addWidget(self.__LabFile)#添加到状态栏 self.__progressBar1 = QProgressBar(self)#实例进度条 self.__progressBar1.setMaximumWidth(200)#设定最大宽度 self.__progressBar1.setMinimum(5)#设置最小值 self.__progressBar1.setMaximum(50)#设置最大值 sz = self.ui.textEdit.font().pointSize() print(sz) self.__progressBar1.setValue(sz) self.ui.statusBar.addWidget(self.__progressBar1) self.__LabInfo = QLabel(self) self.__LabInfo.setText('选择字体名称: ') self.ui.statusBar.addPermanentWidget(self.__LabInfo) actionGroup = QActionGroup(self)#定义一个组 actionGroup.addAction(self.ui.actLang_CN)#添加两个组件到一个组内 actionGroup.addAction(self.ui.actLang_EN) actionGroup.setExclusive(True)#令组内组件互斥 self.ui.actLang_CN.setChecked(True)#设定中文按钮为默认 self.__spinFontSize = QSpinBox(self)#设定QSpinBox组件控制字体大小 self.__spinFontSize.setMaximum(50)#最大字体50 self.__spinFontSize.setMinimum(5)#最小字体5 sz = self.ui.textEdit.font().pointSize() self.__spinFontSize.setValue(sz) self.__spinFontSize.setMinimumWidth(50) self.ui.mainToolBar.addWidget(self.__spinFontSize) self.__comboFontName = QFontComboBox(self) self.__comboFontName.setMinimumWidth(100) self.ui.mainToolBar.addWidget(self.__comboFontName) self.ui.mainToolBar.addSeparator() self.ui.mainToolBar.addAction(self.ui.actClose) ##==========事件处理函数=========== ##==========由connectSlotsByName()自动关联的槽函数==== @pyqtSlot(bool) def on_actFont_Bold_triggered(self,checked): fmt = self.ui.textEdit.currentCharFormat() print(fmt.fontWeight()) # print(fmt,dir(fmt)) # print(checked) if (checked==True): # print(QFont.setItalic()) fmt.setFontWeight(QFont.Bold) print(fmt.fontWeight()) else: fmt.setFontWeight(QFont.Normal) print(fmt.fontWeight()) self.ui.textEdit.mergeCurrentCharFormat(fmt) # fmt.setFontBold(checked) # self.ui.textEdit.currentCharFormat(fmt) @pyqtSlot(bool) def on_actFont_Italic_triggered(self,checked): fmt = self.ui.textEdit.currentCharFormat() fmt.setFontItalic(checked) self.ui.textEdit.mergeCurrentCharFormat(fmt) @pyqtSlot(bool) def on_actFont_UnderLine_triggered(self,checked): fmt = self.ui.textEdit.currentCharFormat() fmt.setFontUnderline(checked) self.ui.textEdit.mergeCurrentCharFormat(fmt) def on_textEdit_copyAvailable(self,avi): self.ui.actEdit_Cut.setEnabled(avi) self.ui.actEdit_Copy.setEnabled(avi) self.ui.actEdit_Paste.setEnabled(self.ui.textEdit.canPaste()) def on_textEdit_selectionChanged(self): fmt = self.ui.textEdit.currentCharFormat() self.ui.actFont_Bold.setEnabled(fmt.font().bold()) self.ui.actFont_Italic.setEnabled(fmt.fontItalic()) self.ui.actFont_UnderLine.setEnabled(fmt.fontUnderline()) def on_textEdit_custonContextMenuRequested(self,pos): popMenu = self.ui.textEdit.createStandardContextMenu() popMenu.exec(pos) ##=========自定义槽函数============ @pyqtSlot(int) def do_fontSize_Changed(self,fontSize): fmt = self.ui.textEdit.currentCharFormat() fmt.setFontPointSize(fontSize) self.ui.textEdit.mergeCurrentCharFormat(fmt) self.__progressBar1.setValue(fontSize) @pyqtSlot(str) def do_fontName_Changed(self,fontName): fmt = self.ui.textEdit.currentCharFormat() fmt.setFontFamily(fontName) self.ui.textEdit.mergeCurrentCharFormat(fmt) self.__LabInfo.setText("字体名称: {}".format(fontName))
class QmyMainWindow(QMainWindow): def __init__(self, parent=None): super().__init__(parent) #调用父类构造函数,创建窗体 self.ui = Ui_MainWindow() #创建UI对象 self.ui.setupUi(self) #构造UI界面 self.__buildUI() #动态创建组件,添加到工具栏和状态栏 self.__spinFontSize.valueChanged[int].connect( self.do_fontSize_Changed) #字体大小设置 self.__comboFontName.currentIndexChanged[str].connect( self.do_fontName_Changed) #字体选择 self.setCentralWidget(self.ui.textEdit) ## ============自定义功能函数================================ def __buildUI(self): ##窗体上动态添加组件 # 创建状态栏上的组件 self.__LabFile = QLabel(self) # QLabel组件显示信息 self.__LabFile.setMinimumWidth(150) self.__LabFile.setText("文件名: ") self.ui.statusBar.addWidget(self.__LabFile) self.__progressBar1 = QProgressBar(self) # progressBar1 self.__progressBar1.setMaximumWidth(200) self.__progressBar1.setMinimum(5) self.__progressBar1.setMaximum(50) sz = self.ui.textEdit.font().pointSize() #字体大小 self.__progressBar1.setValue(sz) self.ui.statusBar.addWidget(self.__progressBar1) self.__LabInfo = QLabel(self) # QLabel组件显示字体名称 self.__LabInfo.setText("选择字体名称: ") self.ui.statusBar.addPermanentWidget(self.__LabInfo) #为actLang_CN和actLang_EN创建QActionGroup,互斥型选择 actionGroup = QActionGroup(self) actionGroup.addAction(self.ui.actLang_CN) actionGroup.addAction(self.ui.actLang_EN) actionGroup.setExclusive(True) #互斥型分组 self.ui.actLang_CN.setChecked(True) #创建工具栏上的组件 self.__spinFontSize = QSpinBox(self) #字体大小spinbox self.__spinFontSize.setMinimum(5) self.__spinFontSize.setMaximum(50) sz = self.ui.textEdit.font().pointSize() self.__spinFontSize.setValue(sz) self.__spinFontSize.setMinimumWidth(50) self.ui.mainToolBar.addWidget(self.__spinFontSize) #SpinBox添加到工具栏 self.__comboFontName = QFontComboBox(self) #字体 combobox self.__comboFontName.setMinimumWidth(100) self.ui.mainToolBar.addWidget(self.__comboFontName) self.ui.mainToolBar.addSeparator() #添加一个分隔条 self.ui.mainToolBar.addAction(self.ui.actClose) #添加 actClose作为“关闭”按钮 ## ===========由connectSlotsByName() 自动连接的槽函数===================== @pyqtSlot(bool) ##设置粗体 def on_actFont_Bold_triggered(self, checked): fmt = self.ui.textEdit.currentCharFormat() if (checked == True): fmt.setFontWeight(QFont.Bold) else: fmt.setFontWeight(QFont.Normal) self.ui.textEdit.mergeCurrentCharFormat(fmt) @pyqtSlot(bool) ##设置斜体 def on_actFont_Italic_triggered(self, checked): fmt = self.ui.textEdit.currentCharFormat() fmt.setFontItalic(checked) self.ui.textEdit.mergeCurrentCharFormat(fmt) @pyqtSlot(bool) ##设置下划线 def on_actFont_UnderLine_triggered(self, checked): fmt = self.ui.textEdit.currentCharFormat() fmt.setFontUnderline(checked) self.ui.textEdit.mergeCurrentCharFormat(fmt) def on_textEdit_copyAvailable(self, avi): ##文本框内容可copy self.ui.actEdit_Cut.setEnabled(avi) self.ui.actEdit_Copy.setEnabled(avi) self.ui.actEdit_Paste.setEnabled(self.ui.textEdit.canPaste()) def on_textEdit_selectionChanged(self): ##文本选择内容发生变化 fmt = self.ui.textEdit.currentCharFormat() self.ui.actFont_Bold.setChecked(fmt.font().bold()) self.ui.actFont_Italic.setChecked(fmt.fontItalic()) self.ui.actFont_UnderLine.setChecked(fmt.fontUnderline()) def on_textEdit_customContextMenuRequested(self, pos): ##标准右键菜单 popMenu = self.ui.textEdit.createStandardContextMenu() popMenu.exec(pos) #显示快捷菜单 @pyqtSlot(bool) ##设置工具栏按钮样式 def on_actSys_ToggleText_triggered(self, checked): if (checked): st = Qt.ToolButtonTextUnderIcon else: st = Qt.ToolButtonIconOnly self.ui.mainToolBar.setToolButtonStyle(st) def on_actFile_New_triggered(self): ##新建文件,不实现具体功能 self.__LabFile.setText(" 新建文件 ") def on_actFile_Open_triggered(self): ##打开文件,不实现具体功能 self.__LabFile.setText(" 打开的文件 ") def on_actFile_Save_triggered(self): ##保存文件,不实现具体功能 self.__LabFile.setText(" 文件已保存 ") ## =============自定义槽函数=============================== @pyqtSlot(int) ##设置字体大小,关联 __spinFontSize def do_fontSize_Changed(self, fontSize): fmt = self.ui.textEdit.currentCharFormat() fmt.setFontPointSize(fontSize) self.ui.textEdit.mergeCurrentCharFormat(fmt) self.__progressBar1.setValue(fontSize) #注意它属于self, 而不是self.ui @pyqtSlot(str) ## 选择字体名称,关联__comboFontName def do_fontName_Changed(self, fontName): fmt = self.ui.textEdit.currentCharFormat() fmt.setFontFamily(fontName) self.ui.textEdit.mergeCurrentCharFormat(fmt) self.__LabInfo.setText("字体名称:%s " % fontName)
class QmyMainWindow(QMainWindow): def __init__(self, parent=None, flags=Qt.WindowFlags()): super().__init__(parent=parent, flags=flags) self._ui = Ui_MainWindow() self._ui.setupUi(self) self._buildUi() # 动态创建组件,添加到工具栏和状态栏 self._spinFontSize.valueChanged[int].connect( self.my_fontSize_Changed) # 字体大小设置 self._comboFontName.currentIndexChanged[str].connect( self.my_fontName_Changed) #字体选择 self.setCentralWidget(self._ui.plainTextEdit) # 将文本框防止中央 def _buildUi(self): # QLable显示信息 self._LabFile = QLabel(self) self._LabFile.setMinimumWidth(150) self._LabFile.setText('文件名:') self._ui.statusBar.addWidget(self._LabFile) # 添加到状态栏 # progressBar显示 self._progressBar1 = QProgressBar(self) self._progressBar1.setMaximumWidth(200) self._progressBar1.setMinimum(5) self._progressBar1.setMaximum(50) sz = self._ui.plainTextEdit.font().pointSize() self._progressBar1.setValue(sz) # 将字体大小显示在progressBar self._ui.statusBar.addWidget(self._progressBar1) # 添加到状态栏 self._LabInfo = QLabel(self) self._LabInfo.setText('选择字体名称:{黑体}') self._ui.statusBar.addPermanentWidget(self._LabInfo) actionGroup = QActionGroup(self) actionGroup.addAction(self._ui.action_English) actionGroup.addAction(self._ui.action_Chinese) actionGroup.setExclusive(True) self._ui.action_Chinese.setChecked(True) self._spinFontSize = QSpinBox(self) self._spinFontSize.setMinimum(5) self._spinFontSize.setMaximum(50) sz = self._ui.plainTextEdit.font().pointSize() self._spinFontSize.setValue(sz) self._spinFontSize.setMinimumWidth(50) self._ui.toolBar.addWidget(self._spinFontSize) self._comboFontName = QFontComboBox(self) self._comboFontName.setMinimumWidth(100) self._ui.toolBar.addWidget(self._comboFontName) self._ui.toolBar.addSeparator() self._ui.toolBar.addAction(self._ui.action_Close) @pyqtSlot(int) def my_fontSize_Changed(self, fontsize): fmt = self._ui.plainTextEdit.currentCharFormat() fmt.setFontPointSize(fontsize) self._ui.plainTextEdit.mergeCurrentCharFormat(fmt) self._progressBar1.setValue(fontsize) @pyqtSlot(str) def my_fontName_Changed(self, fontName): fmt = self._ui.plainTextEdit.currentCharFormat() fmt.setFontFamily(fontName) self._ui.plainTextEdit.mergeCurrentCharFormat(fmt) self._LabInfo.setText(f'字体名称:{fontName}') @pyqtSlot(bool) def on_action_Bold_triggered(self, checked): fmt = self._ui.plainTextEdit.currentCharFormat() if checked: fmt.setFontWeight(QFont.Bold) else: fmt.setFontWeight(QFont.Normal) self._ui.plainTextEdit.mergeCurrentCharFormat(fmt) @pyqtSlot(bool) def on_action_Italic_triggered(self, checked): fmt = self._ui.plainTextEdit.currentCharFormat() fmt.setFontItalic(checked) self._ui.plainTextEdit.mergeCurrentCharFormat(fmt) @pyqtSlot(bool) def on_action_UnderLine_triggered(self, checked): fmt = self._ui.plainTextEdit.currentCharFormat() fmt.setFontUnderline(checked) self._ui.plainTextEdit.mergeCurrentCharFormat(fmt) def on_plainTextEdit_copyAvailable(self, avi): self._ui.action_Copy.setEnabled(avi) self._ui.action_Cut.setEnabled(avi) self._ui.action_Paste.setEnabled(self._ui.plainTextEdit.canPaste()) def on_plainTextEdit_selectionChanged(self): fmt = self._ui.plainTextEdit.currentCharFormat() self._ui.action_Bold.setChecked(fmt.font().bold()) self._ui.action_Italic.setChecked(fmt.fontItalic()) self._ui.action_UnderLine.setChecked(fmt.fontUnderline()) def on_plainTextEdit_customeContexMenuRequested(self, pos): popMenu = self._ui.plainTextEdit.createStandardContextMenu() popMenu.exec(pos) @pyqtSlot(bool) def on_action_Text_triggered(self, checked): if checked: st = Qt.ToolButtonTextUnderIcon else: st = Qt.ToolButtonIconOnly self._ui.toolBar.setToolButtonStyle(st) def on_action_New_triggered(self): self._LabFile.setText('新建文件') def on_action_Open_triggered(self): self._LabFile.setText('打开文件') def on_action_Save_triggered(self): self._LabFile.setText('文件已保存')