在按钮cli上设置文本框的文本

2024-04-27 04:49:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个密码的代码,并在PyQt中为它设计了一个GUI,现在正试图集成这两个密码,但我遇到了麻烦。在

我希望能够按下generatekey按钮,然后运行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()

Tags: keyimportself密码maindefsysgui
1条回答
网友
1楼 · 发布于 2024-04-27 04:49:30

您的问题是您的generateKey方法缺少自变量,然后错误地返回键值,而不是用setText赋值。在

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

在Python中,对对象(如self.generateKey())的方法的调用被转换为类似于generateKey(self)的调用。self这里只是一个任意的名称(self按惯例使用)。这是一种将方法与调用它的对象相关联的机制。然后,在方法体中,名称self在作用域内,并绑定到对象实例,因为在Python中使用它需要它。在

所以你应该有这样的东西:

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

相关问题 更多 >