2011-12-08 13 views
0

私は、カスタムタブバーを移動可能にしてタブウィジェットを作成しようとしています。 QTabBarsetMovable(True)をサブクラス化せずにmouseDoubleClickEventにアクセスする必要がある場合は、プログラムは正常に機能しますが、QTabBarはサブクラス化を提供します。プログラムを実行すると、マウスを使ってタブを動かすまで、すべての機能が働きます。 setMovableの考えられるすべての組み合わせを試したような気がしますが、何も問題はありません。私は何か間違っているのですか?pyQt4 QTabWidget setMovableがカスタムQTabBarでクラッシュする

の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

タブを追加する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"