2015-02-12 28 views
5

Der unten stehenden QMainWindow wird mit QSS eine dunkelgraue Hintergrundfarbe zugewiesen. Ich möchte auch die Farbe der Ränder und die Farbe der Titelleiste ändern.Wie ändere ich die Farbe von QMainWindow Rahmen und Titelleiste?

Wie erreichen Sie die Kontrolle über das Aussehen der QMainWindow Grenzen und Titelleiste?

Ich würde gerne wissen, wie man ihre Farben ändert und wie man die Rahmenbreite und die Höhe der Titelleiste steuert.

enter image description here

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

appStyle=""" 
QMainWindow{ 
background-color: darkgray; 
} 
""" 

class GUI(QMainWindow): 
    def __init__(self): 
     super(GUI, self).__init__() 
     self.setStyleSheet(appStyle) 

if __name__ == '__main__': 
    if not QApplication.instance(): app=QApplication([]) 
    w=GUI() 
    w.setStyleSheet(appStyle) 
    w.show() 
    w.raise_() 

    sys.exit(app.exec_()) 

Antwort

5

Meines Wissens kann man nicht (unter Windows vielleicht mit einigen speziellen OS abhängig Anrufe) die Grenzen und Header eines Top-Level-Widget (real-Fenster auf dem Desktop) in Qt ändern, da diese werden vom Betriebssystem geliefert.

Sie können jedoch das Widget frameless setzen und Grenzen für sich selbst hinzufügen.

Beispiel:

from PySide import QtGui, QtCore 

app = QtGui.QApplication([]) 
app.setStyleSheet('QMainWindow{background-color: darkgray;border: 1px solid black;}') 

w = QtGui.QMainWindow() 
w.setWindowFlags(QtCore.Qt.FramelessWindowHint) 
w.show() 

app.exec_() 

Und sieht aus wie

enter image description here

Sie sehen, dass leider die in der Regel Kopfleiste verschwindet, also kein Schleppen, kein Ändern der Größe, keine Schließung oder zu minimieren. Dies alles muss dann selbst implementiert werden. Siehe zum Beispiel How can I handle events in the titlebar and change its color etc ?.