2016-04-05 3 views
0

Я хочу обновить температуру и влажность в этом скрипте.Обновление окна каждые 5 минут в Qt

from PyQt4.QtCore import Qt 
from PyQt4.QtGui import QWidget, QApplication, QSplitter, QLabel, QVBoxLayout, QColor 
import Adafruit_DHT 
import urllib2 
from BeautifulSoup import BeautifulSoup 



sensor_args = { '11': Adafruit_DHT.DHT11, 
       '22': Adafruit_DHT.DHT22, 
       '2302': Adafruit_DHT.AM2302 } 

humidity, temperature = Adafruit_DHT.read_retry(11, 4) 

temp = 'Temp={0:0.1f}* Humidity={1:0.1f}%'.format(temperature, humidity) 

soup = BeautifulSoup(urllib2.urlopen('http://partner.mlb.com/partnerxml/gen/news/rss/bos.xml').read()) 

title = soup.find('item').title 
desc = soup.find('item').description 
url = soup.find('item').guid 


temperature = temperature * 9/5.0 + 32 
class MyWidget(QWidget): 

    def __init__(self, parent = None): 
     super(MyWidget, self).__init__(parent) 

     # create widgets 
     a = QLabel('Humidity:{:0.1f}%'.format(humidity),self) 
     a.setMinimumSize(100, 100) 
     b = QLabel('Temperature:{:0.1f}F'.format(temperature),self) 
     b.setMinimumSize(100, 100) 
     c = QLabel("Redsox News \nTitle: %s\nSummary: %s " % (title.text, desc.text), self)  
     c.setWordWrap(True) 
     c.setMinimumSize(280, 200) 



     d = QLabel("This is some bullshit wordwrap and i cant get it tow work", self) 
     d.setWordWrap(True) 
     d.setMinimumSize(180, 300) 
     for lbl in (a, b, c, d): 
      lbl.setAlignment(Qt.AlignLeft) 

     # create 2 horizontal splitters 
     h_splitter1 = QSplitter(Qt.Horizontal, self) 
     h_splitter1.addWidget(a) 
     h_splitter1.addWidget(b) 


     h_splitter2 = QSplitter(Qt.Horizontal, self) 
     h_splitter2.addWidget(c) 
     h_splitter2.addWidget(d) 

     h_splitter1.splitterMoved.connect(self.moveSplitter) 
     h_splitter2.splitterMoved.connect(self.moveSplitter) 

     self._spltA = h_splitter1 
     self._spltB = h_splitter2 

     # create a vertical splitter 
     v_splitter = QSplitter(Qt.Vertical, self) 
     v_splitter.addWidget(h_splitter1) 
     v_splitter.addWidget(h_splitter2) 

     layout = QVBoxLayout() 
     layout.addWidget(v_splitter) 
     self.setLayout(layout) 

     #color widget code 
     palette = self.palette() 
     role = self.backgroundRole() 
     palette.setColor(role, QColor('black')) 
     self.setPalette(palette) 
     a.setStyleSheet("QLabel {color:yellow}") 
     b.setStyleSheet("QLabel {color:yellow}") 
     c.setStyleSheet("QLabel {background-color: black; color:white}") 
     d.setStyleSheet("QLabel {background-color: black; color:white}") 
     #self.setWindowFlags(Qt.CustomizeWindowHint) 

     timer=self.QTimer() 
     timer.start(5000) 
     timer.timeout.connect(self.temp.update) 

    def moveSplitter(self, index, pos): 
     splt = self._spltA if self.sender() == self._spltB else self._spltB 
     splt.blockSignals(True) 
     #splt.moveSplitter(index, pos) 
     splt.blockSignals(False) 

if (__name__ == '__main__'): 
    app = QApplication([]) 
    widget = MyWidget() 
    widget.show() 
    app.exec_() 

Я много узнал о pyQt и всех его выводах. Медленный ход я могу добавить, поскольку я очень новичок в python.

Что бы я хотел, так это чтобы он обновлял температуру и влажность каждые 5 минут. Я пробовал это.

timer=self.QTimer() 
    timer.start(300) 
    timer.timeout.connect(self.temp.update) 

Это не работает для меня. Я получаю ошибку без атрибута QTimer.

+0

Не могли бы вы изменить в точное сообщение об ошибке (копирование с консоли). – hyde

+0

Интервал в течение 5 минут составит 300000 (нс) –

ответ

1

(Обратите внимание, я не очень знаком с PyQt, так что если это не так, пожалуйста, дайте мне знать, и я буду удалять ответ ...)

Линия

timer=self.QTimer() 

неправильно. this - это подкласс QWidget, который не имеет атрибута QTimer. На самом деле, QTimer является регулярным Qt класс, так что линия должна быть просто:

timer = QTimer() 

Кроме того, необходимо правильно импортировать, конечно, я думаю, это:

from PyQt4.QtCore import QTimer 
+0

Отлично, что, казалось, сработало. Быстрый вопрос . Я хочу, чтобы он обновил temp, не перезапустив скрипт. Возможно ли, что у меня есть эта настройка? –

Смежные вопросы