要实现公告窗口在与其他窗口交互时保持可见性,同时满足以下要求:
1. 弹出窗口可以跟随主窗口移动。
2. 在主窗口关闭时也随之关闭。
3. 不影响与其他窗口的交互。
可以将子窗口设置为 Qt.Tool 窗口类型。这样子窗口不会抢占主窗口的焦点,同时满足其他要求。您可以尝试以下修改:
from PySide6.QtWidgets import QApplication, QMainWindow, QMdiArea, QToolWindow, QWidget, QVBoxLayout, QLabel
class AnnouncementWindow(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowFlags(self.windowFlags() | Qt.Tool) # 设置为Tool窗口
self.setWindowTitle("公告窗口")
layout = QVBoxLayout()
layout.addWidget(QLabel("公告内容"))
self.setLayout(layout)
class MainWindowA(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.mdi_area = QMdiArea(self)
self.setCentralWidget(self.mdi_area)
self.init_ui()
def init_ui(self):
self.setWindowTitle("主窗口 B")
screen = QApplication.primaryScreen().geometry()
self.screenWidth = screen.width()
self.screenHeight = screen.height()
self.setGeometry(0, 0, self.screenWidth, self.screenHeight)
self.createAnnouncementWindow()
def resizeEvent(self, event):
super().resizeEvent(event)
new_size = event.size()
self.width = new_size.width()
self.height = new_size.height()
self.subWindow.resize(int(self.width * 0.75), int(self.height * 0.169))
self.subWindow.move(0, int(self.height * 0.8))
if self.subWindow and self.subWindow.isVisible():
self.subWindow.resize(int(self.width * 0.75), int(self.height * 0.169))
self.subWindow.move(0, int(self.height * 0.8))
def main_width_height(self):
if self.width:
return self.width, self.height
def createAnnouncementWindow(self):
self.announcementWindow = AnnouncementWindow(self)
self.subWindow = self.mdi_area.addSubWindow(self.announcementWindow)
self.subWindow.setWindowFlags(Qt.Tool) # 与主窗口一起移动、关闭
self.subWindow.show()
self.subWindow.destroyed.connect(self.subWindowDestroyed)
def subWindowDestroyed(self):
self.subWindow = None
def toggleSubWindow(self):
if self.subWindow is None:
self.createAnnouncementWindow()
self.subWindow.resize(int(self.width * 0.75), int(self.height * 0.169))
self.subWindow.move(0, int(self.height * 0.8))
elif self.subWindow.isVisible():
self.subWindow.hide()
else:
self.subWindow.show()
把公告窗口设置为 Qt.Tool 类型可以保证它不会成为主窗口焦点的一部分,这样即使用户切换到其他应用程序后再返回,公告窗口也能保持在前台。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |