46613


自分のソフト外の適当なウェブサイトなどから、文章をコピペして、  
それをテキストエディタで保存して、再度復元したいと思っています。  
例えばなのですが、このサイトからタイトル部分をコピペしてきました。  
[Matahari Wikipedia](https://id.wikipedia.org/wiki/Matahari)

[![enter image description
here](https://i.stack.imgur.com/6F7kx.png)](https://i.stack.imgur.com/6F7kx.png)

すると、こんな感じになります。  
[![enter image description
here](https://i.stack.imgur.com/cDELS.png)](https://i.stack.imgur.com/cDELS.png)

Key_1を押して、その内容をセーブしました。

その後、再起動を行い、前のデータを復元してみました。

[![enter image description
here](https://i.stack.imgur.com/GbIA1.png)](https://i.stack.imgur.com/GbIA1.png)

すると、常に、ロードしたテキストは真っ暗になります。

mimedata.html()を調べてみますと、

[code]

    <!--StartFragment--><span style="display: inline !important; float: none; background-color: transparent; color: rgb(0, 0, 0); font-family: &quot;Linux Libertine&quot;,&quot;Georgia&quot;,&quot;Times&quot;,serif; font-size: 28.8px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; line-height: 37.44px; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">Matahari</span><!--EndFragment-->
    
[/code]

色のところが、 (0,0,0). つまり、黒色がデフォルトで指定されています。  
だから、この部分を書き換えればいいじゃないかと思ったんで、

[code]

    clipboard = QtGui.QApplication.clipboard()                         
    html = clipboard.mimeData().html()
    print(html)
    html = html.replace("color: rgb(0, 0, 0);","color: rgb(255, 255, 255);")
    clipboard.mimeData().setHtml(html)
    
    
    
    
    <!--StartFragment--><span style="display: inline !important; float: none; background-color: transparent; color: rgb(255, 255, 255); font-family: &quot;Linux Libertine&quot;,&quot;Georgia&quot;,&quot;Times&quot;,serif; font-size: 28.8px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; line-height: 37.44px; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">Matahari</span><!--EndFragment-->
    
[/code]

プリント文で打ちだしたら、確かに（２５５，２５５，２５５）になり、  
白になっているはずなのですが、こうして、再度書き換えたhtmlの内容をセットして、再度ロードしてみましたが、結果は相変らずでした。

背景が真っ黒にならないようにしたいのですが、どうすればいいんでしょうか？

こちらが、実行可能なサンプルコードです。

[code]

    from PySide import QtGui
    
    from PySide import QtCore
    import sys
    import os
    class TextEdit(QtGui.QTextEdit):
        def __init__(self,parent=None):
            super(TextEdit,self).__init__(parent=None)
        def keyPressEvent(self,event):
            if event.key() == QtCore.Qt.Key_1:
                self.save()
                return
            elif event.key() == QtCore.Qt.Key_2:
                self.load()
                return
            elif event.key() == QtCore.Qt.Key_V:
                self.copy_paste()
                return
            return QtGui.QTextEdit.keyPressEvent(self,event)
        def save(self):
            print(os.getcwd()+"copy_paste_test.dat")
            file = QtCore.QFile(os.getcwd()+"copy_paste_test.dat")
            file.open(QtCore.QFile.ReadWrite)
            out = QtCore.QDataStream(file)
            out.writeQString(self.toHtml())
            file.close()
        def load(self):
            file = QtCore.QFile(os.getcwd()+"copy_paste_test.dat")
            file.open(QtCore.QFile.ReadOnly)
            out = QtCore.QDataStream(file)
            self.insertHtml(out.readQString())
            file.close()
        def copy_paste(self):
    
            clipboard = QtGui.QApplication.clipboard()
            self.insertFromMimeData(clipboard.mimeData())      
    
    def main():
        try:
            QtGui.QApplication([])
        except Exception as e:
            print(e)
        textedit = TextEdit()
        textedit.show()
        sys.exit(QtGui.QApplication.exec_())
    if __name__ == "__main__":
        main()
    
[/code]

実行環境；PySide 1.2.4 Python 3.6.5 Windows10


CC BY-SA 4.0
2018-07-14T12:58:08.323
45613
2018-07-14T14:02:19.863
2018-07-14T14:02:19.863
24284
24284
question
python pyqt pyside
QApplication,QClipboard,mimedataで、貼り付けをした後にデータを復元すると、必ずテキストが黒くなる。


以下が関係しているかもしれません。

[QTextEdit doesn't respect transparency of textBackgroundColor in toHtml()
method](https://bugreports.qt.io/browse/QTBUG-21522)

Qt5で修正されているようです。

そのため、無理矢理対応するのであれば、以下のように`background-color`の`transparent`を白に置換してやる必要があると思います。

[code]

    html = html.replace("background-color: transparent;","background-color: rgb(255, 255, 255);")
    
[/code]

一方、CSSの`color`のカラープロパティは文字色を意味するため、背景色を白にする場合は、置換不要です。


CC BY-SA 4.0
2018-07-14T13:33:29.477
46613
2018-07-14T13:33:29.477
45613
answer