Python pyQt5从dict connect创建按钮到具有附加值的函数
我的按钮连接有问题。我试过不同的方法,但没有达到目的。有时我的GUI没有显示,存储在缓冲区中。 有时我的输出是预期的Qt.ConnectionType,而不是“method” 或参数1具有意外的类型“NoneType” 此脚本用于从web下载文件。在下载(self)中,更多的行被注释掉,只是为了尝试一下我的代码Python pyQt5从dict connect创建按钮到具有附加值的函数,python,python-3.x,pyqt,pyqt5,Python,Python 3.x,Pyqt,Pyqt5,我的按钮连接有问题。我试过不同的方法,但没有达到目的。有时我的GUI没有显示,存储在缓冲区中。 有时我的输出是预期的Qt.ConnectionType,而不是“method” 或参数1具有意外的类型“NoneType” 此脚本用于从web下载文件。在下载(self)中,更多的行被注释掉,只是为了尝试一下我的代码 class Ui_Qwid(object): def setupUi(self, Qwid): Qwid.setObjectName("Qwid")
class Ui_Qwid(object):
def setupUi(self, Qwid):
Qwid.setObjectName("Qwid")
Qwid.resize(423, 795)
Qwid.setWindowTitle("Softs de secours")
self.gridLayoutWidget = QtWidgets.QWidget(Qwid)
self.gridLayoutWidget.setGeometry(QtCore.QRect(-1, 9, 431, 791))
self.gridLayoutWidget.setObjectName("gridLayoutWidget")
self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setObjectName("gridLayout")
for key,val in les_soft.items():
self.btn = QtWidgets.QPushButton(key)
self.gridLayout.addWidget(self.btn)
self.btn.clicked.connect(self.download(key))
def download(self,key):
print("on passe par la")
urllib.request.urlretrieve(les_soft[key],key+".exe")
local_filename = key
url = les_soft[key]
# NOTE the stream=True parameter
r = requests.get(url, stream=True)
with open(local_filename, 'wb') as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
感谢您抽出时间当您将信号连接到其插槽时,您不应向其传递所评估的函数,而应仅传递函数的名称。我还建议连接在从QWidget、QMainWindow等继承的类环境中 这个例子我不能完全重现,但如果我能概括它,那么就创建一个模拟数据的字典 要获得所需的密钥,我们使用对象作为源,并使用函数
text()
来获得它
sender()
函数获取生成信号的对象,在本例中是您按下的按钮
import sys
from PyQt5 import QtCore
from PyQt5 import QtWidgets
class Ui_Qwid(object):
def setupUi(self, Qwid):
Qwid.setObjectName("Qwid")
Qwid.resize(423, 795)
Qwid.setWindowTitle("Softs de secours")
self.gridLayoutWidget = QtWidgets.QWidget(Qwid)
self.gridLayoutWidget.setGeometry(QtCore.QRect(-1, 9, 431, 791))
self.gridLayoutWidget.setObjectName("gridLayoutWidget")
self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setObjectName("gridLayout")
class Widget(QtWidgets.QWidget, Ui_Qwid):
def __init__(self, parent=None):
super(Widget, self).__init__(parent=parent)
self.setupUi(self)
self.les_soft = {'key1': 'url1', 'key2': 'url2', 'key3': 'url3', 'key4': 'url4',
'key5': 'key5', 'key6': 'url6', 'key7': 'url7', 'key8': 'url8'}
for key, val in self.les_soft.items():
self.btn = QtWidgets.QPushButton(key)
self.gridLayout.addWidget(self.btn)
self.btn.clicked.connect(self.download)
def download(self):
key = self.sender().text()
print(key)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
蟒蛇2还是蟒蛇3?请显示完整的代码。抱歉,这是python 3.6。这是所有缺少的代码,来自PyQt5导入QtCore、QtGui、QtWidgets导入sys 35; import urllib.request导入请求和dict,实际有多长,太长,无法回复感谢您,感谢您的时间,还有答案。我不确定是否理解,但我会继续尝试,现在我会尝试添加线程。