如何从另一个线程向Pyi发送一个Label-PyQt

时间:2017-01-19 04:00:36

标签: python multithreading python-3.x pyqt5 signals-slots

这是一个简单的漫画阅读器,我试图加载图像而不冻结主窗口,我试图用线程做这个,但无法将图像发送到主窗口,我做错了什么?如果有其他方式我想知道谢谢,我也是python的新手。

public ActionResult Index(string ImageType = "", int id = 0)
{
    using (WWLIS dc = new WWLIS())
    {
        eventFile item = dc.eventFiles.OrderByDescending(u => u.fileID).ThenByDescending(u => u.branchID).FirstOrDefault();
        var base64 = Convert.ToBase64String(item.image);
        var imgsrc = string.Format("data:application/pdf;base64,{0}", base64);
        if (ImageType != null)
        {
            ViewBag.ImageSrc = imgsrc;
            return PartialView("PDFVIEW");
        }
        else
        {
            ViewBag.ImageSrc = imgsrc;
            return PartialView("IMAGEVIEW");
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您无法在GUI线程之外创建小部件或像素图。所以只需在工作线程中创建一个QImage,然后在插槽中创建标签和像素图:

class LoaderThread(QtCore.QThread):
    ...
    def run(self):
        liste = os.listdir(self.adres)
        order = 0
        for i in liste:
            image = QtGui.QImage(self.adres + '/' + liste[order])
            self.pics.emit(image)
            order += 1


class MainWin(QtWidgets.QMainWindow):
    ...
    def add_widget(self, image):
        label = QtWidgets.QLabel()
        label.setPixmap(QtGui.QPixmap.fromImage(image))
        self.verticalLayout.addWidget(label)