2016-05-02 8 views
2

Qt Designerを使用してPyQt4でウィザードを作成しました。ウィザードの1ページに、タイプ「QTextBrowser」の「text_Browser」オブジェクトが存在します。私は関数QTextBrowser.append()を使用して、何らかの処理に基づいてテキストを追加しています。PyQtウィザードでページを表示した後の信号の接続方法?

アクション(信号)を次のページまたは前のページの他のボタンに接続するのではなく、このページの表示後に追加機能を実行したいとします。これをどうやって行うのですか?

答えて

1

showEventをQTextBrowserに再実装することができます。

# from PySide import QtGui 
from PyQt4 import QtGui 

class CustomTextBrowser(QtGui.QTextBrowser): 
    '''Reimplment show event to append text''' 

    def showEvent(self, event): 
     # do stuff here 
     #self.append('This random text string ') 
     event.accept() 

が、これは予期しない動作を引き起こす可能性があり、このウィジェットの表示を切り替える他のQtのイベントを意味し、QTextBrowserの文字列にウィジェットが表示されるたびに追加されますことを警告されてください。この理由から、信号とスロットを使用することが望ましいですが、ではなく、が信号/スロットを使用するため、公正な警告を伴うshowEventのQEventバージョンがあります。

# from PySide import QtGui 
from PyQt4 import QtGui 

class CustomTextBrowser(QtGui.QTextBrowser): 
    '''Reimplment show event to append text''' 

    def __init__(self, *args, **kwds): 
     super(CustomTextBrowser, self).__init__(*args, **kwds) 

     self._loaded = False 

    def showEvent(self, event): 
     if not self._loaded: 
      # do stuff here 
      #self.append('This random text string ') 
      self._loaded = True 
     event.accept() 

別の解決策として、信号/スロットの戦略を使用することであろう:ウィジェットが表示された後に複数回インスタンス変数を設定し、その値をトグルすることでテキストを追加回避する

一つの解決策__init__を上書きして、サブクラスに自動的にテキストを追加することができます。シグナル/スロットのメカニズムは、Qtプログラマにとって最も直感的かつ論理的です。

関連する問題