【问题标题】:pyQt4 QTabWidget setMovable crashes with custom QTabBarpyQt4 QTabWidget setMovable 使用自定义 QTabBar 崩溃
【发布时间】:2011-12-08 18:04:07
【问题描述】:

我正在尝试制作一个带有可移动自定义标签栏的标签小部件。如果我不将QTabBarsetMovable(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()

【问题讨论】:

    标签: python qt pyqt pyqt4 qtabwidget


    【解决方案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"
    

    【讨论】:

      猜你喜欢
      • 2019-06-30
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      相关资源
      最近更新 更多