问题原由:在pyqt5程序开发过程中,经常有各种各样功能的子窗口。通过关联主界面的按钮调起子窗口后,后续在其他界面程序上操作会使子窗口失去焦点被其他程序界面遮盖。此时需要可以点击主界面的按钮重新将子窗口唤起到最前方。
代码演示如下:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QDialog,QGridLayout
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.resize(500, 300) #主窗口大小
self.Glayout = QGridLayout() #布局
# 创建一个按钮,并将其添加到主窗口中
button = QPushButton('打开子窗口', self)
button.clicked.connect(self.open_sub_window)
self.Glayout.addWidget(button,1,1,1,1)
self.sub_window = Sub_Window() # 定义子窗口,子窗口需在主窗口初始化时定义。以保证多次点击按钮依然只有一个子窗口,不然每打点击一次按钮就会创建一个子窗口。
def open_sub_window(self): # 调用子窗口槽函数,打开一个子窗口并显示
self.sub_window.show()
self.sub_window.activateWindow() # 子窗口打开后,从父窗口点击按钮将子窗口再次将子窗口放置于父窗口上方
self.sub_window.exec_()
class Sub_Window(QDialog): #子窗口类定义
def __init__(self,parent=None):
super(Sub_Window,self).__init__(parent)
self.setWindowTitle("子窗口")
self.resize(200, 100) #子窗口大小
if __name__ == '__main__':
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())