• 5757阅读
  • 3回复

QTabWidget能不能禁止切换标签页??? [复制链接]

上一主题 下一主题
离线bazzi2011
 

只看楼主 正序阅读 楼主  发表于: 2014-11-21
QTabWidget能不能禁止切换标签页???


如图比如我要切换Tab2的时候,Tab1上的Edit还是空的,那么我就弹出个提示“编辑框未填写”,然后不让它切换到Tab2标签页!
离线dbzhang800

只看该作者 3楼 发表于: 2014-11-21
直接装个过滤器来过滤 QTabWidgt 中 tabBar 的鼠标事件也可行。

简单试了一下

  1. #!/usr/bin/env python
  2. # -*- coding: UTF-8 -*-
  3. '''
  4. Copyright (C) 2014 hello#debao.me
  5. All rights reserved.
  6. '''
  7. from PyQt4 import QtCore, QtGui
  8. class TabWidget(QtGui.QTabWidget):
  9.     def __init__(self, parent=None):
  10.         super(TabWidget, self).__init__(parent)
  11.         self._switchEnabled = True
  12.         self.tabBar().installEventFilter(self)
  13.     def setUserSwitchEnabled(self, enabled):
  14.         self._switchEnabled = enabled
  15.     def eventFilter(self, obj, evt):
  16.         if evt.type() == QtCore.QEvent.MouseButtonPress:
  17.             return not self._switchEnabled
  18.         return super(TabWidget, self).eventFilter(obj, evt)
  19. if __name__ == '__main__':
  20.     import sys, functools
  21.     app = QtGui.QApplication(sys.argv)
  22.     
  23.     w = TabWidget()
  24.     w.addTab(QtGui.QPlainTextEdit(), "Page1")
  25.     w.addTab(QtGui.QSpinBox(), "Page2")
  26.     w.addTab(QtGui.QPushButton("Test"), "Page3")
  27.     w.show()
  28.     
  29.     #Disable switch action 5-seconds later
  30.     QtCore.QTimer.singleShot(5000, functools.partial(w.setUserSwitchEnabled, False))
  31.     
  32.     app.exec_()

离线realfan

只看该作者 2楼 发表于: 2014-11-21
可以实现。
currentChanged(int index)时,检查edit,如果为空,则用setCurrentIndex(int index)将当前Tab设回第一个。

你这种需求,可以考虑用QStackedWidget或QWizard
离线uidab

只看该作者 1楼 发表于: 2014-11-21
lineEdit 有好多信号,利用这些信号想个方法就可以。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
快速回复
限100 字节
 
上一个 下一个