PyQt:获取调用特定功能的按钮
PyQt: Getting which button called a specific function
我用PyQt做了一个多页面应用,一般是问答游戏。
所以现在每当用户出错或正确回答问题时,它都会调用 correct/incorrect 函数。
不正确的答案函数:
def incorrect(self):
self.pic3.hide()
self.que1.hide()
self.answ.hide()
self.answ1.hide()
self.answ2.hide()
self.pic4.setGeometry(0, 0, 1280, 800)
self.pic4.show()
self.goback.show()
self.cont = QtGui.QPushButton(self)
self.cont.setObjectName('cont')
self.cont.setStyleSheet("#cont {background-image: url(':/images/Continue.png'); border: none; }"
"#cont:hover { background-image: url(':/images/Continue1.png'); }"
"#cont:pressed { background-image: url(':/images/Continue2.png'); }")
self.cont.setGeometry(980, 610, 300, 300)
self.cont.clicked.connect(self.question2)
self.cont.show()
self.heart2.hide()
#self.heart1.hide()
if ( self.heart2.isHidden() and self.heart1.isHidden() ):
gameover()
else:
pass
所以我要在这个函数中制作多个 "cont" 小部件,这样做的目的是因为我希望它继续解决特定问题(如果用户在 问题 1 中失败或成功,应该继续问题2).
但是为此,应该有一个代码来确定是否从 button1 或 button2 调用了不正确的答案功能,两个按钮都连接单击时到同一插槽,如果从 button1 调用它,它将显示连续按钮,单击时显示 question2 小部件(问题 2 页面)。
但是如果它从button2调用,它会显示cont2 pushbutton,点击时会显示问题3页面。
代码应该是这样的:
if self.connected from button1:
cont.show()
if self.connected from button2:
cont2.show()
else:
pass
图片示例:
假设您的按钮命名为 self.button1
和 self.button2
,您可以使用 partially bound functions:
绑定您的事件处理程序
from functools import partial
self.button1.clicked.connect(partial(self.question, self.button1))
self.button2.clicked.connect(partial(self.question, self.button2))
然后在您的 question
方法中使用另一个参数,即
def question(self, btn):
if btn == self.button1:
# Button 1 was clicked
elif btn == self.button2:
# Button 2 was clicked
使用sender()
函数得到一个发送信号的QObject:
class Example(QMainWindow):
def __init__(self):
super().__init__()
btn1 = QPushButton("Button 1", self)
btn1.clicked.connect(self.buttonClicked) # connect signal to slot
self.setWindowTitle('Event sender')
self.show()
def buttonClicked(self):
sender = self.sender() # This is what you need
self.statusBar().showMessage(sender.text() + ' was pressed')
我用PyQt做了一个多页面应用,一般是问答游戏。
所以现在每当用户出错或正确回答问题时,它都会调用 correct/incorrect 函数。
不正确的答案函数:
def incorrect(self):
self.pic3.hide()
self.que1.hide()
self.answ.hide()
self.answ1.hide()
self.answ2.hide()
self.pic4.setGeometry(0, 0, 1280, 800)
self.pic4.show()
self.goback.show()
self.cont = QtGui.QPushButton(self)
self.cont.setObjectName('cont')
self.cont.setStyleSheet("#cont {background-image: url(':/images/Continue.png'); border: none; }"
"#cont:hover { background-image: url(':/images/Continue1.png'); }"
"#cont:pressed { background-image: url(':/images/Continue2.png'); }")
self.cont.setGeometry(980, 610, 300, 300)
self.cont.clicked.connect(self.question2)
self.cont.show()
self.heart2.hide()
#self.heart1.hide()
if ( self.heart2.isHidden() and self.heart1.isHidden() ):
gameover()
else:
pass
所以我要在这个函数中制作多个 "cont" 小部件,这样做的目的是因为我希望它继续解决特定问题(如果用户在 问题 1 中失败或成功,应该继续问题2).
但是为此,应该有一个代码来确定是否从 button1 或 button2 调用了不正确的答案功能,两个按钮都连接单击时到同一插槽,如果从 button1 调用它,它将显示连续按钮,单击时显示 question2 小部件(问题 2 页面)。
但是如果它从button2调用,它会显示cont2 pushbutton,点击时会显示问题3页面。
代码应该是这样的:
if self.connected from button1:
cont.show()
if self.connected from button2:
cont2.show()
else:
pass
图片示例:
假设您的按钮命名为 self.button1
和 self.button2
,您可以使用 partially bound functions:
from functools import partial
self.button1.clicked.connect(partial(self.question, self.button1))
self.button2.clicked.connect(partial(self.question, self.button2))
然后在您的 question
方法中使用另一个参数,即
def question(self, btn):
if btn == self.button1:
# Button 1 was clicked
elif btn == self.button2:
# Button 2 was clicked
使用sender()
函数得到一个发送信号的QObject:
class Example(QMainWindow):
def __init__(self):
super().__init__()
btn1 = QPushButton("Button 1", self)
btn1.clicked.connect(self.buttonClicked) # connect signal to slot
self.setWindowTitle('Event sender')
self.show()
def buttonClicked(self):
sender = self.sender() # This is what you need
self.statusBar().showMessage(sender.text() + ' was pressed')