1

モーダル ダイアログ ウィンドウ (QDialog のサブクラス) に QPlainTextEdit があります。ダイアログを最小化して元に戻すと、QTextArea 内のすべてのテキストが消えてしまいます。

QPlainTextEdit ウィジェットでテキストを保持するにはどうすればよいですか?

次のようにテキスト編集ウィジェットにテキストを保存しようとしました:

def __init__(self):
    self.text_area = self.QPlainTextEdit()
    self.previous_text = ''

def hideEvent(self, event):
    self.previous_text = self.text_area.toPlainText()

def showEvent(self, event):
    self.text_area.setPlainText(self.previous_text)

しかし、このアプローチでは、目に見える結果は得られませんでした。

編集: これは、モーダル ダイアログを実際に非表示にできる場合にのみ発生することに気付きました...これは、ウィンドウ マネージャーとして Xmonad を使用している場合にのみ可能であるように思われます...GNOME または Windows でこれを試みるたびに、この動作これらのウィンドウ マネージャーがモーダル ダイアログの最小化を実際に妨げているため、再現できません。

編集: 以下の @Avaris のコメントに従って、次のQDialogようにモーダルの最小化を有効にしようとしました:

def __init__(self):
    ...
    self.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint)

このフラグを設定すると、テキストが消える動作を Windows、GNOME、および XMonad で再現できます。

ウィンドウを最小化する前の Windows マシンの視覚的な例を次に示します。 ウィンドウを最小化する前に

ウィンドウを再度表示すると、次のようになります。 ウィンドウを最小化した後

編集: テキストはモーダル ダイアログに次のQPlainTextEditように書き込まれます。

def write(self, text):
    self.text_area.insertPlainText(QtCore.QString(text))

テキスト自体は、標準出力がキャプチャされてリダイレクトされたスレッドのシステムから Python 文字列として取得されます。上記のwrite()関数を取得するまでに、テキスト自体は単なる python 文字列です。

編集:上記 の方法を次のように変更するとwrite(@ekhumoroの提案に従って):

def write(self, text):
    self.text_area.insertPlainText(text)

ダイアログを非表示にして表示した後も、テキストが表示されません。

4

0 に答える 0