2017-01-26 2 views
1

プッシュボタンを接続するときに問題があります。私は別の方法を試みたが、私は到着しない。時には、私のGUIがバッファに保管されていないことがあります。 Qt.ConnectionTypeが期待通りに出力されていますが、 'メソッド'ではありません または引数1に予期しないタイプの 'NoneType'がありますpyQt5 dictからプッシュボタンを作成する追加値を持つ関数に接続

このスクリプトはWebからファイルをダウンロードします。ダウンロード(自己)では、私のコードがあるかどうか試してみるために、もっと多くの行がコメントアウトされています。

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) 

あなたがそのスロットに信号を接続すると、あなたはそれを評価された関数が、関数の名前だけを渡すべきではありませんお時間を

+0

python2またはpython3?完全なコードを表示してください。 – eyllanesc

+0

申し訳ありませんが、これはPythonの3.6 で、これはすべてのコード で欠けているものを、あまりにも、本当に長いですか、PyQt5輸入QtCore、QtGui、 インポート要求 とdictのurllib.request QtWidgets 輸入のsys の#importから ですお返事が遅く – jiep

答えて

1

をお願いします。 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_()) 
+0

ありがとうございました、あなたの時間と答えは です。 私は理解しているとは確信していませんが、今私は にしようとするつもりですこれにスレッドを追加しようとするつもりです。 – jiep

関連する問題