簡體   English   中英

PyQt5:如何在短時間內顯示另一個窗口/小部件

[英]PyQt5: How to show another window/widget for a short time

嗨,在我的應用程序中,我有主 windows,當數據來自另一個線程時,我需要在另一個屏幕上顯示 2 秒鍾,然后 go 回到上一個屏幕。 Screens 有很多組件,所以我制作了一個簡單的版本來展示我的目的。

數據來自另一個線程成功我可以更改 label 的文本。 但是我不能讓舊的消失而新的出現。

from PyQt5.QtCore import QThread
from PyQt5.QtWidgets import QApplication,QMainWindow, QLabel, QWidget, QGridLayout, QVBoxLayout, QGroupBox
from PyQt5.QtGui import QTextDocument
from PyQt5 import QtCore, Qt
from PyQt5.QtGui import QIcon, QPixmap, QFont
from time import strftime 
import datetime 
from babel.dates import format_date, format_datetime, format_time
import sys
import worker
import time


class Form(QWidget):

    def __init__(self):
        super().__init__()
        self.label_main = QLabel("Welcome")
        self.label_uid = QLabel("Exit") 
        self.left = 0
        self.top = 0
        self._width = 480
        self._height = 800

        self.layout_main = QVBoxLayout()
        self.layout_access = QVBoxLayout()

        self.obj = worker.Worker()  # no parent!
        self.thread = QThread()  # no parent!
        self.obj.return_uid.connect(self.onCardRead)     
        self.obj.moveToThread(self.thread)
        self.obj.finished.connect(self.thread.quit)
        self.thread.started.connect(self.obj.get_uid)
        self.thread.start()

        self.initUI()

    def initUI(self):
        self.setLayout(self.layout_main)
        self.layout_main.addWidget(self.label_main)
        self.setWindowTitle('Main Thread')
        self.show()

    def secondUI(self):
        self.setLayout(self.layout_access)
        self.layout_access.addWidget(self.label_uid)
        self.setWindowTitle('Access Thread')
        self.show()

在 show() 之后添加 self.windowname.close() 或只是 self.close()

試試看:

import sys
from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *


class Worker(QtCore.QObject):
    return_uid = QtCore.pyqtSignal(int)
    finished = QtCore.pyqtSignal()

    def get_uid(self): 
        print("start")
        count = 0
        QtCore.QThread.msleep(1000)
        while count < 10:
            QtCore.QThread.msleep(200)      
            self.return_uid.emit(count)
            count += 1
        self.finished.emit()


class Form(QWidget):
    def __init__(self):
        super().__init__()
        self.label_main = QLabel("Welcome")
        self.label_uid = QLabel("Exit") 

        self.layout_main = QVBoxLayout()
        self.layout_access = QVBoxLayout()

#        self.obj = worker.Worker()  # no parent!
        self.obj = Worker()                           

        self.thread = QThread()     
        self.obj.return_uid.connect(self.onCardRead)     
        self.obj.moveToThread(self.thread)

#        self.obj.finished.connect(self.thread.quit)
        self.obj.finished.connect(self.close)

        self.thread.started.connect(self.obj.get_uid)
        self.thread.start()

        self.initUI()

    def initUI(self):
        self.setLayout(self.layout_main)
        self.layout_main.addWidget(self.label_main)
        self.setWindowTitle('Main Thread')
        self.show()

    def secondUI(self):
        self.setLayout(self.layout_access)
        self.layout_access.addWidget(self.label_uid)
        self.setWindowTitle('Access Thread')
        self.show()

    def onCardRead(self, id):
        self.label_main.setNum(id)            


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Form()
    sys.exit(app.exec_())        

在此處輸入圖像描述


更新

import sys
from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *


class Worker(QtCore.QObject):
    return_uid = QtCore.pyqtSignal(int)
    finished = QtCore.pyqtSignal()

    def get_uid(self): 
        print("start")
        count = 0
        QtCore.QThread.msleep(1000)
        while count < 10:
            QtCore.QThread.msleep(500)      
            self.return_uid.emit(count)
            count += 1
        self.finished.emit()


class Form(QWidget):
    def __init__(self):
        super().__init__()
        self.label_main = QLabel("Welcome")
        self.label_uid = QLabel("Exit") 

        self.layout_main = QVBoxLayout()
#        self.layout_access = QVBoxLayout()

        self.obj = Worker()                           
        self.thread = QThread()     
        self.obj.return_uid.connect(self.onCardRead)     
        self.obj.moveToThread(self.thread)

#        self.obj.finished.connect(self.close)
        self.obj.finished.connect(self.secondUI)                # <---

        self.thread.started.connect(self.obj.get_uid)
        self.thread.start()

        self.initUI()

    def initUI(self):
        self.setLayout(self.layout_main)
        self.layout_main.addWidget(self.label_main)
        self.setWindowTitle('Main Thread')
        self.resize(300, 100)
        self.show()

    def secondUI(self):                                         # <---
        self.hide()
        self.windowSecond = QWidget()
        self.layout_access = QVBoxLayout(self.windowSecond)
        self.layout_access.addWidget(self.label_uid)
        self.windowSecond.setWindowTitle('Main Screen')
        self.windowSecond.resize(300, 200)
        self.windowSecond.show()

    def onCardRead(self, id):
        self.label_main.setNum(id)            


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Form()
    sys.exit(app.exec_()) 

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM