2012-04-11 6 views
2

Ich versuche, die QWorkspace-Klasse mit meinen eigenen Kaskaden- und Kacheldefinitionen zu überlasten, aber wenn ich versuche, die .move-Funktion zu verwenden, verschiebt sie das innere Widget relativ zum Unterfenster, anstatt das Unterfenster relativ zu verschieben zum Arbeitsbereich. HierQWorkspace-Kaskade verwenden

ist der Code Ich verwende:

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_() 

Hier ist der Code, der schließlich für mich gearbeitet (man beachte die 'parent()' zusätzlich insbesondere): Klasse MdiArea (QWorkspace): def Fliese (self): Druck self.width() wenn len (self.windowList()) < 2: return i = 0 für Fenster in self.windowList(): x = i * window.parent() .width() y = 5 Wind ow.parent(). bewegen (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 

Antwort

1

Jeder Fenster-Widget wird in einem Frame-Widget setzen, die folglich ist die übergeordnetes Widget dieses Widgets. Sie müssen also window.parentWidget()

Aber die Klasse bewegen und heben QWorkSpace ist veraltet und Sie sollten QMdiArea stattdessen werden (deren subWindowList Methode gibt tatsächlich die Fensterliste und nicht die interne Widget-Liste).

+0

Das habe ich vermisst. Ich aktualisiere das Programm, daher wird es zu zeitaufwendig sein, den gesamten QWorkspace-Code zu entfernen und QMdiArea einzubauen. – Stephen

Verwandte Themen