子类内的QTabBar.setTabButton()崩溃了Application

时间:2013-04-05 14:34:21

标签: pyside

在以下Python代码段中,运行时应用程序崩溃了。我在Mac OS X,Windows和Ubuntu上测试过它:

import sys
from PySide.QtCore import *
from PySide.QtGui import *

class TabbedWindow(QTabWidget):

    def __init__(self):
        super(TabbedWindow, self).__init__()
        self.setWindowTitle(u"Tabs Test")
        self.resize(800, 600)

        self.addTab(QTextEdit(), "Tab 1")
        self.addTab(QCalendarWidget(), "Tab 2")

        self.setTabsClosable(True)

        tabBar = self.tabBar()
        menuButton = QPushButton('')
        menuButton.resize(0,0)
        tabBar.setTabButton(1, QTabBar.RightSide, menuButton)


def main():
    app = QApplication(sys.argv)
    window = QMainWindow()
    tabs = TabbedWindow()
    window.setCentralWidget(tabs)
    window.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

当我删除此行tabBar.setTabButton(1, QTabBar.RightSide, menuButton)时,它有效!

此外,如果我将此行移至main函数:它也可以工作!我的意思是当我把它添加到main函数时:

tabBar = tabs.tabBar()
menuButton = QPushButton('')
menuButton.resize(0,0)
tabBar.setTabButton(1, QTabBar.RightSide, menuButton)

我想要做的是在某些标签上隐藏关闭按钮。

是否有解决方法可以执行此操作?

1 个答案:

答案 0 :(得分:5)

最后,我找到了让它起作用的答案!

您必须将该按钮声明为该类的成员。

self.menuButton = QPushButton('')

而不是

menuButton = QPushButton('')

我希望有人会发现这个解决方案很有用。