Форум сайта python.su
0
Добрый день!
Помогите разобраться новичку. Я хочу написать простой скрипт с графическим интерфейсом на PyQt4. Есть 4 кнопки на форме, при нажатии на кнопку вызываем соответствующий print.
Нужно реализовать функции btn_blink и btn_2xblink таким образом, чтобы при нажатии на кнопку btn_blink в консоль БЕСКОНЕЧНО выводились сообщения print(“BLINK”) и print(“PAUSE”) с задержкой в 1 секунду, до тех пор пока не будет нажата любая другая кнопка. Аналогично и для btn_2xblink.
Собственно не пойму как реализовать бесконечный вывод, если использовать цикл While(1), то программа не реагирует на другие кнопки и просто зависает. Нужно использовать многопоточность? Или есть другое решение?
Мой код:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QVBoxLayout)
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt
import time
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
btn_on = QPushButton("ON", self)
btn_on.setToolTip("Turn LEDs on")
btn_on.setMinimumSize(120, 40)
btn_on.clicked.connect(self.btn_on_pressed)
btn_off = QPushButton("OFF", self)
btn_off.setToolTip("Turn LEDs off")
btn_off.setMinimumSize(120, 40)
btn_off.clicked.connect(self.btn_off_pressed)
btn_blink = QPushButton("Blink", self)
btn_blink.setToolTip("Blink LEDs")
btn_blink.setMinimumSize(120, 40)
btn_blink.clicked.connect(self.btn_blink_pressed)
btn_2xblink = QPushButton("2xBlink", self)
btn_2xblink.setToolTip("Blink LEDs with double speed")
btn_2xblink.setMinimumSize(120, 40)
btn_2xblink.clicked.connect(self.btn_2xblink_pressed)
vbox = QVBoxLayout()
vbox.addWidget(btn_on)
vbox.addWidget(btn_off)
vbox.addWidget(btn_blink)
vbox.addWidget(btn_2xblink)
vbox.setAlignment(Qt.AlignHCenter)
self.setLayout(vbox)
self.setGeometry(300, 300, 200, 200)
self.setFixedSize(200, 200)
self.setWindowTitle('RPi LEDs')
self.setWindowIcon(QIcon('python.png'))
self.show()
def btn_on_pressed(self):
print("1")
def btn_blink_pressed(self):
while(1):
print("2")
time.sleep(1)
print("PAUSE")
time.sleep(1)
def btn_2xblink_pressed(self):
print("3")
def btn_off_pressed(self):
print("0")
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Офлайн
186
> Нужно использовать многопоточность? Или есть другое решение?
При задержке в 1с только потоки. Вот пример как их сделать:
http://python.su/forum/topic/24662/?page=2#post-130903
Офлайн