Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pyqt5中按下按钮是否有时间限制?_Python_Pyqt_Pyqt5 - Fatal编程技术网

Python 在pyqt5中按下按钮是否有时间限制?

Python 在pyqt5中按下按钮是否有时间限制?,python,pyqt,pyqt5,Python,Pyqt,Pyqt5,我在做一个游戏,通过回答问题来扩散炸弹。有没有办法等待用户在特定时间按下按钮?当特定时间用完时,按钮将被禁用。感谢您的回答:)您必须使用QTimer来实现逻辑: from PyQt5 import QtCore, QtWidgets from functools import partial class Widget(QtWidgets.QWidget): def __init__(self, parent=None): super(Widget, self).__in

我在做一个游戏,通过回答问题来扩散炸弹。有没有办法等待用户在特定时间按下按钮?当特定时间用完时,按钮将被禁用。感谢您的回答:)

您必须使用QTimer来实现逻辑:

from PyQt5 import QtCore, QtWidgets
from functools import partial

class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)
        button = QtWidgets.QPushButton(
            text='Start Game',
            clicked=self.on_start_game_clicked
        )
        self.game_button = QtWidgets.QPushButton(
            text='Press me',
            clicked=self.on_game_clicked
        )
        self.time_label = QtWidgets.QLabel(alignment=QtCore.Qt.AlignCenter)

        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(button)
        lay.addWidget(self.game_button)
        lay.addWidget(self.time_label)

        self.timer = QtCore.QTimer(self, 
            interval=5000, # time in ms
            timeout=partial(self.game_button.setDisabled, True),
            singleShot=True
        )
        self.time_timer = QtCore.QTimer(self,
            interval=100,
            timeout=self.update_label
        )

    @QtCore.pyqtSlot()
    def on_start_game_clicked(self):
        if not self.timer.isActive():
            self.timer.start()
            self.time_timer.start()
            self.game_button.setEnabled(True)

    @QtCore.pyqtSlot()
    def update_label(self):
        if self.timer.remainingTime() >= 0:
            self.time_label.setText('{0:.2f} ms'.format(self.timer.remainingTime()*0.001))
        else:
            self.time_label.setText('0 ms')

    @QtCore.pyqtSlot()
    def on_game_clicked(self):
        print("clicked")


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())