使用QWorkspace级联

时间:2012-04-11 16:00:48

标签: python pyqt4 cascade

我正在尝试使用自己的级联和磁贴定义来重载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()'添加): class MdiArea(QWorkspace):     def tile(个体经营):         print self.width()         if len(self.windowList())&lt; 2:             返回         I = 0         对于self.windowList()中的窗口:             x = i * window.parent()。width()             y = 5             window.parent()。move(x,y)             window.parent()。raise_()
            I = I + 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

1 个答案:

答案 0 :(得分:1)

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

但是不推荐使用类QWorkSpace,而是应该使用QMdiArea(其subWindowList方法实际返回窗口列表而不是内部窗口小部件列表。)