Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在PyQt5中创建循环和自动关闭的messagebox?_Python_User Interface_Pyqt5 - Fatal编程技术网

Python 如何在PyQt5中创建循环和自动关闭的messagebox?

Python 如何在PyQt5中创建循环和自动关闭的messagebox?,python,user-interface,pyqt5,Python,User Interface,Pyqt5,如何在PyQt5中创建循环和自动关闭的messagebox? 这是一种消息框,可以在3秒后自动关闭 我想通过在循环中使用它来显示消息 我怎么做 PS:代码不是我写的 import sys from PyQt5 import QtCore, QtGui, QtWidgets, Qt import time class Ui_Message(object): def setupUi(self, Form): Form.setObjectName("Form&qu

如何在PyQt5中创建循环和自动关闭的messagebox?

这是一种消息框,可以在3秒后自动关闭

我想通过在循环中使用它来显示消息

我怎么做

PS:代码不是我写的

import sys

from PyQt5 import QtCore, QtGui, QtWidgets, Qt
import time

class Ui_Message(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(538, 91)
        self.frame = QtWidgets.QFrame(Form)
        self.frame.setGeometry(QtCore.QRect(0, 0, 541, 111))
        # self.frame.setStyleSheet("background-image: url(:/img/messageback.png);")
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.label = QtWidgets.QLabel(self.frame)
        self.label.setGeometry(QtCore.QRect(0, 0, 531, 91))
        font = QtGui.QFont()
        font.setPointSize(31)
        font.setBold(False)
        font.setWeight(50)
        self.label.setFont(font)
        self.label.setStyleSheet("background-color: transparent;\n"
                                 "fontsize: 30px;")
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label.setText(_translate("Form", "显示信息"))

# import img_rc


# Define a removable borderless 3S prompt message interface
class MessageWindow(Qt.QMainWindow):
    def __init__(self, parent=None):
        Qt.QWidget.__init__(self, parent)
        self.ui = Ui_Message()
        self.ui.setupUi(self)
        self.setWindowFlags(Qt.Qt.FramelessWindowHint)
        QtCore.QTimer().singleShot(3000, self.close)
        self.show()

    def mousePressEvent(self, event):
        # Define mouse click events
        if event.button() == QtCore.Qt.LeftButton:
            self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()
            event.accept()

    def mouseMoveEvent(self, event):
        # Define mouse movement events
        if event.buttons() == QtCore.Qt.LeftButton:
            self.move(event.globalPos() - self.dragPosition)
            event.accept()

    def setMessage(self, message):
        self.ui.label.setText(message)

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    login = MessageWindow()
    #----how can i maike a loop messagebox?------
    for i in range(0,5):
        login.setMessage("Number"+str(i))
        time.sleep(3)
    sys.exit(app.exec())

我知道也许我不能使用时间。在PyQt5中使用sleep,但是我搜索了任何东西却没有得到答案。

在Qt中,如果你想做周期性的任务,那么你必须使用QTimer,忘记同步逻辑,因为你必须处理事件

在这种情况下,一个可能的解决方案是使用一个存储信息的队列,并在计时器的每个快照中获得一个元素

from collections import deque
如果名称=“\uuuuu main\uuuuuuuu”:
app=qtwidts.QApplication(sys.argv)
login=MessageWindow()
值=范围(0,5)
q=deque(数值)
def on_timeout():
打印(q)
如果q:
i=q.popleft()
Qt.QTimer.singleShot(3000,on_超时)
login.setMessage(“编号”+str(i))
关于_timeout()
sys.exit(app.exec())
注:

  • 您的类不能从QMainWindow继承,而是从QWidget继承
  • 您必须取消关闭窗口的计时器,否则您将看不到文本更改,因为时间很短

嗨,关于在循环中使用消息显示消息的含义:自动关闭后是否需要相同的窗口再次弹出?我的程序是实时监控任务。也许我应该使用messagebox立即打印。因此,使用deque看起来不太好。@william4s如果不提供真实问题的MRE,则不可能帮助你