pyQt4 QTabWidget setMovable аварийно завершает работу с пользовательским QTabBar

Я пытаюсь сделать виджет вкладки с подвижной панелью вкладок. Программа работает нормально, если я не создаю подклассы QTabBar и setMovable(True), но мне нужно получить доступ к mouseDoubleClickEvent, который предлагает QTabBar, таким образом, подклассы. Когда вы запускаете программу, все работает до тех пор, пока вы не попытаетесь переместить вкладку с помощью мыши. Мне кажется, что я перепробовал все возможные комбинации setMovable, которые только мог придумать, но ничего не работает. Я делаю что-то неправильно?

с использованием:

питон 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()

person Jeff    schedule 08.12.2011    source источник


Ответы (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"
person ekhumoro    schedule 08.12.2011