我如何让按钮执行直到我释放它?
How do i make a button to execute untill i release it?
在 PyQt4 中,当我按下按钮直到松开按钮时,我遇到了让按钮连续执行的问题。
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class Form(QDialog):
def __init__(self, parent=None):
super(Form, self).__init__(parent)
layout = QVBoxLayout()
self.pushButton = QPushButton("Button1")
self.pushButton.setCheckable(True)
self.pushButton.toggle()
self.pushButton.clicked.connect(lambda:self.whichbtn(self.b1))
self.pushButton.clicked.connect(self.btnstate)
layout.addWidget(self.pushButton)
def btnstate(self):
if self.pushButton.isChecked():
print "button pressed"
else:
print "button released"
def main():
app = QApplication(sys.argv)
ex = Form()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
单击按钮时,它应该连续打印语句而不是打印一次,直到我松开按钮。
一种方法是使用 Processes,您 运行 通过创建 Process
在其他进程中的作业。然后你使用 .terminate()
.
停止它
此外,在您的原始代码中您错过了 self.setLayout(layout)
,如果不添加布局,您应该看不到 QDialog
中的任何内容。
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from multiprocessing import Process
from time import sleep
class Form(QDialog):
def __init__(self, parent=None):
super(Form, self).__init__(parent)
self.process = None
layout = QVBoxLayout()
self.pushButton = QPushButton("Start/Stop")
self.pushButton.setCheckable(True)
self.pushButton.clicked.connect(self.btnstate)
layout.addWidget(self.pushButton)
self.setLayout(layout)
def btnstate(self):
if self.pushButton.isChecked():
self.start_execution()
else:
self.stop_execution()
def do_work(self):
while True:
print "Working..."
sleep(0.5)
def start_execution(self):
self.process = Process(target=self.do_work)
self.process.start()
def stop_execution(self):
if self.process is not None:
self.process.terminate()
def main():
app = QApplication(sys.argv)
ex = Form()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
尝试使用此功能
self.pushButton.pressed.connect(self.b1)
self.pushButton.released.connect(self.release)
def release(self):
print("stopped")
def b1(self):
print("button Clicked")
在 PyQt4 中,当我按下按钮直到松开按钮时,我遇到了让按钮连续执行的问题。
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class Form(QDialog):
def __init__(self, parent=None):
super(Form, self).__init__(parent)
layout = QVBoxLayout()
self.pushButton = QPushButton("Button1")
self.pushButton.setCheckable(True)
self.pushButton.toggle()
self.pushButton.clicked.connect(lambda:self.whichbtn(self.b1))
self.pushButton.clicked.connect(self.btnstate)
layout.addWidget(self.pushButton)
def btnstate(self):
if self.pushButton.isChecked():
print "button pressed"
else:
print "button released"
def main():
app = QApplication(sys.argv)
ex = Form()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
单击按钮时,它应该连续打印语句而不是打印一次,直到我松开按钮。
一种方法是使用 Processes,您 运行 通过创建 Process
在其他进程中的作业。然后你使用 .terminate()
.
此外,在您的原始代码中您错过了 self.setLayout(layout)
,如果不添加布局,您应该看不到 QDialog
中的任何内容。
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from multiprocessing import Process
from time import sleep
class Form(QDialog):
def __init__(self, parent=None):
super(Form, self).__init__(parent)
self.process = None
layout = QVBoxLayout()
self.pushButton = QPushButton("Start/Stop")
self.pushButton.setCheckable(True)
self.pushButton.clicked.connect(self.btnstate)
layout.addWidget(self.pushButton)
self.setLayout(layout)
def btnstate(self):
if self.pushButton.isChecked():
self.start_execution()
else:
self.stop_execution()
def do_work(self):
while True:
print "Working..."
sleep(0.5)
def start_execution(self):
self.process = Process(target=self.do_work)
self.process.start()
def stop_execution(self):
if self.process is not None:
self.process.terminate()
def main():
app = QApplication(sys.argv)
ex = Form()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
尝试使用此功能
self.pushButton.pressed.connect(self.b1)
self.pushButton.released.connect(self.release)
def release(self):
print("stopped")
def b1(self):
print("button Clicked")