这是我的第一个问题。我调查了一些类似的问题,但是它对我自己的代码没有真正的帮助(或者我不确定是否可以对我的代码应用可能的解决方案)。
我有这段代码在运行时在窗口中显示时间,但它不会更新,如果我想查看当前时间,我必须再次运行它。我想在某处包括while循环,但我无法。通常,当我使用漂亮的汤或 selenium 从网站上获取数据时,我能够将它们放入while循环中并使其正常运行而没有任何问题,但是我无法使其在pyqt5窗口中发生。我该怎么办?
import sys
import time
from PyQt5 import QtWidgets,QtCore
import requests
from bs4 import BeautifulSoup
class Window(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.textfield = QtWidgets.QLabel("")
sonuc = self.gettime()
v_box = QtWidgets.QVBoxLayout()
v_box.addWidget(self.textfield)
v_box.addStretch()
h_box = QtWidgets.QHBoxLayout()
h_box.addStretch()
h_box.addLayout(v_box)
h_box.addStretch()
self.setLayout(h_box)
self.setWindowTitle("Time")
self.show()
def gettime(self):
url = "https://onlinesaat.web.tr/saat-kac/"
a = requests.get(url)
b = a.content
soup = BeautifulSoup(b,"html.parser")
for i in soup.find_all("span",{"id":"lbl-time"}):
self.textfield.setText(i.text)
app = QtWidgets.QApplication(sys.argv)
window = Window()
sys.exit(app.exec_())
使用QTimer
例如,这每隔1000毫秒(1s)调用一次gettime函数
...
def init_ui(self):
self.textfield = QtWidgets.QLabel("")
timer = QtCore.QTimer(self)
timer.timeout.connect(self.gettime)
timer.start(1000)
非常感谢,它奏效了!但是窗户每秒钟都会变得不稳,我们能做些什么呢?没什么大不了的。
因为您从API中获取时间,所以花费一些时间才能得到结果。改用python内置函数检索当前时间。programiz.com/python-programming/datetime/当前时间