用于复制QTabWidget中的选项卡的按钮

时间:2017-11-29 15:19:36

标签: python pyqt pyqt5 qtabwidget

我有一个程序使用带有多个输入框的输入选项卡供用户填写,当填写这些输入框时,我点击运行,另一个程序将运行输入的数据。我希望我的程序有一个带加号的标签按钮,它会动态复制标签,以便我可以运行多个实例。我希望每个标签使用相同的名称,但最后有一个变体 - 例如" EntryBox0"," EntryBox1"," EntryBox2"。

是否有一种简单的方法可以做到这一点,同时在所有标签中保持格式(小部件位置)相同?

我的第一个想法是手动编写多个标签,并为每个标签设置一个隐藏/取消隐藏按钮,但这将是更多的代码。

enter image description here

我想在"标签2"旁边添加+号。所有选项卡都是相同的。窗口小部件将具有相同的名称,但最后会有一个动态编号,以标识正在使用的选项卡。

from Stage import Ui_Form
from Tabs import Ui_TabPage

class TabPage(QWidget, Ui_TabPage):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)

class Stage(QMainWindow, Ui_Form):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)
        button = QtWidgets.QToolButton()
        button.setToolTip('Add New Tab')
        button.clicked.connect(self.addNewTab)
        button.setIcon(self.style().standardIcon(
            QtWidgets.QStyle.SP_DialogYesButton))
        self.tabWidget.setCornerWidget(button, QtCore.Qt.TopRightCorner)
        self.addNewTab()

    def addNewTab(self):
        text = 'Tab %d' % (self.tabWidget.count() + 1)
        self.tabWidget.addTab(TabPage(self.tabWidget), text)

if __name__ == '__main__':

    app = QtWidgets.QApplication(sys.argv)
    window = Stage()
    window.setGeometry(600, 100, 300, 200)
    window.show()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:2)

9类有一个setCornerWidget方法,可用于向标签栏添加按钮。这只能位于标签栏的左端或右端(而不是最后一个标签之后) - 但对我来说,这看起来更加用户友好,因为当新选项卡是按钮时按钮不会移动添加。通过为标签页创建单独的类,可以轻松复制标签本身。

下面是一个简单的演示脚本,它实现了:

screenshot

QTabWidget