2014-02-04 1 views
2

Я пытаюсь создать небольшое приложение, которое загружает несколько веб-страниц в QTabWidget. Это уже хорошо работает. Теперь я хочу, чтобы вкладки/QWebViews перезагружались при изменении текущей вкладки.PyQT QTabWidget currentChanged

Я думаю, что есть проблема с подключением функции «onChange» к currentChanged-Event.

Это мой код:

 


    #!/usr/bin/env python 

    import sys, os 
    from PyQt4.QtCore import * 
    from PyQt4.QtGui import * 
    from PyQt4.QtWebKit import * 
    from PyQt4.QtNetwork import * 
    from PyQt4 import QtCore, QtGui, QtWebKit 
    from PyQt4.QtWebKit import QWebView 


    class BaseWindow(QtGui.QMainWindow): 
     def __init__(self, parent = None): 
      QtGui.QMainWindow.__init__(self, parent) 
      self.centralWidget = QtGui.QWidget() 
      self.resize(800, 500) 
      self.setWindowTitle('Test') 
      self.tabs = QTabWidget() 
      #self.tabs.connect(self.tabs,SIGNAL("currentChanged(int)"),self,SLOT("onChange(int)")) #tabs,SLOT("tabChangedSlot(int)") 
      #self.tabs.currentChanged.connect(self.onChange) 


      self.webview = QWebView() 
      self.webview.load(QUrl("http://gmx.de")) 

      self.webview2 = QWebView() 
      self.webview2.load(QUrl("http://web.de")) 

      centralLayout = QtGui.QVBoxLayout() 
      centralLayout.addWidget(self.tabs, 1) 

      self.tabs.addTab(self.webview, "gmx") 
      self.tabs.addTab(self.webview2, "web") 
      self.centralWidget.setLayout(centralLayout) 

      self.setCentralWidget(self.centralWidget) 

     #@pyqtSlot() 
     def onChange(self): 
      QtGui.QMessageBox.information(self, 
         "Tab Index Changed!", 
         "Current Tab Index: "); 





    if __name__ == '__main__': 
     app = QtGui.QApplication(sys.argv) 
     window = BaseWindow() 
     window.show() 
     sys.exit(app.exec_()) 

 

Я надеюсь, что вы можете помочь мне решить мою проблему! Большое спасибо!

ответ

4

Проверьте необходимые изменения в свой код здесь:

import sys, os 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from PyQt4.QtWebKit import * 
from PyQt4.QtNetwork import * 
from PyQt4 import QtCore, QtGui, QtWebKit 
from PyQt4.QtWebKit import QWebView 


class BaseWindow(QtGui.QMainWindow): 
    def __init__(self, parent = None): 
     QtGui.QMainWindow.__init__(self, parent) 
     self.centralWidget = QtGui.QWidget() 
     self.resize(800, 500) 
     self.setWindowTitle('Test') 
     self.tabs = QTabWidget() 

     self.tabs.blockSignals(True) #just for not showing the initial message 
     self.tabs.currentChanged.connect(self.onChange) #changed! 


     self.webview = QWebView() 
     self.webview.load(QUrl("http://gmx.de")) 

     self.webview2 = QWebView() 
     self.webview2.load(QUrl("http://web.de")) 

     centralLayout = QtGui.QVBoxLayout() 
     centralLayout.addWidget(self.tabs, 1) 

     self.tabs.addTab(self.webview, "gmx") 
     self.tabs.addTab(self.webview2, "web") 
     self.centralWidget.setLayout(centralLayout) 

     self.setCentralWidget(self.centralWidget) 

     self.tabs.blockSignals(False) #now listen the currentChanged signal 


    #@pyqtSlot() 
    def onChange(self,i): #changed! 
     QtGui.QMessageBox.information(self, 
        "Tab Index Changed!", 
        "Current Tab Index: %d" % i) #changed! 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    window = BaseWindow() 
    window.show() 
    sys.exit(app.exec_())