在Pyqt中选择选项卡时发出信号Not Emitted

时间:2011-04-03 14:19:36

标签: python pyqt pyqt4 tabbar tabwidget

我有一个标签小部件,里面有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'

1 个答案:

答案 0 :(得分:4)

您正在尝试连接来自错误对象的currentChanged信号。 main_tab_object是发出此信号的QTabWidget,但您正试图从self.cc_tab(其中一个标签中的QWidget)连接此信号。

替换

    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()

然后将QTabWidget的currentChanged信号连接到此函数。

你是正确的,QTabBar也有currentChanged信号,但你在第二条评论中使用它,在上面的代码中用QWidget()替换QTabBar(),将无法实现你想要的。

QTabBar仅作为包含标签集合的栏。 (实际上,QTabWidget在其内部使用QTabBar作为其标签栏。)因此,将QTabBar放在QTabWidget中会在选项卡中显示标签。我不相信这是你想要的。此外,我怀疑你没有向QTabBars添加任何标签。 QTabBars确实有currentChanged信号,你的代码将正确连接这些信号,但这些信号永远不会触发,因为QTabBars不包含要更改的标签。

这些QTabBars本身可能在QTabWidget中的事实无关紧要。他们只看到对自己的标签集的更改,因此只能触发信号以更改自己的标签集。