Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt5:更新标签?_Python_Pyqt_Pyqt5_Qlabel - Fatal编程技术网

Python PyQt5:更新标签?

Python PyQt5:更新标签?,python,pyqt,pyqt5,qlabel,Python,Pyqt,Pyqt5,Qlabel,我目前无法持续更新标签,我尝试了不同的方法,但要么什么都没有发生,要么程序停止工作。我在下面附上了我的部分代码。我还希望有人能准确地解释def重新传输的目的(self,main window): 我想得到的标签,目前的时间保持更新和调用天气api发生大约每5分钟。任何帮助是非常感谢 下面是一个小的工作示例,应该对您有所帮助QTimer用于定期调用update\u labelTime函数 import sys from PyQt5.QtCore import QTimer, QTime from

我目前无法持续更新标签,我尝试了不同的方法,但要么什么都没有发生,要么程序停止工作。我在下面附上了我的部分代码。我还希望有人能准确地解释def重新传输的目的(self,main window):


我想得到的标签,目前的时间保持更新和调用天气api发生大约每5分钟。任何帮助是非常感谢

下面是一个小的工作示例,应该对您有所帮助
QTimer
用于定期调用
update\u labelTime
函数

import sys
from PyQt5.QtCore import QTimer, QTime
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel

class MyApp(QMainWindow):
    def __init__(self):
        super(MyApp, self).__init__()

        self.labelTime = QLabel()
        self.update_labelTime()
        self.setCentralWidget(self.labelTime)

        self.timer = QTimer()
        self.timer.timeout.connect(self.update_labelTime)
        self.timer.start(1000) # repeat self.update_labelTime every 1 sec

    def update_labelTime(self):

        time_str = "Current time: {0}".format(QTime.currentTime().toString())
        self.labelTime.setText(time_str)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyApp()
    window.show()
    sys.exit(app.exec_())

注意:不要忘记更改
计时器中的更新周期。启动
调用

要实现代码,我们将执行以下操作:

  • 为了更新时间,我们使用计时器
  • 为了获得天气数据,我们使用图书馆
  • 获取天气的任务可能会阻塞GUI的主线程,因此我们将创建一个线程
  • 在该线程中,我们将创建一个信号来存储天气信息,并通过updateTemp插槽将其连接到主线程

  • 线程:

    class PyownThread(QtCore.QThread):
        tempSignal = QtCore.pyqtSignal(dict)
        def __init__(self, parent=None):
            super(PyownThread, self).__init__(parent=parent)
            self.owm = pyowm.OWM('1589dbcc0e9608e5b70f0ede23e757c8')
    
    
        def run(self):
            while True:
                observation = self.owm.weather_at_place('New York,us')
                w = observation.get_weather()
                ctemp = w.get_temperature('celsius')
                self.tempSignal.emit(ctemp)
                self.sleep(5*60)
    
    关于问题:能否准确解释def重新传输的目的(自我,主窗口)

    这有助于将代码翻译成多种语言,例如,同一代码可用于说英语、西班牙语、德语等的受众。出于您的目的,这是不必要的

    完整代码:

    from PyQt5 import QtWidgets, QtGui, QtCore
    import pyowm
    
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("Tom")
            MainWindow.setWindowModality(QtCore.Qt.NonModal)
            MainWindow.resize(800, 600)
            MainWindow.setAutoFillBackground(False)
            self.centralwidget = QtWidgets.QWidget(MainWindow)
            self.centralwidget.setObjectName("centralwidget")
            self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
            self.verticalLayout.setObjectName("verticalLayout")
            self.Date = QtWidgets.QLabel(self.centralwidget)
            font = QtGui.QFont()
            font.setPointSize(18)
            self.Date.setFont(font)
            self.Date.setAlignment(QtCore.Qt.AlignCenter)
            self.Date.setObjectName("Date")
            self.verticalLayout.addWidget(self.Date)
            self.Time = QtWidgets.QLabel(self.centralwidget)
    
            self.verticalLayout.addWidget(self.Time)
            self.Weather = QtWidgets.QLabel(self.centralwidget)
            self.Weather.setAlignment(QtCore.Qt.AlignCenter)
            self.Weather.setWordWrap(False)
            self.Weather.setObjectName("Weather")
            self.verticalLayout.addWidget(self.Weather)
            spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.verticalLayout.addItem(spacerItem)
            spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.verticalLayout.addItem(spacerItem1)
            spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.verticalLayout.addItem(spacerItem2)
            spacerItem3 = QtWidgets.QSpacerItem(771, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.verticalLayout.addItem(spacerItem3)
            spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.verticalLayout.addItem(spacerItem4)
            spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.verticalLayout.addItem(spacerItem5)
            MainWindow.setCentralWidget(self.centralwidget)
    
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
    
        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("Tom", "Tom"))
            self.Date.setText(_translate("Tom", "Today is "))
            self.Time.setText(_translate("Tom", "It is currently "))
            self.Weather.setText(_translate("Tom", "New York City" ))
    
    
    class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
        def __init__(self, parent=None):
            super(MainWindow, self).__init__(parent=parent)
            self.setupUi(self)
            timerTime = QtCore.QTimer(self)
            timerTime.timeout.connect(self.updateDate)
            timerTime.start(1000)
            self.pyowm = PyownThread(self)
            self.pyowm.tempSignal.connect(self.updateTemp)
            self.pyowm.start()
    
        def updateDate(self):
            date = QtCore.QDateTime.currentDateTime()
            self.Date.setText("Today is " + date.toString("ddd MMMM d yyyy"))
            self.Time.setText("It is currently " + date.toString("hh:mm:ss ap"))
    
        def updateTemp(self, temp):
            self.Weather.setText("New York City temperature:" + str(temp['temp']) + " \u00B0C")
    
    
    class PyownThread(QtCore.QThread):
        tempSignal = QtCore.pyqtSignal(dict)
        def __init__(self, parent=None):
            super(PyownThread, self).__init__(parent=parent)
            self.owm = pyowm.OWM('1589dbcc0e9608e5b70f0ede23e757c8') 
    
        def run(self):
            while True:
                observation = self.owm.weather_at_place('New York,us')
                w = observation.get_weather()
                ctemp = w.get_temperature('celsius')
                self.tempSignal.emit(ctemp)
                QtCore.QThread.sleep(5*60)
    
    
    
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        w = MainWindow()
        w.show()
        sys.exit(app.exec_())
    

    您是否尝试过使用QTimer?如果你提供了所有需要导入的工作示例,我会尽力帮助你。非常感谢你,这真的帮助我理解了计时器是如何更新所有内容的!
    class PyownThread(QtCore.QThread):
        tempSignal = QtCore.pyqtSignal(dict)
        def __init__(self, parent=None):
            super(PyownThread, self).__init__(parent=parent)
            self.owm = pyowm.OWM('1589dbcc0e9608e5b70f0ede23e757c8')
    
    
        def run(self):
            while True:
                observation = self.owm.weather_at_place('New York,us')
                w = observation.get_weather()
                ctemp = w.get_temperature('celsius')
                self.tempSignal.emit(ctemp)
                self.sleep(5*60)
    
    from PyQt5 import QtWidgets, QtGui, QtCore
    import pyowm
    
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("Tom")
            MainWindow.setWindowModality(QtCore.Qt.NonModal)
            MainWindow.resize(800, 600)
            MainWindow.setAutoFillBackground(False)
            self.centralwidget = QtWidgets.QWidget(MainWindow)
            self.centralwidget.setObjectName("centralwidget")
            self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
            self.verticalLayout.setObjectName("verticalLayout")
            self.Date = QtWidgets.QLabel(self.centralwidget)
            font = QtGui.QFont()
            font.setPointSize(18)
            self.Date.setFont(font)
            self.Date.setAlignment(QtCore.Qt.AlignCenter)
            self.Date.setObjectName("Date")
            self.verticalLayout.addWidget(self.Date)
            self.Time = QtWidgets.QLabel(self.centralwidget)
    
            self.verticalLayout.addWidget(self.Time)
            self.Weather = QtWidgets.QLabel(self.centralwidget)
            self.Weather.setAlignment(QtCore.Qt.AlignCenter)
            self.Weather.setWordWrap(False)
            self.Weather.setObjectName("Weather")
            self.verticalLayout.addWidget(self.Weather)
            spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.verticalLayout.addItem(spacerItem)
            spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.verticalLayout.addItem(spacerItem1)
            spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.verticalLayout.addItem(spacerItem2)
            spacerItem3 = QtWidgets.QSpacerItem(771, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.verticalLayout.addItem(spacerItem3)
            spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.verticalLayout.addItem(spacerItem4)
            spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
            self.verticalLayout.addItem(spacerItem5)
            MainWindow.setCentralWidget(self.centralwidget)
    
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
    
        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("Tom", "Tom"))
            self.Date.setText(_translate("Tom", "Today is "))
            self.Time.setText(_translate("Tom", "It is currently "))
            self.Weather.setText(_translate("Tom", "New York City" ))
    
    
    class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
        def __init__(self, parent=None):
            super(MainWindow, self).__init__(parent=parent)
            self.setupUi(self)
            timerTime = QtCore.QTimer(self)
            timerTime.timeout.connect(self.updateDate)
            timerTime.start(1000)
            self.pyowm = PyownThread(self)
            self.pyowm.tempSignal.connect(self.updateTemp)
            self.pyowm.start()
    
        def updateDate(self):
            date = QtCore.QDateTime.currentDateTime()
            self.Date.setText("Today is " + date.toString("ddd MMMM d yyyy"))
            self.Time.setText("It is currently " + date.toString("hh:mm:ss ap"))
    
        def updateTemp(self, temp):
            self.Weather.setText("New York City temperature:" + str(temp['temp']) + " \u00B0C")
    
    
    class PyownThread(QtCore.QThread):
        tempSignal = QtCore.pyqtSignal(dict)
        def __init__(self, parent=None):
            super(PyownThread, self).__init__(parent=parent)
            self.owm = pyowm.OWM('1589dbcc0e9608e5b70f0ede23e757c8') 
    
        def run(self):
            while True:
                observation = self.owm.weather_at_place('New York,us')
                w = observation.get_weather()
                ctemp = w.get_temperature('celsius')
                self.tempSignal.emit(ctemp)
                QtCore.QThread.sleep(5*60)
    
    
    
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        w = MainWindow()
        w.show()
        sys.exit(app.exec_())