2017-06-28 7 views
2

私は\includeにラテックスファイルのPython文字列を持っています。しかし、私の文字列にはアンダースコア文字(_)があり、これは\_(これは_のラテックス表現)に変換する必要があります。Strの置き換え方法が起こっているところ

私が行う場合:

self.name = self.laser_comboBox.currentText() #Get name from a qt widget 
latex_name = self.name.replace("_", r"\_") #Replacing _ for \_ 
print self.name 
print latex_name 

は私が買ってあげる:

XXXXXX-YY\_SN2017060009 
XXXXXX-YY\_SN2017060009 

として、それを見ることができるが、両方の変数が置き換えられました。つまり、replaceメソッドが実行されたことを意味します。私はしかし場合:

self.name = self.laser_comboBox.currentText() #Get name from a qt widget 
latex_name = str(self.name).replace("_", r"\_") #Converting to str and then replacing _ for \_ 
print self.name 
print latex_name 

は私が買ってあげる:

XXXXXX-YY_SN2017060009 
XXXXXX-YY\_SN2017060009 

これはme..I'dはこれが起こっている理由を知りたいと困惑ものです...

答えて

6

Iここでいくつかのテストを実行して、私は答えを見つけたと思う。

My self.name<class 'PyQt4.QtCore.QString'>タイプです。QtWidgetから取得しています。 私が間違っているが、私が実行したテストや文書(http://doc.qt.io/qt-5/qstring.html#replace)から、<class 'PyQt4.QtCore.QString'>replaceメソッドが実行されているようだ。一方、Python strの場合、Pythonの文字列は不変なので、それはありません。

だから、要するに:

  • Pythonのstrinplace=False
  • PyQt4.QtCore.QString(Pythonの文字列は不変です):inplace=True

とにかく、これは役に立つことことを願って

0

ときをself.nameあなたは実際にオブジェクトの代わりに置き換えますname文字列。

str(self.name)を入力した場合、strで作成された新しいオブジェクトの代わりに、self.nameではありません。したがって、self.nameは変更されません。

関連する問題