单击时获取动态创建的按钮的ID

时间:2019-06-25 19:04:12

标签: python-3.x pyqt5

我有一个程序可以动态创建带有按钮的选项卡,当用户单击按钮时,我希望它给我button_id(与选项卡索引相对应的数字)。

我知道您可以执行tabwidget.currentIndex()之类的操作来获取正在使用的选项卡的索引,但是我不希望那样,因为我最终将拥有一种遍历选项卡数量并访问每个按钮而无需选择如下所示的标签。

Subscript

例如:

如果用户单击“制表2”上的“清除文本”按钮,那么我希望它给我2号。

如何在不使用标签的currentIndex()方法的情况下完成此操作

测试代码:

Superscript

1 个答案:

答案 0 :(得分:2)

尝试一下:

import sys
from PyQt5 import QtCore, QtWidgets

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

        self.parent = parent                                                 # +
        self.button_id = 0                                                   # +

        group = QtWidgets.QGroupBox('Monty Python')
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(group)
        grid = QtWidgets.QGridLayout(group)
        testbutton = QtWidgets.QPushButton('Clear Text')
        grid.addWidget(testbutton, 2, 2)

        testbutton.clicked.connect(self.tab_match)
        self.parent.currentChanged.connect(self.qtabwidget_currentchanged)   # +

    def tab_match(self): 
        #Do something with button ID here
        print("\ndef tab_match: button_id-> {}".format(self.button_id))      # +

    @QtCore.pyqtSlot(int)
    def qtabwidget_currentchanged(self, index):                              # +
        self.button_id = index 


class Window(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.tabs = QtWidgets.QTabWidget()
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(self.tabs)
        button = QtWidgets.QToolButton()
        button.setToolTip('Add New Tab')
        button.clicked.connect(self.addNewTab)
        button.setIcon(self.style().standardIcon(
            QtWidgets.QStyle.SP_DialogYesButton))
        self.tabs.setCornerWidget(button, QtCore.Qt.TopRightCorner)

        self.button_id = 0
        self.addNewTab()

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


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = Window()
    window.setGeometry(600, 100, 300, 200)
    window.show()
    sys.exit(app.exec_())

enter image description here