PyQt:获取一个称为特定函数的按钮

时间:2016-04-24 13:34:45

标签: python pyqt pyqt4

我在PyQt中创建了一个多页面应用程序,通常是一个测验游戏。

所以现在每当用户出错或正确回答问题时,它都会调用正确/错误的功能。

答案功能不正确:

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按钮,点击后会显示问题3页面。

在代码中看起来应该是这样的:

if self.connected from button1:
   cont.show()
if self.connected from button2:
   cont2.show()
else:
    pass

图片示例:

enter image description here

2 个答案:

答案 0 :(得分:4)

使用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')

答案 1 :(得分:2)

假设您的按钮名为self.button1self.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