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) 中添加已删除的选项卡
PyQt5 - QTabWidget 内容是不是可以扩展到主窗口边缘,即使没有内容?
PyQT QTabWidget currentChanged