2014-02-08 3 views
1

У меня есть простой пример приложения PyQt с QTabWidget. Я не могу подключить сигнал tabCloseRequested QTabWidget на слот, так что закладка закрыта:PyQt: правильный способ подключения QTabWidget.tabCloseRequested к слоту

import sys 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

class Application(object): 
    def __init__(self): 
     app = QApplication(sys.argv) 

     self.window = QMainWindow() 

     self.notebook = QTabWidget() 
     self.notebook.tabBar().setTabsClosable(True) 
     self.notebook.tabBar().setMovable(True) 

     self.notebook.tabCloseRequested.connect(self.close_handler) 

     self.window.setCentralWidget(self.notebook) 

     page1 = QWidget() 
     self.notebook.addTab(page1, "page1") 
     page2 = QWidget() 
     self.notebook.addTab(page2, "page2") 

     self.window.show() 
     sys.exit(app.exec_()) 

    def close_handler(self, index): 
     print "close_handler called, index = %s" % index 
     self.notebook.removeTab(index) 

if __name__ == "__main__": 
    app = Application()        

Когда я нажимаю на кнопку закрытия, ничего не происходит. Даже печать, которую нужно вызвать! Что я делаю не так?

ответ

4

Вы должны вызвать setTabsClosable(True) на вкладке-виджета, а не его вкладки-бар:

self.notebook.setTabsClosable(True) 

(PS: метод close_handler также отсутствует self аргумент).

+0

Спасибо, теперь это работает! Извините за отсутствие 'self': когда я проверил этот код, я исправил эту ошибку на своей машине, но забыл ее скопировать. –

Смежные вопросы