Ejemplo n.º 1
0
class MainClass(QtGui.QMainWindow,Ui_MainWindow,QsciScintilla):
	def __init__(self,parent=None):
		super(MainClass, self).__init__(parent)
		self.setupUi(self)
		self.setAcceptDrops(True)#拖拽
		self.setWindowIcon(QtGui.QIcon('image/Raymond_logo.png'))
		# self.setWindowTitle(u"Raymond")
		self.dataBaseName="RaymondText.db"
		self.newFile(0)
		self.setTextEdit()
		#所有信号与槽都放在这里
		self.signalsAndSlots()

	#----------所有信号与槽都放在这里----------#
	def signalsAndSlots(self):
		self.file_newFile.triggered.connect(self.newFile)
		self.file_openFile.triggered.connect(self.openFile)
		self.file_save.triggered.connect(self.saveFile)
		self.connect(self.tabWidget, QtCore.SIGNAL("tabCloseRequested(int)"),self.closeTab)
		self.connect(self.tabWidget, QtCore.SIGNAL("currentChanged(int)"),self.getTabData,)
		



		# self.connect(self.file_newFile, QtCore.SIGNAL('clicked()'), self.newFile)
	#----------end 所有信号与槽都放在这里----------#
	#拖拽处理函数
	def dragEnterEvent(self, event):
		if event.mimeData().hasUrls():
			event.acceptProposedAction()
			# for url in event.mimeData().urls():
				#url=str(url.toLocalFile()).decode('UTF-8').encode('GBK')
		else:
			super(MainClass, self).dragEnterEvent(event)

	def dragMoveEvent(self, event):
		super(MainClass, self).dragMoveEvent(event)
		
	#拖拽释放处理函数
	def dropEvent(self, event):
		if event.mimeData().hasUrls():
			for url in event.mimeData().urls():
				file=str(url.toLocalFile()).decode('UTF-8')
				self.newFile(file)
		else:
			super(MainClass,self).dropEvent(event)

#==========文件菜单中所有功能==========#
	#----------新建文件----------#
	def newFile(self,file):
		# self.tabWidget.setTabBar(HorizontalTabBar())
		#获取QtabBar id信号槽
		self.NewTab = QtGui.QWidget()
		#显示右键菜单
		self.NewTab.setContextMenuPolicy(3)
		self.NewTab.customContextMenuRequested.connect(self.TabRightMenu)
		self.loxLayout = QtGui.QVBoxLayout(self.NewTab)
		self.loxLayout.setContentsMargins(0, 0, 0, 0)
		self.textEdit = QsciScintilla(self.NewTab)
		self.textEdit.setToolTip(_fromUtf8(""))
		self.textEdit.setWhatsThis(_fromUtf8(""))
		if file:
			self.loxLayout.addWidget(self.textEdit)
			self.tabWidget.addTab(self.NewTab, _fromUtf8(""))
			self.textEdit.setText(open(file,'r').read())
			#获取文件名称
			file_name = os.path.basename(file)
			self.tabWidget.setTabText(self.tabWidget.indexOf(self.NewTab), _translate("MainWindow", file_name, None))
			self.setWindowTitle(file+"  - Raymond Text")
		else:
			self.loxLayout.addWidget(self.textEdit)
			self.tabWidget.addTab(self.NewTab, _fromUtf8(""))
			self.tabWidget.setTabText(self.tabWidget.indexOf(self.NewTab), _translate("MainWindow", "新建文件", None))
			self.setWindowTitle(u"Raymond Text")
		# self.tabWidget.setStatusTip(u'行 113, 列 55')
		self.tabWidget.setCurrentIndex(self.tabWidget.currentIndex()+1)
		self.setTextEdit()
	#----------end 新建文件----------#
	#----------打开文件----------#
	def openFile(self):
		file_path =  QtGui.QFileDialog.getOpenFileName(self,u'打开文件',"" ,u"All Files(*.*);;纯文本 (*.txt)")
		self.setWindowTitle(file_path+"  - Raymond Text")
		self.NewTab = QtGui.QWidget()
		#显示右键菜单
		self.NewTab.customContextMenuRequested.connect(self.TabRightMenu)
		self.loxLayout = QtGui.QVBoxLayout(self.NewTab)
		self.loxLayout.setContentsMargins(0, 0, 0, 0)
		self.textEdit = QsciScintilla(self.NewTab)
		self.textEdit.setToolTip(_fromUtf8(""))
		self.textEdit.setWhatsThis(_fromUtf8(""))
		if file_path:
			self.loxLayout.addWidget(self.textEdit)
			self.tabWidget.addTab(self.NewTab, _fromUtf8(""))
			self.textEdit.setText(open(file_path,'r').read())
			#获取文件名称
			file_name=os.path.basename(str(file_path))
			con=connect(self.dataBaseName)
			cur=con.cursor()
			res=(file_name,str(file_path),0,0)
			cur.execute('insert into grouping_data (name,address,groupid,iconPath) values (?,?,?,?)',res)
			con.commit()
			con.close()
			self.tabWidget.setTabText(self.tabWidget.indexOf(self.NewTab), _translate("MainWindow", file_name, None))
			self.tabWidget.setCurrentIndex(self.tabWidget.currentIndex()+1)
			self.setTextEdit()
		
	#----------end 打开文件----------#

	#----------保存文件----------#
	def saveFile(self):
		#获取空口标题
		# print self.windowTitle()
		print self.textEdit.toPlainText()
	#----------end 保存文件----------#
	#----------另存为文件----------#
	def saveAsFile(self):
		file_path =  QtGui.QFileDialog.getSaveFileName(self,u'另存为',"" ,u"All Files(*.*);;纯文本 (*.txt)")
		if file_path:
			fp = open(file_path,"w")     #直接打开一个文件,如果文件不存在则创建文件
			for row in cur:
				data="名称:"+row[1]+"      密码:"+row[2]+"\n"
				print data
				fp.writelines(data)
			fp.close()
	#----------end 另存为文件----------#



#==========end 文件菜单中所有功能==========#

#==========编辑菜单中所有功能==========#
#==========end 编辑菜单中所有功能==========#
	#----------------------杂项.功能--------------------#
	#设置textEdit字体,行号,颜色
	def setTextEdit(self):
		# 设置默认字体
		font = QtGui.QFont()
		font.setFamily('Courier')
		font.setFixedPitch(True)
		font.setPointSize(12)
		self.textEdit.setFont(font)
		self.textEdit.setMarginsFont(font)
		# Margin 0用于行号
		fontmetrics = QtGui.QFontMetrics(font)
		# self.textEdit.setMarginsFont(font)
		# 行号宽度
		# self.textEdit.setMarginWidth(0, fontmetrics.width("00000") + 6)
		self.textEdit.setMarginWidth(0, 60)
		# self.textEdit.setMarginLineNumbers(0, True)
		# 行号背景色
		self.textEdit.setMarginsBackgroundColor(QtGui.QColor("#C7EDCC"))
		# 行号字体颜色
		self.textEdit.setMarginsForegroundColor(QtGui.QColor("#000000"))
		# 高亮当前行与特殊的背景颜色
		self.textEdit.setCaretLineVisible(True)
		self.textEdit.setCaretLineBackgroundColor(QtGui.QColor("#C7EDCC"))
		#光标颜色
		self.textEdit.setCaretForegroundColor(QtGui.QColor("white"))
		#选择字体的背景颜色
		self.textEdit.setSelectionBackgroundColor(QtGui.QColor("#606060"))
		#选择字体的颜色
		self.textEdit.setSelectionForegroundColor(QtGui.QColor("#FFFFFF"))
		#折叠边缘
		self.textEdit.setFolding(QsciScintilla.PlainFoldStyle)
		self.textEdit.setMarginWidth(2,12)
		#括号匹配
		self.textEdit.setBraceMatching(QsciScintilla.StrictBraceMatch)


		#不要看到所有的水平滚动条
		#在这里使用原始消息给Scintilla(所有消息都记录
		#在这里#这里:http://www.scintilla.org/ScintillaDoc.html)
		self.textEdit.SendScintilla(QsciScintilla.SCI_SETHSCROLLBAR,0)

	#删除TabWidget中的tab
	def closeTab(self,tabId):
		#关闭置顶信号槽  
		self.tabWidget.removeTab(tabId)
	#获取tab中的数据
	def getTabData(self,tabId):
		if self.tabWidget.tabText(tabId)==u"新建文件":
			self.setWindowTitle(u"新建文件  - Raymond Text")
		else:
			con=connect(self.dataBaseName)
			cur=con.cursor()
			cur.execute('select * from grouping_data where name="%s"'%self.tabWidget.tabText(tabId))
			row=cur.fetchall()
			self.setWindowTitle(row[0][2]+"  - Raymond Text")
			con.commit()
			con.close()
	#tab右键菜单
	def TabRightMenu(self,id):
		self.popMenu = QtGui.QMenu()
		self.popMenu.setStyleSheet("QMenu{background:#fff;border:1px solid #C4C4C4;}QMenu:item{padding:6px 70px 6px 30px;}QMenu:item:selected:enabled{background:#EAEAEA;color:#000}QMenu:item:selected:!enabled{background:transparent;}QMenu:separator{margin:1px 1px 1px 1px;}" )
		self.rc_close = self.popMenu.addAction(u'关闭')
		self.rc_close_other = self.popMenu.addAction(u'关闭其它')
		self.rc_close_right_label = self.popMenu.addAction(u'关闭右侧标签')
		self.rc_new_file = self.popMenu.addAction(u'新建文件')
		self.rc_open_file = self.popMenu.addAction(u'打开文件')
		self.popMenu.move(QtGui.QCursor.pos())
		self.popMenu.show()
		
		self.rc_close.triggered.connect(self.addItem)
		self.rc_close_other.triggered.connect(self.addItem)
		self.rc_close_right_label.triggered.connect(self.addItem)
		self.rc_new_file.triggered.connect(self.addItem)
		self.rc_open_file.triggered.connect(self.addItem)
	def addItem(self):
		print "rc"