LINUX.ORG.RU

Делаю калькулятор. Как реализовать, чтобы считало не когда нажимаю на button, а во процессе ввода?

 , , ,


1

1

Вот шаблон, кому интересно:

import sys
from PyQt4 import QtGui



class Program(QtGui.QWidget):
    
    def __init__(self):
        super(Program, self).__init__()
        
        
        self.main()
        self.labels()
        self.text()
      
    def main(self):                   
        self.setWindowTitle('Mini Calculator')
        self.setFixedSize(235,100)
        
    def labels(self):       
        lbl = QtGui.QLabel('+', self)
        lbl.move(87.5, 35)
        
        lbl2 = QtGui.QLabel('=', self)
        lbl2.move(137.5, 35)
    
    def text(self):
        a = QtGui.QLineEdit(self)
        a.setGeometry(50, 35, 25, 25)
        
        b = QtGui.QLineEdit(self)
        b.setGeometry(105, 35, 25, 25)
        
        c = QtGui.QLineEdit(self)
        c.setGeometry(150, 35, 25, 25)

        
        self.show()
        

app = QtGui.QApplication(sys.argv)
program = Program()
sys.exit(app.exec_())
Собственно, с кнопками я разобрался, там ничего сложного. А как сделать так, чтобы результат выводился мгновенно в процессе набора?

Есть идея вызвать системные часы и, например, прогонять 1 цикл на проверку каждые n миллисекунд. Теоретически, нагрузка на процессор должна быть минимальной, но Qt - мощный инструмент, и, мне кажется, это можно реализовать встроенными методами.



Последнее исправление: kramh (всего исправлений: 3)

Есть идея вызвать системные часы и, например, прогонять 1 цикл на проверку каждые n миллисекунд. Теоретически, нагрузка на процессор должна быть минимальной,

:)

но Qt - мощный инструмент, и, мне кажется, это можно реализовать встроенными методами.

Например, повесить на обработку события изменения editbox'а свой мега-парсер...

habamax ★★★
()
Ответ на: комментарий от Deleted

Это как? Дай название метода, что-ли. Или будет круче, если пример сразу скинешь

kramh
() автор топика

У QLineEdit есть сигнал textChanged. Можно приконнектиться к нему и при изменении содержимого высчитывать результат

Flassie
()

Есть замечательная штука — сигналы и слоты. На них Qt и основано. У QLineEdit есть специальные сигналы, которые вызывают наши обработчики-слоты, когда произойдет какое-нибудь действие, такое как ввод символа.

Но школьники не читают книг, даже на русском. Наверное, им гораздо прикольнее тупить часами на элементарнейших задачах, спрашивать об этом на форумах, и изобретать велосипеды.

P.S. Да, ЛОР уже не тот, ни один не послал в гугл или читать мануалы.

CrossFire ★★★★★
()
Последнее исправление: CrossFire (всего исправлений: 3)
Ответ на: комментарий от kramh

Учитывая мощность современных процессоров, разве это будет серьезной нагрузкой?

Аналогии, конечно зло, но тем не менее.

Вот учишься ты в универе, допустим. И стипендия тебе начисляется на карточку ежемесячно, допустим. И ты каждый день, ходишь к банкомату и проверяшь поступили тебе деньги или нет, ведь учитывая, что банкомат у тебя в универе, где ты бываешь каждый день (ты ведь прилежный студент?) — это не серьезная нагрузка.

А можно поступить по другому — подключить смс оповещение о списаниях/начислениях или проверять баланс только в день выдачи стипендии.

habamax ★★★
()

Только ты вынеси расчеты в отдельный поток и пока он не выполнится, новых расчетов не запускай, иначе система загнется.

А у QLineEdit есть сигнал textEdited. Различие с textChanged почитаешь в документации, там все норм описано.

grondek
()
Ответ на: комментарий от kramh

разве это будет серьезной нагрузкой?

Пользователи ноутбуков наведут порчу на весь род до 7-го колена.

Короче, лучше сразу привыкать использовать нормальную архитектуру. То что прокатило для калькулятора может не прокатить для чего-то более серьёзного.

true_admin ★★★★★
()

а теперь переворачиваем начальную задачу с ног на голову:
учитывая что это калькулятор, и промежуточные значения по мере ввода с вероятностью близкой к 100% мало кого интересуют, стоит прикрутить небольшую паузу (~500ms) перед расчетом/показом результата

anTaRes ★★★★
()

Есть идея вызвать системные часы и, например, прогонять 1 цикл на проверку каждые n миллисекунд.

На самом деле очень хороший вариант — стабильный и надежный.

anonymous
()

не слушай никого про «прогонять раз в N миллисекунд». Бред сивой кобылы просто. Есть сигналы изменения формы - присоединись к нему и всё будет хорошо. Пропарсишь, как ты там делаешь. Впрочем, выше тебе уже всё рассказали

zamazan4ik ★★
()

Теоретически, нагрузка на процессор должна быть минимальной

>>> while True: pass

А в этом примере нагрузки вообще никакой нет, можешь сам попробовать проверить.

Virtuos86 ★★★★★
()

прогонять 1 цикл на проверку каждые n миллисекунд. Теоретически, нагрузка на процессор должна быть минимальной

наивная простата.

anonymous
()

А как сделать так, чтобы результат выводился мгновенно в процессе набора?

Зачем? Это же идиотизм. В крайнем случае можно прикрутить промежуточный результат на TAB, типа как автокомплит.

mashina ★★★★★
()
Последнее исправление: mashina (всего исправлений: 1)
Ответ на: комментарий от anonymous

наивная простата.

Простата - это орган такой

Siado ★★★★★
()
Ответ на: комментарий от mashina

У меня в телефоне калькулятор так и делает: считает с каждым символом - удобно! «Вот говорят для идиотов, а мне понравилось» :)

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от Virtuos86

оу, да. действительно) а я почему-то подумал на анонимуса какого-то. Ну тогда пусть ТС не порет чуши дикой) Спасибо за поправку

zamazan4ik ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.