Как получить полный полноэкранный режим с PyQt4

У меня возникают проблемы с получением QWidget в полноэкранном режиме в PyQt 4.8 . Я выбрал два подхода:

1) Код напрямую (это работает)

import sys
from PyQt4 import QtGui, QtCore
import qimage2ndarray as q2n
import numpy as np
from scipy.misc.common import lena

class FullscreenWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent) 
        self.qg = QtGui.QGraphicsView(self)
        self.scene = QtGui.QGraphicsScene(self)
        self.qg.setScene(self.scene)

        # Make window fullscreen and always on top
        self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)

        # set the image (lena)
        qimg = q2n.array2qimage(np.pad(lena(), ((0,0),(0,0)), mode='constant'))        
        pix = QtGui.QPixmap(qimg)        
        self.scene.clear()
        self.scene.addPixmap(pix)  

        self.show()   

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        self.fullscreen = FullscreenWindow()  

        qdw = QtGui.QDesktopWidget()
        screen = qdw.screenGeometry(screen=1)       
        self.fullscreen.setGeometry(screen)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)    
    winMain = MainWindow(None)
    winMain.show()

    app.exec_()

2) Разработал окна с QtDesigner, имея QWidget с QGraphicsView, установил QGraphicsScene с моим изображением. В основном тот же код, что и выше, но импорт ui-файла с модулем uic. Изображение результата прилагается. Я всегда получаю серую рамку, которая кажется частью QWidget.

Это почему? Как от этого избавиться?

Изображение в полноэкранном режиме с рамкой

1 ответ

Проблема заключается в ошибке с QGraphicsView::fitInView()им все равно: https://bugreports.qt.io/browse/QTBUG-11945

Решение:

self.setViewportMargins(-2, -2, -2, -2)
self.setFrameStyle(QFrame.NoFrame)

self является QGraphicsView в этом случае, поэтому вы можете изменить это.

Насколько мне известно, это стандартная таблица стилей QWidgets, добавляющая эту небольшую границу к себе; в этом случае QGraphicsView,

Так что, если установить таблицу стилей в главном окне через setStyleSheet, вы можете переопределить CSS, чтобы удалить границу--

    styleSheetCss="QGraphicsView {border-width: 0px;}"
    self.setStyleSheet(styleSheetCss)

В вашем примере

class FullscreenWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent) 
        self.qg = QtGui.QGraphicsView(self)
        self.scene = QtGui.QGraphicsScene(self)
        self.qg.setScene(self.scene)

        # Make window fullscreen and always on top
        self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)

        # set the image (lena)
        qimg = q2n.array2qimage(np.pad(lena(), ((0,0),(0,0)), mode='constant'))        
        pix = QtGui.QPixmap(qimg)        
        self.scene.clear()
        self.scene.addPixmap(pix)  

        styleSheetCss="QGraphicsView {border-width: 0px;}"
        self.setStyleSheet(styleSheetCss)

        self.show()   

Если есть другой способ решения этой проблемы, я не знаю, но это сработало для меня.

Примечание: вы можете также связать изменения css вместе

styleSheetCss="""
QPushButton {color:#ffffff;background-color:#202020;padding:4px;border:1px solid #303030;}
QMenu {color:#ffffff;background-color:#505050;border:1px solid #282828;}
QMenu::item {color:#ffffff;background-color:#505050;padding:2px;}
QMenu::item:selected {color:#ffffff;background-color:#6c6c6c;padding:2px;}
QSlider {background-color:#323232;}
QScrollBar:vertical {width:10px;color:#ffffff;background-color:#808080;border:1px solid #202020;}"""
self.setStyleSheet(styleSheetCss)
Другие вопросы по тегам