【发布时间】:2017-11-07 19:28:09
【问题描述】:
我正在尝试构建一个小的 PyQt5 应用程序,它将为我在文件目录上做一些工作。我需要构建一个 QGridLayout 来保存按钮。自然,内容可能会发生变化,所以我通过循环简单对象列表(路径、文件名等)来构建按钮。
我的问题是:当按钮的“on_click”操作是从循环构建时,我如何从按钮的“on_click”操作中传递识别参数?我不太关心点击返回的内容 - 我可以通过一种或另一种方式找到匹配的文件对象。
这是我的代码:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QGroupBox, QDialog, QVBoxLayout, \
QGridLayout
from PyQt5.QtCore import pyqtSlot
from DirListing import Listing
class App(QDialog):
def __init__(self):
super().__init__()
self.title = 'Grid Test'
self.left = 10
self.top = 10
self.width = 320
self.height = 500
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
self.createGridLayout()
windowLayout = QVBoxLayout()
windowLayout.addWidget(self.horizontalGroupBox)
self.setLayout(windowLayout)
self.show()
def createGridLayout(self):
self.horizontalGroupBox = QGroupBox("Grid")
layout = QGridLayout()
counter = 0
for obj in Listing:
button = QPushButton(obj.filename)
button.clicked.connect(self.on_click)
layout.addWidget(button, counter, 0)
counter = counter + 1
self.horizontalGroupBox.setLayout(layout)
@pyqtSlot()
def on_click(self):
print("Halp!")
def lower(self):
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())
有趣的部分只是以“for obj in Listing”开头的小循环——这是我的文件对象循环。我使用一个简单的计数器在 GridLayout 中为每个按钮向下移动一行。但我不知道如何将唯一参数从 click 函数中传递出去。
【问题讨论】:
-
你能不能更好地解释一下,你想给on_click传递一个新参数吗?
-
我想传递一个参数来标识链接到按钮的对象。按钮上的显示名称是文件名。我想要一个参数,上面写着“用户单击了名称为
的按钮”(或类似的名称。)然后我会知道要继续使用哪个文件对象。也许我把这弄得太复杂了。
标签: python python-3.x pyqt pyqt5