|
发表于 2025-1-17 09:51:18
|
显示全部楼层
要实现公告窗口在与其他窗口交互时保持可见性,同时满足以下要求:
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 小助理,如未能正确解答您的问题,请继续追问。 |
|