【非阿里体系】QTableWidget中实现复制和粘贴

【非阿里体系 QT快速上手】
只要知道换行符就能上手的Pyqt复制粘贴代码

下面是复制和粘贴的格式

\t\t\t\n
\t\t\t\n
\t\t\t\n

支持复制粘贴,对于【表哥】【表姐】来说十分,效率提高不少

# coding=utf-8
    def keyPressEvent(self, e):
        # CTRL + C COPY TEXT TO CLIPBOARD
        if (e.modifiers() & QtCore.Qt.ControlModifier):
            if e.key() == QtCore.Qt.Key_C:
                self.copy()

        # CTRL + V PASTE 
        if (e.modifiers() & QtCore.Qt.ControlModifier):
            if e.key() == QtCore.Qt.Key_V:
                self.paste()

        # CTRL + S LOAD_FILE
        if (e.modifiers() & QtCore.Qt.ControlModifier):
            if e.key() == QtCore.Qt.Key_S:
                self.save_csv()

        # DELETE SELECTION
        if e.key() == QtCore.Qt.Key_Delete:
            self.del_sel()

    def del_sel(self):
        # CONVERT FIRST SELECT RANGE TO INDICE NUMBER
        sel = self.tv.selectedRanges()
        r1 = sel[0].topRow()
        r2 = sel[0].bottomRow()
        c1 = sel[0].leftColumn()
        c2 = sel[0].rightColumn()

        for i in range(r1,r2+1):
            for j in range(c1,c2+1):
                nullItem = QTableWidgetItem("") 
                self.tv.setItem(i,j,nullItem)

    def paste(self):
        sel = self.tv.selectedRanges()
        r = sel[0].topRow()
        c = sel[0].leftColumn()

        text = self.clip.text()
        text = text[:-1]
        line = text.split("\n")

        for i,string in enumerate(line):
            # print(string)
            string = string[:-1]
            cells = string.split('\t')
            for j,cell in enumerate(cells):
                Item = QTableWidgetItem(cell) 
                self.tv.setItem(r+i, c+j,Item)

    def copy(self):
        # CONVERT FIRST SELECT RANGE TO INDICE NUMBER
        sel = self.tv.selectedRanges()
        r1 = sel[0].topRow()
        r2 = sel[0].bottomRow()
        c1 = sel[0].leftColumn()
        c2 = sel[0].rightColumn()

        clipBoard_str = ''
        for i in range(r1,r2+1):
            for j in range(c1,c2+1):
                try:
                    clipBoard_str +=  self.tv.item(i,j).text()  + "\t"
                except AttributeError:
                    clipBoard_str +=  "\t"
            clipBoard_str = clipBoard_str[:-1] + "\n" #eliminate last '\t'
            
        self.clip.setText(clipBoard_str)
        print(clipBoard_str)

重点代码分析,用\t和\n拼接字符串.把行末的换行符去除

        for i in range(r1,r2+1):
            for j in range(c1,c2+1):
            # 用\t和\n拼接字符串
                try:
                    clipBoard_str +=  self.tv.item(i,j).text()  + "\t"
                except AttributeError:
                    clipBoard_str +=  "\t"
            clipBoard_str = clipBoard_str[:-1] + "\n" #eliminate last '\t'

【Python】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值