2011-12-08 135 views
0

我試圖使一個標籤Widget與自定義選項卡欄移動。該程序工作正常,如果我沒有繼承QTabBarsetMovable(True),但我需要訪問QTabBar提供的mouseDoubleClickEvent子分類。當你運行程序時,一切都會運行,直到你嘗試用鼠標移動一個標籤爲止。我覺得我已經嘗試了所有可能的setMovable的組合,我可以想到但沒有任何工作。難道我做錯了什麼?pyQt4 QTabWidget setMovable與自定義QTabBar崩潰

使用:

蟒蛇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"