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

Osa*_*zam 1 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()
Run Code Online (Sandbox Code Playgroud)

当我删除这一行时,tabBar.setTabButton(1, QTabBar.RightSide, menuButton)它的工作原理!

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

tabBar = tabs.tabBar()
menuButton = QPushButton('')
menuButton.resize(0,0)
tabBar.setTabButton(1, QTabBar.RightSide, menuButton)
Run Code Online (Sandbox Code Playgroud)

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

有没有解决方法来执行此操作?

Osa*_*zam 5

最后,我找到了让它成功的答案!

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

self.menuButton = QPushButton('')
Run Code Online (Sandbox Code Playgroud)

代替

menuButton = QPushButton('')
Run Code Online (Sandbox Code Playgroud)

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