gpt4 book ai didi

python - 通过连接传递额外的参数

转载 作者:太空宇宙 更新时间:2023-11-03 14:04:32 25 4
gpt4 key购买 nike

是否可以通过插槽传递变量以便我可以打印出某些文本?尝试将在另一个函数中定义的变量“DiffP”传递给插槽。

“DiffP”根据选择的文件而变化。

def addLineEdit(self):
try:
self.clearLayout()
self.FileButton ={}
self.Input = {}
self.TotalInput = []
for i in range(int(self.numberLine.text())):
self.FileButton[i] = QtWidgets.QPushButton(self.centralwidget)
self.FileButton[i].setText('Case {}'.format(i+1))
self.FileButton[i].setFlat(True)
self.FileButton[i].setMaximumSize(QtCore.QSize(50, 50))
self.hboxlayout[0].addWidget(self.FileButton[i])
self.FileButton[i].clicked.connect(lambda i=i: self.openfile(i))
self.buttonGroup.addButton(self.FileButton[i],i)
self.buttonGroup.buttonClicked['int'].connect(self.input)

def searchfile(self,dir):
with open(dir) as f:
content = f.readlines()
MainList = content[44].split()
RPM = round(float(MainList[0]), 2)
Ps = round(float(MainList[1]), 2)
Ts = round(float(MainList[2]), 2)
Pd = round(float(MainList[3]), 2)
Ratio = round(Pd / Ps, 2)
DiffP = round(Pd - Ps, 2)
@pyqtSlot(int)
def input(self,button_or_id,DiffP):
if isinstance(button_or_id, int):
if button_or_id == 0:
self.TotalInput[0].setText(str(DiffP))
elif button_or_id == 1:
self.TotalInput[54].setText('1')

def openfile(self,i):
filename = QtWidgets.QFileDialog.getOpenFileName(self, 'Choose file')
dir = filename[0]
directory = os.path.split(dir)[0]
return self.searchfile(dir)

最佳答案

问题可以通过两种方式解决:

使用 lambda 函数:

一般来说:

    obj.signal.connect(lambda param1, param2, ..., arg1=val1, arg2= value2, ... : fun(param1, param2,... , arg1, arg2, ....))

def fun(param1, param2,... , arg1, arg2, ....):
[...]

哪里:

  • param1, param2, ... : 是信号发送的参数
  • arg1, arg2, ...: 是你想要花费的额外参数

在你的情况下:

    self.buttonGroup.buttonClicked['int'].connect(lambda i: self.input(i, "text"))

@pyqtSlot(int)
def input(self, button_or_id, DiffP):
if isinstance(button_or_id, int):
if button_or_id == 0:
self.TotalInput[0].setText(DiffP)
elif button_or_id == 1:
self.TotalInput[54].setText('1')

使用functools.partial:

一般来说:

    obj.signal.connect(partial(fun, args1, arg2, ... ))

def fun(arg1, arg2, ..., param1, param2, ...):
[...]

哪里:

  • param1, param2, ... : 是信号发送的参数
  • arg1, arg2, ...: 是您要发送的额外参数

在你的情况下:

from functools import partial

[...]
self.buttonGroup.buttonClicked['int'].connect(partial(self.input, "text"))


@pyqtSlot(int)
def input(self, DiffP, button_or_id):
if isinstance(button_or_id, int):
if button_or_id == 0:
self.TotalInput[0].setText(DiffP)
elif button_or_id == 1:
self.TotalInput[54].setText('1')

关于python - 通过连接传递额外的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45090982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com