Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 25, 2015 09:43:46

nanotroll
Зарегистрирован: 2015-10-25
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Бесконечный цикл и PyQt4

Добрый день!
Помогите разобраться новичку. Я хочу написать простой скрипт с графическим интерфейсом на 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_())

Офлайн

#2 Окт. 25, 2015 13:38:08

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

Бесконечный цикл и PyQt4

> Нужно использовать многопоточность? Или есть другое решение?

При задержке в 1с только потоки. Вот пример как их сделать:
http://python.su/forum/topic/24662/?page=2#post-130903



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version