在按钮单击上设置文本框的文本

时间:2015-08-03 21:04:41

标签: python qt

我有一个密码的代码,并在PyQt中为它设计了一个GUI,现在我正在尝试整合这两个,但我已经卡住了。

我希望能够按下Generate Key按钮,然后运行我拥有的generatekey功能,并将其显示在按钮左侧的文本框中。我试过.setText()但无法让它工作。文本框的对象名称是 keytext 。不知道该怎么做,当我按下按钮时它就会崩溃。

from PyQt5 import QtCore, QtGui, QtWidgets
import sys, random
import cipher ## Designed GUI

LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

class CipherDesign(QtWidgets.QMainWindow, cipher.Ui_MainWindow):
    def __init__(self, parent=None):
        super(CipherDesign, self).__init__(parent)
        self.setupUi(self)
        self.BGenerate.clicked.connect(self.generatekey) # Generate Button

    def generatekey():
        key = list(LETTERS)
        random.shuffle(key)
        return ''.join(key)

def main():
    app = QtWidgets.QApplication(sys.argv)
    form = CipherDesign()
    form.show()
    app.exec_()


if __name__ == "__main__":
    main()

1 个答案:

答案 0 :(得分:0)

您的问题是,您的generateKey方法缺少自我参数,然后不恰当地返回键值,而不是使用setText赋值。

在普通Python中,省略self参数只会在调用self.generateKey()时给出“参数个数”错误。但是在这里它被PyQT调用,这有点意外地导致了崩溃。

在Python中,对对象上的方法(如self.generateKey())的调用将转换为类似generateKey(self)的调用。 self这里只是一个任意名称(常规使用self)。这是该方法与调用它的对象相关联的机制。然后,在方法的主体中,名称self在范围内并绑定到对象实例,因为您需要在Python中使用它。

所以你应该有类似的东西:

def generatekey(self):
    key = list(LETTERS)
    random.shuffle(key)
    self.TextBoxObject.setText(''.join(key))
相关问题