Сигнал не испускается при выборе вкладки в Pyqt

У меня есть виджет вкладок, созданный с 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'

person user596922    schedule 03.04.2011    source источник
comment
Принимать ответы на ваши вопросы считается хорошим тоном! Подумайте о том, чтобы ознакомиться с мета. stackexchange.com/questions/63087/. Спасибо   -  person eat    schedule 03.04.2011


Ответы (1)


Вы пытаетесь подключить сигнал 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)

EDIT: невозможно использовать механизм сигналов/слотов для подключения разных функций к каждой вкладке 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, но ваше использование его во втором комментарии путем замены QWidget() на QTabBar() в приведенном выше коде не приведет к тому, что вы хотите.

QTabBar действует только как панель, содержащая набор вкладок. (На самом деле, QTabWidget использует QTabBar внутри своей панели вкладок.) Таким образом, размещение QTabBar внутри QTabWidget дает вам вкладки внутри вкладок. Я не верю, что это то, чего ты хочешь. Кроме того, я подозреваю, что вы не добавляете вкладки в QTabBars. В QTabBars есть сигнал currentChanged, и ваш код правильно соединит эти сигналы, но эти сигналы никогда не сработают, потому что QTabBars не содержат вкладок для изменения.

Тот факт, что эти QTabBars сами могут находиться внутри QTabWidget, не имеет значения. Они видят изменения только в своем собственном наборе вкладок и, следовательно, могут активировать сигналы только об изменениях в своем собственном наборе вкладок.

person Luke Woodward    schedule 03.04.2011
comment
Но я хотел бы вызывать разные функции при выборе на разных вкладках. Но приведенное выше решение связано с tab_widget, где я бы хотел, чтобы это было связано с вкладками. по сути, 3 функции для 3 вкладок. Я посмотрел на QTabBar, и он также говорит, что при изменении вкладки выдается сигнал currentChanged(). пожалуйста, поправьте меня, если я ошибаюсь. - person user596922; 03.04.2011
comment
Я попытался определить вкладки как: , Config Creator) main_tab_widget.addTab(self.result_tab, Results) и пытался подключиться к сигналу currentChanged(int), но даже тогда не получилось.. - person user596922; 03.04.2011
comment
о.. спасибо за подробное объяснение. Теперь я понимаю это лучше. Я попробую предложенное решение. Еще раз спасибо за вашу помощь. - person user596922; 05.04.2011