我有一个密码的代码,并在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()
答案 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))