关于button.clicked.connect的pyqt5

时间:2017-09-30 21:40:52

标签: python pyqt pyqt5

所有

当我点击mk_btn金额为cnt时,我只想留空。所以我使用self.resultTable.setRowCount(cnt)然后如果我cliked cs_btn,我想使用名称为get_in的函数。 get_in需要cnt。 但self.cs_btn.clicked.connect(self.get_in(cnt))不接受cnt。 我该如何解决?

请帮帮我。

class MyWindow(QMainWindow, form_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.kiwoom = Kiwoom()
        self.kiwoom.commConnect()
        self.mk_btn.clicked.connect(self.makelist)
        self.cs_btn.clicked.connect(self.get_in(cnt))


    def makelist(self):
        self.kiwoom.getConditionLoad()
        self.kiwoom.sendCondition("0154", self.kiwoom.condition[0], 0, 1)
        cnt = len(self.kiwoom.cl)
        self.resultTable.setRowCount(cnt)
        return cnt

    def get_in(self, cnt):
        print(cnt)
        for i in range(cnt):
            self.kiwoom.dynamicCall("SetInputValue(QString, QString)", "종목코드", self.kiwoom.cl[i])
            self.kiwoom.dynamicCall("CommRqData(QString, QString, int, QString)", "주식기본정보요청", "opt10001", 0, "0101")
            print(self.kiwoom.name2)
            """
            self.resultTable.setItem(i, 0, QTableWidgetItem(self.kiwoom.cl[i]))
            self.resultTable.setItem(i, 1, QTableWidgetItem(self.kiwoom.name2))
            self.resultTable.setItem(i, 3, QTableWidgetItem(self.kiwoom.per2))
            self.resultTable.setItem(i, 4, QTableWidgetItem(self.kiwoom.pbr2))
            """
            time.sleep(0.5)

1 个答案:

答案 0 :(得分:1)

变量cnt是本地的,因此它只存在于该上下文中,如果您希望能够被另一个方法访问,则必须创建存储该信息的类的成员,因为它的存在一直持续到对象被释放。在你的情况下:

class MyWindow(QMainWindow, form_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.cnt = 0
        self.kiwoom = Kiwoom()
        self.kiwoom.commConnect()
        self.mk_btn.clicked.connect(self.makelist)
        self.cs_btn.clicked.connect(self.get_in)


    def makelist(self):
        self.kiwoom.getConditionLoad()
        self.kiwoom.sendCondition("0154", self.kiwoom.condition[0], 0, 1)
        self.cnt = len(self.kiwoom.cl)
        self.resultTable.setRowCount(self.cnt)

    def get_in(sel):
        print(self.cnt)
        for i in range(self.cnt):
            [...]