前言:我正在PyQt5中开发一个flashcard应用程序,我试图让一个“Enter”按钮执行一个操作,通过调用一个函数(其中一个来自文本编辑框,另一个来自我预先编码的字符串列表)来比较两个字符串。其次,我希望它通过调用checkanswer()函数将比较显示为“对还是错”,但是当我按下按钮并试图让它调用另一个函数时,它会重复checkanswer()的相同行为。。即使我试图调用nextcard()[在print(“correct”)的情况下]
这就引出了我的问题:每个QPushButton只能执行一个操作吗?我希望它在进入下一个单词之前通知用户(或者强制他们输入正确的答案)。实际上,我需要一个按钮在不同的时间调用checkanswer()函数和nextword()方法。在
这是我主窗口的代码。。如果你需要更多的信息,请告诉我,我会在这里补充。在
class MainWindow(QtWidgets.QMainWindow):
textvalue = ""
cardnum = 0 # intialize card number from 0
def __init__(self):
super().__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.pushButtonEnter.clicked.connect(self.checkanswer)
self.show()
def checkanswer(self):
textvalue = self.ui.lineEditAnswer.text()
print("You entered: " + textvalue + " $? " + deck[self.cardnum].deflist[0])
if textvalue == deck[self.cardnum].deflist[0]:
print("Correct!")
self.ui.lineEditAnswer.clear()
textvalue = ""
self.ui.labelVocab.setText("Correct!\n " + deck[self.cardnum].deflist[0])
self.ui.pushButtonEnter.setText("Continue")
self.ui.pushButtonEnter.clicked.connect(self.nextword)
else:
print("Incorrect!")
print(self.cardnum)
self.ui.lineEditAnswer.clear()
self.ui.labelVocab.setText("Oops! Correct answer is: " + deck[self.cardnum].deflist[0])
def nextword(self):
self.cardnum += 1
self.ui.lineEditAnswer.clear()
self.ui.pushButtonEnter.setText("Enter")
self.ui.labelVocab.setText(deck[self.cardnum].vocab)
self.ui.pushButtonEnter.clicked.connect(self.checkanswer)
if __name__ == "__main__":
deck = parser.parser()
app = QApplication(sys.argv)
win = MainWindow()
win.show()
win.ui.labelVocab.setText(deck[MainWindow.cardnum].vocab)
sys.exit(app.exec_())
首先是介绍
Signals & Slots
我强烈建议你读。在
在中间的某个地方,你会发现以下段落:
我必须承认,我不知道单曲
disconnect()
。通常,我存储信号处理程序的连接,当我打算以后断开连接时,connect()
会返回这个连接。此外,Qt还允许通过connect()
中给出的相同参数断开处理程序,但我从未使用过这种方法。在这里是我的小Python摆弄示例:
信号处理程序}互相连接,互斥。在
onBtn1Clicked()
和{在Windows 10上的cygwin64中测试:
^{pr2}$关于一个信号处理程序的多个调用,我建议如下:注释两个处理程序中的
qBtn1.clicked.disconnect()
行并查看发生了什么(在控制台上)。在正如注释中指出的那样,您可以调用
pushButton.disconnect()
方法,然后将clicked
连接到另一个操作。 我是这样修改代码的:self.ui.pushButtonEnter.disconnect() self.ui.pushButtonEnter.clicked.connect(self.checkanswer)
相关问题 更多 >
编程相关推荐