• 8896阅读
  • 1回复

[提问]QTableWidget设置表格中内容的字体 [复制链接]

上一主题 下一主题
离线xsqxsy
 

只看楼主 倒序阅读 楼主  发表于: 2012-09-13
现在遇到这样一个问题:表格中需要显示音标,所以对于表格内容的字体要指定成特殊的字体。
当使用setFont()时,代码如下:
  
   def loadFile(self, fileName):        
         file =  open(fileName,"r")
         content = file.readlines()#形成列表content
         m = len(content)
         n = content[0].count("\t")
         self.table.setRowCount(m);
         self.table.setColumnCount(n+1)
         self.table.horizontalHeader().setMovable(True)        
         self.table.setStyleSheet("gridline-color: rgb(255, 0, 0)")
         self.table.setStyleSheet("QTableWidget::item{border:1px solid red;}")
         self.table.setShowGrid(False)          
         s = -1
         for line in content :#在content中取出原文本中每一行的内容
             s = s + 1
             line_split = line.split("\t")#对原文本中一行的内容用制表符分割            
             k = 0
             for line_part in line_split :#取出line_split列表中的内容
                 newItem = QtGui.QTableWidgetItem(line_part)
                 textFont = QFont("Lucida Sans Unicode", 1, QFont.Bold)                
                 newItem.setFont(textFont)                  
                 self.table.setItem(s, k, newItem)                
                 k = k + 1
    
显示错误为:
  
textFont = QFont("Lucida Sans Unicode", 1, QFont.Bold)                
NameError: global name 'QFont' is not defined
  
  
  
  
全部代码如下:
  
#!/usr/bin/env python
#coding=utf-8
import sip
sip.setapi('QVariant', 2)
  
from PyQt4 import QtCore, QtGui
  
import application_rc
  
  
class MainWindow(QtGui.QMainWindow):
     def __init__(self):
         super(MainWindow, self).__init__()
  
         self.showMaximized()
         self.table = QtGui.QTableWidget()
         self.setCentralWidget(self.table)
          
         self.new_dirty()
         self.table.cellChanged.connect(self.makeDirty)
      
         self.createActions()
         self.createMenus()
         self.createToolBars()
         self.createStatusBar()
  
      
     def new_dirty(self):  
         self.dirty = False #创建新表格时,文档重新设置为未修改  
  
     def makeDirty(self):  
         self.dirty = True    
        
      
  
     def open(self):
         if self.maybeSave():#maybeSave()用来判断当前已修改的文件是否进行了保存
             fileName = QtGui.QFileDialog.getOpenFileName(self)
             if fileName:
                 self.loadFile(fileName)
     #函数作用:点击打开选项实现的方法(槽)
     #点击打开文本,先判断当前已经打开的文本是否保存
     #如果保存了,就跳出文件对话框,输入要打开的文件名,并把该文件名赋值给fileName,fileName不为空,打开该文件
  
  
  
     def saveAs(self):
         fileName = QtGui.QFileDialog.getSaveFileName(self)
         if fileName:
             return self.saveFile(fileName)  
         return False
     #函数作用:点击另存为选项实现的方法
     #点击另存为跳出文件对话框,输入另存为名字并把改名字赋值给fileName
     #如果没输入另存为名字而是选择了取消,返回false
     #如果输入,用这个名字保存文本
  
      
  
     def createActions(self):
          
         self.openAct = QtGui.QAction(QtGui.QIcon(':/images/open.png'),
                 "打开(&O)...", self, shortcut=QtGui.QKeySequence.Open,
                 statusTip="打开一个现存的文档", triggered=self.open)
  
          
         self.saveAsAct = QtGui.QAction(QtGui.QIcon(':/images/save.png'),"另存为(&A)...", self,
                 shortcut=QtGui.QKeySequence.SaveAs,
                 statusTip="用新名称保存该活动文档",
                 triggered=self.saveAs)
  
         self.exitAct = QtGui.QAction("退出(&X)", self, shortcut="Ctrl+Q",
                 statusTip="退出程序,提示保存文档", triggered=self.close)
  
        
     def createMenus(self):
         self.fileMenu = self.menuBar().addMenu("文件(&F)")
         self.fileMenu.addAction(self.openAct)        
         self.fileMenu.addAction(self.saveAsAct)
         self.fileMenu.addSeparator();
         self.fileMenu.addAction(self.exitAct)
  
        
  
     def createToolBars(self):
         self.fileToolBar = self.addToolBar("File")        
         self.fileToolBar.addAction(self.openAct)
         self.fileToolBar.addAction(self.saveAsAct)
  
        
  
     def createStatusBar(self):
         self.statusBar().showMessage("Ready")
  
    
      
     def maybeSave(self):#函数作用:判断文件是否保存了
         if self.dirty:#调用 Add、Clear、Insert 或 Remove 方法后,IsModified 属性为 true。 此外,使用 Item 属性修改字符串集合的元素后,IsModified 属性也为 true。
             #是判断内容是否被修改,如果被修改就跳出一个警告对话框,问是否保存、忽略、取消。
             ret = QtGui.QMessageBox.warning(self, "supermemo伴侣 (鱼版)",
                     "文本内容已经被修改\n你想保存被修改的内容吗?",
                     QtGui.QMessageBox.Save | QtGui.QMessageBox.Discard |
                     QtGui.QMessageBox.Cancel)
             if ret == QtGui.QMessageBox.Save:
                 return self.save()#如果选择保存,执行保存方法;
             elif ret == QtGui.QMessageBox.Cancel:
                 return False#如果选择取消,返回false
         return True#如果没被修改,返回true
      #判断文件是否保存函数maybeSave()的返回值如下:
      #1、如果文件保存过了,也就是没被修改,则返回True
      #2、如果文件被修改过了,并且在弹出的警告对话框中选择了取消,则返回False
      #3、如果文件被修改过了,并且在弹出的警告对话框中选择了保存,则不返回任何值,直接执行保存函数self.save()
  
    
  
     def saveFile(self, fileName):
         f = open(fileName,"a",encoding="utf-8")
         self.table.rowCount()
         file = QtCore.QFile(fileName)
         if not file.open(QtCore.QFile.WriteOnly | QtCore.QFile.Text):
             QtGui.QMessageBox.warning(self, "Application",
                     "Cannot write file %s:\n%s." % (fileName, file.errorString()))
             return False
  
         outf = QtCore.QTextStream(file)
         QtGui.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
         outf << self.textEdit.toPlainText()
         QtGui.QApplication.restoreOverrideCursor()
  
         self.setCurrentFile(fileName);
         self.statusBar().showMessage("File saved", 2000)
         return True
    
  
     def loadFile(self, fileName):        
         file =  open(fileName,"r")
         content = file.readlines()#形成列表content
         m = len(content)
         n = content[0].count("\t")
         self.table.setRowCount(m);
         self.table.setColumnCount(n+1)
         self.table.horizontalHeader().setMovable(True)        
         self.table.setStyleSheet("gridline-color: rgb(255, 0, 0)")
         self.table.setStyleSheet("QTableWidget::item{border:1px solid red;}")
         self.table.setShowGrid(False)          
         s = -1
         for line in content :#在content中取出原文本中每一行的内容
             s = s + 1
             line_split = line.split("\t")#对原文本中一行的内容用制表符分割            
             k = 0
             for line_part in line_split :#取出line_split列表中的内容
                 newItem = QtGui.QTableWidgetItem(line_part)
                 textFont = QFont("Lucida Sans Unicode", 1, QFont.Bold)                
                 newItem.setFont(textFont)                  
                 self.table.setItem(s, k, newItem)                
                 k = k + 1
                  
    
          
          
  
  
          
      
      
  
if __name__ == '__main__':
  
     import sys
  
     app = QtGui.QApplication(sys.argv)
     #QFontDatabase.addApplicationFont("./Lucida Sans Unicode")
     mainWin = MainWindow()
     mainWin.show()
     sys.exit(app.exec_())
  
离线XChinux

只看该作者 1楼 发表于: 2012-09-14
楼主啊,您的代码好长?你的问题在哪里?

QFont undefined,那就是说你没有包含QFont的头文件吧?
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个