【问题标题】:how to make a dialog or a popup window can stay behind the mainwindow and don't cover the mainwindow如何使对话框或弹出窗口可以留在主窗口后面并且不覆盖主窗口
【发布时间】:2019-07-25 06:42:32
【问题描述】:

我是pyqt5的新手,我想弹出一个窗口,让窗口可以留在主窗口后面,不能点击(类似于让新窗口作为另一个进程窗口)

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

class Demo(QMainWindow):
    def __init__(self):
        super().__init__()
        test_button = QPushButton('test')
        test_button.clicked.connect(self.onClick)
        self.setCentralWidget(test_button)

    def onClick(self):
        # dlg = QDialog(self)
        dlg = QMainWindow(self)
        dlg.setWindowFlag(Qt.WindowStaysOnTopHint, False)
        dlg.show()

app = QApplication([])
demo = Demo()
demo.show()
app.exec()

新窗口总是留在主窗口上,我需要把窗口留在它后面。

【问题讨论】:

    标签: python pyqt pyqt5 qmainwindow qdialog


    【解决方案1】:

    void QWidget::move(int x, int y)

    import sys
    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    
    
    class Demo(QMainWindow):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('Main Window')
            test_button = QPushButton('test')
            test_button.clicked.connect(self.onClick)
            self.setCentralWidget(test_button)
    
        def onClick(self):
            # dlg = QDialog(self)
            dlg = QMainWindow(self)
            dlg.setWindowTitle('Dialog Window')
    
            dlg.move(self.geometry().x() + self.geometry().width() + 30,         # <---
                     self.geometry().y() - 30)
    
            dlg.setWindowFlag(Qt.WindowStaysOnTopHint, False)
            dlg.show()
    
        def sizeHint123(self):
            return QSize(200, 200)
    
    app = QApplication([])
    demo = Demo()
    demo.show()
    app.exec()
    


    更新

    import sys
    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    
    
    class Demo(QMainWindow):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('Main Window')
    
            self.setWindowFlags(Qt.WindowStaysOnTopHint)                            # +++
    
            test_button = QPushButton('test')
            test_button.clicked.connect(self.onClick)
            self.setCentralWidget(test_button)
    
        def onClick(self):
            # dlg = QDialog(self)
            self.dlg = QMainWindow()                                                 # --- self
            self.dlg.setWindowTitle('Dialog Window')
    
            self.dlg.move(self.geometry().x() + self.geometry().width() + 30,         
                     self.geometry().y() - 30)
    
    #        dlg.setWindowFlag(Qt.WindowStaysOnTopHint, False)
            self.dlg.show()
    
        def sizeHint123(self):
            return QSize(200, 200)
    
    app = QApplication([])
    demo = Demo()
    demo.show()
    app.exec()
    

    【讨论】:

    • 这不是我想要的效果,我需要新窗口不能与主窗口重叠。
    • @jiechen 我加了一个例子
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    相关资源
    最近更新 更多