私はこのコードをコードのどこに置いても大丈夫です。私は毎分このスクリプトを更新して、手動で更新するためのボタンを持っていると思っています。ボタンはすでにそこにありますが、必要に応じて機能しないようです。ウィジェット内の情報を再描画または更新する必要があります。QtButtonとQtimerをPythonで使用する
ボタンのコード:
bottom2 = QtGui.QPushButton("Refresh")
#bottom2.setFrameShape(QtGui.QFrame.StyledPanel)
#bottom2.setWordWrap(True)
bottom2.clicked.connect(InfoCenter)
タイマーコード:
timer = QtCore.QTimer()
QtCore.QTimer.connect(timer, QtCore.SIGNAL("timeout()"), self, QtCore.SLOT("func()"))
timer.start(6000)
全コード:
import sys
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import Qt, QTimer
from PyQt4.QtGui import QWidget, QApplication, QSplitter, QLabel, QVBoxLayout, QColor, QPixmap, QIcon
import Adafruit_DHT
import urllib2
from wunderground import high_0, low_0, conditions_0
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 InfoCenter(QtGui.QWidget):
def __init__(self):
super(InfoCenter, self).__init__()
self.initUI()
def initUI(self):
hbox = QtGui.QHBoxLayout(self)
self.outsidetemp = QLabel("Todays High:{}\nTodays Low:{}\nConditions:{}".format(high_0,low_0,conditions_0),self)
self.outsidetemp.setFrameShape(QtGui.QFrame.StyledPanel)
self.insidetemp = QLabel('Temperature:{:0.1f}F\nHumidity:{:0.1f}%'.format(temperature,humidity),self)
self.insidetemp.setFrameShape(QtGui.QFrame.StyledPanel)
self.mlbnews = QLabel("Redsox News \nTitle: %s\nSummary: %s " % (title.text, desc.text), self)
self.mlbnews.setFrameShape(QtGui.QFrame.StyledPanel)
self.mlbnews.setWordWrap(True)
self.button = QtGui.QPushButton("Refresh")
self.button.clicked.connect(InfoCenter)
splitter1 = QtGui.QSplitter(QtCore.Qt.Horizontal)
splitter1.addWidget(outsidetemp)
splitter1.addWidget(insidetemp)
splitter2 = QtGui.QSplitter(QtCore.Qt.Vertical)
splitter2.addWidget(splitter1)
splitter2.addWidget(mlbnews)
splitter2.addWidget(button)
hbox.addWidget(splitter2)
self.setLayout(hbox)
QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('Cleanlooks'))
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('QtGui.QSplitter')
self.show()
#color widget code
palette = self.palette()
role = self.backgroundRole()
palette.setColor(role, QColor('black'))
self.setPalette(palette)
outsidetemp.setStyleSheet("QLabel {color:yellow}")
insidetemp.setStyleSheet("QLabel {color:yellow}")
mlbnews.setStyleSheet("QLabel {background-color: black; color:white}")
@QtCore.pyqtSlot()
def refreshLabels(self):
self.outsidetemp.setText('Temperature:{:0.1f}F\nHumidity:{:0.1f}%'.format(temperature,humidity),self)
timer = QtCore.QTimer()
self.timer.timeout.connect(self.refreshLabels)
timer.start(5000)
print 'done'
def main():
app = QtGui.QApplication(sys.argv)
ex = InfoCenter()
app.exec_()
if __name__ == '__main__':
main()
更新されたコード
「働いていない」とはどういう意味ですか?何も起こりません?具体的に。 –
'InfoCenter'には' funct() 'スロットがありませんか?タイマーがトリガーするときには何が呼び出されますか?また、スロット上で、 'button.clicked.connect(InfoCenter)'は 'InfoCenter'の別のインスタンスを作成しませんか?これは意図されたものですか? –
また、たくさんの 'QFrames'を作成して、まったく同じ名前の別のウィジェットをすぐに作成しています。これらの「QFrames」はすべてのレイアウトに追加されていません。 –