2012-02-16 17 views
2

私のインタフェース(ui)に2つのQObjectを作成したとしましょう。私はこれらの2つのウィジェットを接続し、視覚的な状態に応じてそれらを制御させたいと思います。一方が隠されている場合は、他方が見えるようにする必要があります。およびその逆。PyQt:他のウィジェットが表示されている場合、ウィジェットを隠すように設定するにはどうすればいいですか?

あなたは私を助けることができますか? :)

ありがとう!

ニコ

答えて

6

考えられる解決策:SublclassウィジェットとhideEventshowEventを上書き:

#!/usr/bin/env python 
import sys 
from PyQt4 import QtCore, QtGui 


class CustomWidget(QtGui.QLabel): 
    signal_hided = QtCore.pyqtSignal() 
    signal_shown = QtCore.pyqtSignal() 
    def hideEvent(self, event): 
     print 'hideEvent' 
     super(CustomWidget, self).hideEvent(event) 
     self.signal_hided.emit() 

    def showEvent(self, event): 
     print 'showEvent' 
     super(CustomWidget, self).showEvent(event) 
     self.signal_shown.emit() 


class MainWidget(QtGui.QWidget): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.widget1 = CustomWidget('Widget1') 
     self.widget2 = CustomWidget('Widget2') 

     # connect signals, so if one widget is hidden then other is shown 
     self.widget1.signal_hided.connect(self.widget2.show) 
     self.widget2.signal_hided.connect(self.widget1.show) 
     self.widget2.signal_shown.connect(self.widget1.hide) 
     self.widget1.signal_shown.connect(self.widget2.hide) 

     # some test code 
     self.button = QtGui.QPushButton('test') 
     layout = QtGui.QVBoxLayout() 
     layout.addWidget(self.button) 
     layout.addWidget(self.widget1) 
     layout.addWidget(self.widget2) 
     self.setLayout(layout) 
     self.button.clicked.connect(self.do_test) 

    def do_test(self): 
     if self.widget1.isHidden(): 
      self.widget1.show() 
     else: 
      self.widget2.show() 


if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    widget = MainWidget() 
    widget.resize(640, 480) 
    widget.show() 

    sys.exit(app.exec_()) 
+0

感謝!!それは素晴らしい作品です! :) – NicoCati

関連する問題