pyQt4 QTabWidget 设置可移动时与自定义 QTabBar 崩溃
我正在尝试制作一个可以移动的标签控件。这个程序在我不对 QTabBar
进行子类化并且不设置 setMovable(True)
的情况下运行得很好,但我需要访问 QTabBar
提供的 mouseDoubleClickEvent
事件,所以我才进行子类化。当你运行这个程序时,一切都正常,直到你尝试用鼠标移动一个标签。我感觉我尝试了所有可能的 setMovable
组合,但都没有成功。我是不是做错了什么?
使用的环境:
python 版本:v2.7.2
PyQt4 版本:v4.8.5
还有令人厌恶的 Windows XP
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys
class Main(QWidget):
def __init__(self, parent=None):
super(Main, self).__init__(parent)
self.widgetBox = QHBoxLayout(self)
self.tabs = CTabWidget()
self.widgetBox.addWidget(self.tabs)
self.setLayout(self.widgetBox)
class CTabWidget(QTabWidget):
def __init__(self, parent=None):
super(CTabWidget, self).__init__(parent)
self.tabBar = CTabBar(self)
self.tabBar.addTab("Foo")
self.tabBar.addTab("Bar")
self.setTabBar(self.tabBar)
self.setTabPosition(QTabWidget.West)
self.setMovable(True)
class CTabBar(QTabBar):
def __init__(self, parent=None):
super(CTabBar, self).__init__(parent)
self.setMovable(True)
def addTab(self, string):
super(CTabBar, self).addTab(QString(string))
def mouseDoubleClickEvent(self, event):
print "Change name"
class Run(object):
def __init__(self):
app = QApplication(sys.argv)
app.setStyle(QStyleFactory.create("plastique"))
main = Main()
main.show()
sys.exit(app.exec_())
Run()
1 个回答
1
使用 QTabWidget.addTab 方法来添加标签页,并确保每个标签页都关联一个小部件:
class CTabWidget(QTabWidget):
def __init__(self, parent=None):
super(CTabWidget, self).__init__(parent)
self.tabBar = CTabBar(self)
self.setTabBar(self.tabBar)
self.setTabPosition(QTabWidget.West)
self.tab1 = QWidget(self)
self.tab2 = QWidget(self)
self.addTab(self.tab1, "Foo")
self.addTab(self.tab2, "Bar")
class CTabBar(QTabBar):
def __init__(self, parent=None):
super(CTabBar, self).__init__(parent)
self.setMovable(True)
def mouseDoubleClickEvent(self, event):
print "Change name"