Skip to main content
 首页 » 编程设计

python之使用 QWorkspace 级联

2025年05月04日6lvdongjie

我试图用我自己的级联和平铺定义重载 QWorkspace 类,但是当我尝试使用 .move 函数时,它会相对于子窗口移动内部小部件,而不是相对于工作区移动子窗口.

这是我使用的代码:

class MdiArea(QWorkspace): 
    def tile(self): 
        if len(self.windowList()) < 2: 
            return 
 
    def cascade(self): 
 
        if len(self.windowList()) < 2: 
            return 
 
        windows = [] 
        for window in self.windowList(): 
            windows.append((window.width(), window.height(), window)) 
 
            windows.sort() 
#         
            x = 0 
            y = 0 
            endX = self.width() - min(windows[-1][0], self.width()) 
            endY = self.height() - min(windows[-1][1], self.height()) 
 
        for i in range(len(windows)): 
 
            x = i * 10 
            y = i * 10 
 
            width, height, window = windows[i] 
            window.move(x, y) 
 
            window.raise_()  

这是最终对我有用的代码(特别注意“parent()”的添加): MdiArea 类(QWorkspace): 定义瓷砖(自己): 打印 self.width() 如果 len(self.windowList()) < 2: 返回 我=0 对于 self.windowList() 中的窗口: x = i * window.parent().width() y = 5 窗口.parent().move(x, y) window.parent().raise_(​​)
我=我+1

def cascade(self): 
    if len(self.windowList()) < 2: 
        return 
    i=0 
    for window in self.windowList(): 
        x = i * 15 
        y = i * 30             
        window.parent().move(x, y) 
        window.parent().raise_()             
        i=i+1 

请您参考如下方法:

每个窗口小部件都放在框架小部件中,因此框架小部件是该小部件的父小部件。所以你需要移动和提升 window.parentWidget()

但类 QWorkSpace 已被弃用,您应该改用 QMdiArea(其 subWindowList 方法实际上返回窗口列表而不是内部小部件列表)。