PyQt 无模式对话框不会显示
Posted
技术标签:
【中文标题】PyQt 无模式对话框不会显示【英文标题】:PyQt Modeless Dialog won't show 【发布时间】:2017-11-02 22:11:45 【问题描述】:我想在等待另一个进程接收消息时显示一个弹出对话框。我不希望这会阻止代码,因此使用 .exec_()
似乎不太理想。当我改为调用 show .show()
时,对话框根本不会弹出。有趣的是,它会显示我是否在调用它之前使用调试器,但如果我在它之后立即休眠/等待一段时间,它仍然没有显示任何内容。这是我的 PyQt 代码:
from PyQt5.QtWidgets import QApplication, QDialog, QLabel
class Main(QApplication):
def __init__(self, *args):
super().__init__([])
self.popup = Popup()
def show_popup(self, msg):
self.popup.set_msg(msg)
self.popup.show()
class Popup(QDialog):
def __init__(self):
super().__init__()
self.label = QLabel(self)
def set_msg(self, msg):
self.label.setText(msg)
在我调用它的过程中,我基本上实例化了Main
对象并在发送消息后调用show_popup
,等待更改文本并在收到响应后关闭。使用exec_()
会显示弹出窗口,但它会阻止代码在其他进程中运行。非常感谢任何帮助,谢谢。
【问题讨论】:
【参考方案1】:class Popup(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowFlags(self.windowFlags() | Qt.Tool |Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
self.label = QLabel(self)
def set_msg(self, msg):
self.label.setText(msg)
我在使用 QMessageBox 和 QWidget 时遇到了问题,但它继承自 QMainWindows,它可以按我的需要工作。
【讨论】:
以setWindowFlags
开头的行的目的是什么?显然,您在窗口上设置了一些标志,但为什么要使用 Qt.Tool 和其他标志?我尝试从 QMainWindow 继承,但弹出窗口仍然没有显示...我只能用 exec_() 看到它。
另外你是如何导入 Qt.Tool 和其他的?从 PyQt5 import Qt 我找不到那些模块...
"from PyQt5.QtCore import Qt"
仍然无法正常工作......甚至可以在不调用 exec 的情况下创建 PyQt 窗口吗?几乎我见过的每个示例看起来都像 exec_()
在某处被调用。如果是这种情况,似乎不可能创建一个弹出窗口并让代码运行,除非该代码是从 GUI 进程本身运行的。
也许使用 QMessageBox?它使用 exec() 并且对我来说从来没有失败过。 tutorialspoint.com/pyqt/pyqt_qmessagebox.htm以上是关于PyQt 无模式对话框不会显示的主要内容,如果未能解决你的问题,请参考以下文章