PyQT QTabWidget currentChanged

Posted

技术标签:

【中文标题】PyQT QTabWidget currentChanged【英文标题】: 【发布时间】:2014-02-04 20:17:36 【问题描述】:

我正在尝试构建一个在 QTabWidget 中加载多个网页的小应用程序。这已经很好了。现在我希望在当前选项卡更改时重新加载选项卡/QWebViews。

我认为函数“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_())

希望你能帮我解决我的问题!非常感谢!

【问题讨论】:

【参考方案1】:

在此处检查您的代码所需的更改:

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

【讨论】:

以上是关于PyQT QTabWidget currentChanged的主要内容,如果未能解决你的问题,请参考以下文章

在 QTabWidget (PyQT) 中添加已删除的选项卡

如何仅隐藏 QTabWidget 栏 PyQt5 [关闭]

PyQt5 - QTabWidget 内容是不是可以扩展到主窗口边缘,即使没有内容?

PyQT QTabWidget currentChanged

PyQt4:如何/何时从 QTabWidget 的子类发出自定义信号?

PyQt:可编辑的 QTabWidget 选项卡文本