rxts 发表于 2025-1-16 21:40:45

发帖记录一下困扰了很久的问题

本帖最后由 rxts 于 2025-1-16 21:43 编辑

感谢论坛的帮助,在这里也为论坛做一点小小的贡献。
class MainWindowA(QMainWindow):
    def __init__(self, parent=None):
      super().__init__(parent)
      self.file = open('end_val.json', 'r+', encoding=de)   # 读取 指标窗口个数
      self.data = json.load(self.file)
      self.init_ui()
      '''
       1. 弹出窗口可以跟随主窗口移动,2.在主窗口关闭时也随之关闭,3.不影响与其他窗口的交互,4.在与其他窗口交互时,弹出窗口保持可见性
      以下1行时关键,以下1行要在,self.init_ui() 之后调用,使用self.setWindowFlags(Qt.FramelessWindowHint)设置无窗口
      装饰,如果下面1行是在self.init_ui()之前调用要设置无窗口装饰需要使用:
      self.setWindowFlags(Qt.Tool | Qt.FramelessWindowHint),注意这样就会导致上面的124不灵了。
      '''
      self.MySekect = MySekect(self)    # 弹出的子窗口

FishC 发表于 2025-1-16 21:40:56

在您的发帖中,您描述了一个关于 QMainWindow 和子窗口行为的问题。您希望实现以下功能:


[*]弹出窗口可以跟随主窗口移动。
[*]在主窗口关闭时也随之关闭。
[*]不影响与其他窗口的交互。
[*]在与其他窗口交互时,弹出窗口不关闭。


为实现这个功能,您已经在使用 self.setWindowFlags 来设置窗口属性。但要确保功能要求都能满足,可以尝试以下调整:

from PyQt5.QtWidgets import QMainWindow, QWidget
from PyQt5.QtCore import Qt
import json

class MainWindowA(QMainWindow):
    def __init__(self, parent=None):
      super().__init__(parent)
      self.file = open('end_val.json', 'r+', encoding='utf-8')# 确保编码使用正确的字符串
      self.data = json.load(self.file)
      self.init_ui()

      # 设置子窗口
      self.MySekect = MySekect(self)
      self.MySekect.setWindowFlags(Qt.Tool | Qt.WindowStaysOnTopHint)# 设置子窗口属性

      # 确保子窗口跟随父窗口关闭
      self.destroyed.connect(self.MySekect.close)# 连接信号槽确保子窗口关闭

    def init_ui(self):
      # 您的初始化界面逻辑
      pass

class MySekect(QWidget):# 假设MySekect继承自QWidget
    def __init__(self, parent=None):
      super().__init__(parent)
      # 子窗口初始化内容

请确保在代码中处理编码问题,例如将 encoding=de 改为 ‘utf-8’。另外,使用 self.destroyed.connect(self.MySekect.close) 可以在主窗口销毁时自动关闭子窗口。希望这些建议能帮助您解决问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

rxts 发表于 2025-1-16 21:49:10

FishC 发表于 2025-1-16 21:40
在您的发帖中,您描述了一个关于 QMainWindow 和子窗口行为的问题。您希望实现以下功能:




多谢,这个不是提问的,我是记录一下,对了MySekect(self)括号里填写self,就可以代替self.destroyed.connect(self.MySekect.close)
页: [1]
查看完整版本: 发帖记录一下困扰了很久的问题