2016-05-25 10 views
0

特定のボタンが押されたときに別のモジュールに書き込まれるQWidgetを表示する必要があります。これを実現するために、私はこのコードを書いた:QMainWindowから開いたQWidgetを閉じる

class Window(QMainWindow): 
    def __init__(self): 
    QMainWindow.__init__(self) 
    #A lot of stuff in here 

    #The button is connected to the method called Serial_connection 
    self.connect(self.btn_selection_tool3, SIGNAL("clicked()"), self.Serial_connection) 

    def Serial_connection(self): 
    LiveData.LiveData(self).show() 

はこれを行う、私はQWidgetを開いて、それが正常に動作します。しかし、私はこれを閉じたいときはQWidget、私はそれを行うことはできません。 self.close()self.accept()あるいはsys.exit(1):I'veは以下のようにいくつかのオプションを試してみました

class LiveData(QWidget): 
    def __init__(self,parent = None): 
    super(QWidget, self).__init__(parent) 
    #Another stuff in here 

    #I create a "close" button connected to another method 
    self.connect(self.closeBtn, QtCore.SIGNAL("clicked()"), self.StopAndClose) 

    def StopAndClose(self): 
    print "Closing window" 
    self.close() #HERE IS WHERE I HAVE THE PROBLEM 

:これはQWidgetのコードです。後者の問題sys.exit(1)は、QWidgetQMainWindowを閉じてしまうことです。ですので、どうすればこのQWidgetを閉じることができますか?あなたが私を助けてくれることを願います。

+0

はどのようにこの 'QWidget'が表示されて行うことができますか?私はそれがあなたの現在のウィジェットの上にオーバーレイされていると想像しています。別のダイアログでそれを開きますか? –

+0

QWidgetを表示する 'show()'メソッドを呼び出す 'Serial_connection'メソッドを呼び出す' QMainWindow'の 'self.btn_selection_tool3'ボタンをクリックすると、' QWidget'が表示されます。私はこの最後のものを閉じる必要があります。私は 'self.close()'を使ってやりません。 –

+0

ええ、それはあなたのメインウィンドウの上にウィジェットを置くだけです(それを配置せずにレイアウト)。 'close'は' QWidgets'の文脈で意味をなさないので何もしません。あなたは '.deleteLater()'を呼び出してウィジェットを削除することができます。しかし、私はまだそれを 'QDialog'にするか、あるいはあなたのメインウインドウに恒久的なウィジェットを作成し、それを連続的に作成したり削除したりするのではなく、表示/非表示、または有効/無効にするべきだと思っています(特に適切な位置付けなしで) –

答えて

2

おそらくQWidgetQDialogにします。それは一時的なモーダルウィジェットの場合は、自分のメインウィンドウと同時にダイアログを表示したい、とユーザーがよりかかわらず(の両方と相互作用することを意図している場合は、この

dialog = LiveData.LiveData(self) 
dialog.exec_() 

のようなダイアログを呼び出すべきですデザインパースペクティブ、これは素晴らしいアイデアのようには聞こえません)、あなたは引き続き使用することができます.show()

また、新しいスタイルの信号/スロット構文を使用する必要があります。古い構文は何年も使われていません。

self.closeButton.clicked.connect(self.StopAndClose) 

ものの、QDialogのためにあなただけ

self.closeButton.clicked.connect(self.accept) 
+0

ありがとうあなたの答えは、このように働いた。このダイアログが閉じられたときにどうすれば検出できますか? –

+1

一般に、受け入れられたイベントまたは拒否されたイベントをリスンします。 exec_を使用している場合は、関数が返るのを待つだけです –

+0

ありがとう、私は今理解しています。ありがとうございました –

関連する問題