Bu kodu neredeyse kod açısından istediğim yere sahibim. Bu betiğin her dakika yenilenmesini ve manuel olarak yenilenmesi için bir butonum olmasını istiyorum. Düğme zaten var ama istediği gibi çalışmıyor. Widget içerisindeki bilgileri yeniden çizmeyi veya yenilemeyi istiyorum.Python'da QtButton ve Qtimer
Düğme Kodu:
bottom2 = QtGui.QPushButton("Refresh")
#bottom2.setFrameShape(QtGui.QFrame.StyledPanel)
#bottom2.setWordWrap(True)
bottom2.clicked.connect(InfoCenter)
Zamanlayıcı Kodu:
timer = QtCore.QTimer()
QtCore.QTimer.connect(timer, QtCore.SIGNAL("timeout()"), self, QtCore.SLOT("func()"))
timer.start(6000)
Tam Kod:
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()
GÜNCELLEME KOD
"Çalışmıyor" ile ne demek istiyorsun? Hiçbir şey olmuyor? Daha spesifik ol. –
'funct()' yuvası, InfoCenter'dan eksik değil mi? Zamanlayıcı tetiklendiğinde ne çağrılacak? Ayrıca, yuvalarda 'button.clicked.connect (InfoCenter)' 'InfoCenter'ın başka bir örneğini oluşturamaz mı? Bu amaçlanmış mıydı? –
Ayrıca, bir grup QFrames oluşturuyorsunuz ve hemen aynı ada sahip başka bir widget yaratıyorsunuz. Tüm bu QFrame'ler, herhangi bir düzende eklenmiyor. –