从编程构建的按钮传递参数

时间:2017-11-07 19:28:10

标签: python python-3.x pyqt pyqt5

我正在尝试构建一个小的PyQt5应用程序,它将在我的文件目录上做一些工作。我需要构建一个QGridLayout来保存按钮。当然,内容可能会发生变化,所以我通过循环遍历简单对象列表(路径,文件名等)来构建按钮。

我的问题是:如何从循环中构建按钮的“on_click”操作时传递一个识别参数?我不太关心从点击返回的内容 - 我可以通过这种或那种方式找到匹配的文件对象。

这是我的代码:

$signString = 'Signtool.exe sign /f MyCert.pfx /d "My Product Name" /du "http://www.example.com/my_product/info.html" MyControl.exe'
& $signString

有趣的部分只是以“for obj in Listing”开头的小循环 - 这是我的文件对象循环。我使用一个简单的计数器在每个按钮的GridLayout中向下一行。但我无法弄清楚如何从点击功能中传递一个唯一的参数。

1 个答案:

答案 0 :(得分:0)

有几种方法可以执行此任务,我将列出一些:

  1. 使用services.AddMvc(options => { options.Filters.Add(new SwaggerIgnore(new[] { "delete", "post", "put" })); }); 这是一个函数,它返回发出信号的对象和窗口小部件的某些属性,在sender()的情况下,您可以使用显示的文本
  2. QPushButton
    1. 使用class Widget(QWidget): def __init__(self, *args, **kwargs): QWidget.__init__(self, *args, **kwargs) self.setLayout(QVBoxLayout()) for i in range(10): button = QPushButton("{}".format(i), self) self.layout().addWidget(button) button.clicked.connect(self.on_click) @pyqtSlot() def on_click(self): print("button-{}".format(self.sender().text())) 为每个窗口小部件指定一个特定名称
    2. objectName()
      1. 使用lambda函数
      2. class Widget(QWidget):
            def __init__(self, *args, **kwargs):
                QWidget.__init__(self, *args, **kwargs)
                self.setLayout(QVBoxLayout())
                for i in range(10):
                    button = QPushButton("{}".format(i), self)
                    self.layout().addWidget(button)
                    button.setObjectName("button-{}".format(i))
                    button.clicked.connect(self.on_click)
        
            @pyqtSlot()
            def on_click(self):
                print(self.sender().objectName())
        
        1. 对于按钮,您可以使用class Widget(QWidget): def __init__(self, *args, **kwargs): QWidget.__init__(self, *args, **kwargs) self.setLayout(QVBoxLayout()) for i in range(10): button = QPushButton("{}".format(i), self) self.layout().addWidget(button) button.clicked.connect(lambda checked, i=i: self.on_click(i)) def on_click(self, i): print("button-{}".format(i))
        2. QButtonGroup
          1. 使用class Widget(QWidget): def __init__(self, *args, **kwargs): QWidget.__init__(self, *args, **kwargs) self.setLayout(QVBoxLayout()) group = QButtonGroup(self) for i in range(10): button = QPushButton("{}".format(i), self) self.layout().addWidget(button) group.addButton(button, i) group.buttonClicked[int].connect(self.on_click) group.buttonClicked.connect(self.on_click2) @pyqtSlot(int) def on_click(self, i): print("button-{}".format(i)) def on_click2(self, btn): print("2button-{}".format(btn.text()))
          2. functools.partial