3

3つのタブで作成されたタブウィジェットがあります。タブを変更するときにシグナルを発する必要があります。pyQtのドキュメントを見ると、currentChanged()はタブの変更時に発せられるシグナルですが、機能しません。だから、同じことを理解する上であなたの助けが必要です、

私のコードは次のとおりです。

main_tab_widget = QTabWidget()

    #Creating Tabs
    self.run_tab = QWidget()
    self.cc_tab = QWidget()
    self.result_tab = QWidget()

    #Adding Tabs to Tab Widget
    main_tab_widget.addTab(self.run_tab, "RUN")
    main_tab_widget.addTab(self.cc_tab, "Config Creator")
    main_tab_widget.addTab(self.result_tab, "Result")

    #Layout Creation
    main_layout = QVBoxLayout()
    main_layout.addWidget(main_tab_widget)

    self.connect(self.cc_tab, SIGNAL('currentChanged(int)'), self.pseudofunction)
    self.RunTab()
    self.setLayout(main_layout)
    #self.configcreatortab()
    #self.resulttab()

def pseudofunction(self):
    print 'Inside Pseudo Function'
4

1 に答える 1

6

currentChanged間違ったオブジェクトから の信号を配線しようとしています。はこの信号を発信するQTabWidgetですが、タブの1つにあるQWidgetmain_tab_objectからこの信号を接続しようとしています。self.cc_tab

行を置き換えます

    self.connect(self.cc_tab, SIGNAL('currentChanged(int)'), self.pseudofunction)

    self.connect(main_tab_widget, SIGNAL('currentChanged(int)'), self.pseudofunction)

編集:シグナル/スロットメカニズムを使用して、QTabWidgetの各タブに異なる関数を接続する方法はありません。異なるタブが選択されているときに異なる関数を呼び出したい場合は、選択されたタブに応じて関連する関数を呼び出す別の関数を作成する必要があります。例えば:

def selector(self, selected_index):
    if selected_index == 0:
        self.some_function_for_run_tab()
    elif selected_index == 1:
        self.some_function_for_cc_tab()
    elif selected_index == 2:
        self.some_function_for_result_tab()

次にcurrentChanged、QTabWidgetのシグナルをこの関数に接続します。

QTabBarにもcurrentChangedシグナルがあるのは正しいですが、2番目のコメントでそれを使用すると、上記のコードで置き換えることにより、QWidget()目的の結果QTabBar()が得られません。

QTabBarは、タブのコレクションを含むバーとしてのみ機能します。(実際、QTabWidgetはタブバーに内部的にQTabBarを使用します。)したがって、QTabBarをQTabWidget内に配置すると、タブ内にタブが表示されます。私はこれがあなたが望むものだとは思わない。さらに、QTabBarsにタブを追加していないのではないかと思います。QTabBarにはcurrentChangedシグナルがあり、コードはこれらのシグナルを正しく接続しますが、QTabBarには変更するタブが含まれていないため、これらのシグナルは発生しません。

これらのQTabBar自体がQTabWidget内にある可能性があるという事実は関係ありません。彼らは自分のタブのセットへの変更のみを見るので、自分のタブのセットへの変更に対してのみシグナルを発することができます。

于 2011-04-03T15:08:21.097 に答える