首页 > 解决方案 > Python,在类外使用多进程函数来获取 Qlabel 的文本

问题描述

我在从 API 获取临时数据时遇到了一个奇怪的问题,那就是 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()

感谢您的帮助

标签: pythonmultiprocessingpyqt5

解决方案


推荐阅读