我在从API获取临时数据时遇到了一个比较棘手的问题,那就是在Qend中使用不同的Class进行QLabel然后是数据获取功能。从API获取数据的Funkcion使用http和多进程来加速数据收集。 但是当我运行此Qlabel时,它会显示空白文本 你能帮我吗? 我认为多进程将最适合异步数据获取,并且不会冻结我的整个应用程序。
这是我的代码
@pyqtSlot(str)
def temp_pobierz(id):
call1 = multiprocessing.Process(target=temp_pobierz2, args=(id,), name='temp_pobierz2')
call1.start()
@pyqtSlot(str)
def temp_pobierz2(id):
username = "xxx"
password = "xxx"
config = ConfigParser()
config.read('config.ini')
top_level_url = "http://" + config['NETWORK']['IP'] + ":8060/api/xml/device/" + (id) + "/state"
# create an authorization handler
try:
p = urllib.request.HTTPPasswordMgrWithDefaultRealm()
p.add_password(None, top_level_url, username, password)
auth_handler = urllib.request.HTTPBasicAuthHandler(p)
opener = urllib.request.build_opener(auth_handler)
urllib.request.install_opener(opener)
result = opener.open(top_level_url)
messages = result.read()
xml2 = messages.decode('utf-8')
mydoc = minidom.parseString(xml2)
items = mydoc.getElementsByTagName('state')[0]
temp = (items.firstChild.data).strip()
print(temp)
return temp
except IOError as e:
print(e)
return "0.00"
class App(QMainWindow):
def __init__(self):
super().__init__()
self.setGeometry(0, 30, 500, 500)
self.top = 0
self.left = 0
self.width = 1024
self.height = 600
self.setGeometry(self.left, self.top, self.width, self.height)
self.init_ui()
self.show()
def init_ui(self):
self.central_widget = QStackedWidget()
self.setCentralWidget(self.central_widget)
self.strona_temperatury = StronaTemperaturyOkno(self)
self.central_widget.addWidget(self.strona_temperatury)
self.central_widget.setCurrentWidget(self.strona_temperatury)
class StronaTemperatury(object):
clicked = pyqtSignal()
def strona_temperatury(self):
self.button = QPushButton('Wróć',self)
self.button.move(900,550)
self.button.clicked.connect(self.clicked.emit)
self.dwor_lb = QLabel("Na zewnątrz", self)
self.dwor_tp = QLabel("0.00", self)
self.salon_lb = QLabel("Salon", self)
self.salon_tp = QLabel("0.00", self)
self.biuro_lb = QLabel("Biuro", self)
self.biuro_tp = QLabel("0.00", self)
self.jadalnia_lb = QLabel("Jadalnia", self)
self.jadalnia_tp = QLabel("0.00", self)
self.wejscie_lb = QLabel("Wejście główne", self)
self.wejscie_tp = QLabel("0.00", self)
self.kuchnia_lb = QLabel("Kuchnia", self)
self.kuchnia_tp = QLabel("0.00", self)
self.pokoj_tesciowej_lb = QLabel("Pokój teściowej", self)
self.pokoj_tesciowej_tp = QLabel("0.00", self)
self.pokoj_lilki_lb = QLabel("Pokój Lilki", self)
self.pokoj_lilki_tp = QLabel("0.00", self)
self.wc_parter_lb = QLabel("WC Parter", self)
self.wc_parter_tp = QLabel("0.00", self)
self.sypialnia_lb = QLabel("Sypialnia", self)
self.sypialnia_tp = QLabel("0.00", self)
self.wc_pietro_lb = QLabel("WC Piętro", self)
self.wc_pietro_tp = QLabel("0.00", self)
self.przysienek_lb = QLabel("Przysienek", self)
self.przysienek_tp = QLabel("0.00", self)
self.dwor_lb.move(50,20)
self.dwor_tp.move(150,20)
self.salon_lb.move(50,50)
self.salon_tp.move(150,50)
self.biuro_lb.move(50,80)
self.biuro_tp.move(150,80)
self.jadalnia_lb.move(50,110)
self.jadalnia_tp.move(150,110)
self.wejscie_lb.move(50,140)
self.wejscie_tp.move(150,140)
self.kuchnia_lb.move(50,170)
self.kuchnia_tp.move(150,170)
self.pokoj_tesciowej_lb.move(50,200)
self.pokoj_tesciowej_tp.move(150,200)
self.pokoj_lilki_lb.move(50,230)
self.pokoj_lilki_tp.move(150,230)
self.wc_parter_lb.move(50,260)
self.wc_parter_tp.move(150,260)
self.sypialnia_lb.move(50,290)
self.sypialnia_tp.move(150,290)
self.wc_pietro_lb.move(50,320)
self.wc_pietro_tp.move(150,320)
self.przysienek_lb.move(50,350)
self.przysienek_tp.move(150,350)
self.salon_tp.setText(temp_pobierz("47"))
#self.dwor_tp.setText(temp_pobierz("49"))
#self.biuro_tp.setText(temp_pobierz("110"))
#self.jadalnia_tp.setText(temp_pobierz("19"))
#self.wejscie_tp.setText(temp_pobierz("132"))
#self.kuchnia_tp.setText(temp_pobierz("50"))
#self.pokoj_tesciowej_tp.setText(temp_pobierz("113"))
#self.pokoj_lilki_tp.setText(temp_pobierz("111"))
#self.wc_parter_tp.setText(temp_pobierz("21"))
#self.sypialnia_tp.setText(temp_pobierz("114"))
#self.wc_pietro_tp.setText(temp_pobierz("112"))
#self.przysienek_tp.setText(temp_pobierz("20"))
class StronaTemperaturyOkno(QWidget, StronaTemperatury):
def __init__(self, parent=None):
super(StronaTemperaturyOkno, self).__init__(parent)
self.strona_temperatury()
感谢您的帮助