Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pyQt4 QTabWidget setMovable与自定义QTABAR崩溃_Python_Qt_Pyqt_Pyqt4_Qtabwidget - Fatal编程技术网

Python pyQt4 QTabWidget setMovable与自定义QTABAR崩溃

Python pyQt4 QTabWidget setMovable与自定义QTABAR崩溃,python,qt,pyqt,pyqt4,qtabwidget,Python,Qt,Pyqt,Pyqt4,Qtabwidget,我正在尝试使一个带有自定义选项卡栏的选项卡小部件可移动。如果我没有对QTabBar和setMovable(True)进行子类化,那么该程序运行良好,但我需要访问QTabBar提供的mouseDoubleClickEvent。当你运行程序时,一切都会工作,直到你尝试用鼠标移动一个标签为止。我觉得我已经尝试了我能想到的setMovable的所有可能组合,但没有任何效果。我做错什么了吗 使用: python v2.7.2 PyQt4 v4.8.5 还有令人厌恶的Windows XP from PyQt

我正在尝试使一个带有自定义选项卡栏的选项卡小部件可移动。如果我没有对
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()
使用该方法添加选项卡,并确保将小部件与每个选项卡关联:

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"