Python 如何使用PyQt4获得完整的全屏显示

Python 如何使用PyQt4获得完整的全屏显示,python,pyqt,fullscreen,qgraphicsview,Python,Pyqt,Fullscreen,Qgraphicsview,在PyQt4.8中,我很难让QWidget真正全屏显示。我采取了两种方法: 直接编码(这是有效的) 使用QtDesigner设计窗口,使用带有QGraphicsView的QWidget,使用我的图像设置qgraphicscene。基本上与上面的代码相同,但使用uic模块导入ui文件。将附加结果的图像。我总是得到一个灰色的边框,似乎是QWidget的一部分 为什么呢?如何摆脱它 据我所知,它是QWidgets的默认样式表,为自己添加了细微的边框;在这种情况下,QGraphicsView 因此,如

在PyQt4.8中,我很难让QWidget真正全屏显示。我采取了两种方法:

  • 直接编码(这是有效的)

  • 使用QtDesigner设计窗口,使用带有QGraphicsView的QWidget,使用我的图像设置qgraphicscene。基本上与上面的代码相同,但使用uic模块导入ui文件。将附加结果的图像。我总是得到一个灰色的边框,似乎是QWidget的一部分

  • 为什么呢?如何摆脱它


    据我所知,它是QWidgets的默认样式表,为自己添加了细微的边框;在这种情况下,
    QGraphicsView

    因此,如果通过
    setStyleSheet
    在主窗口上设置样式表,则可以覆盖css以删除边框--

    在你的例子中-

    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)
    

    据我所知,它是QWidgets的默认样式表,为自己添加了细微的边框;在这种情况下,
    QGraphicsView

    因此,如果通过
    setStyleSheet
    在主窗口上设置样式表,则可以覆盖css以删除边框--

    在你的例子中-

    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)
    

    问题在于
    QGraphicsView::fitInView()
    的一个bug,他们不关心:

    解决方案:

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

    在这种情况下,
    self
    QGraphicsView
    ,因此您可能需要更改此设置。

    问题是
    QGraphicsView::fitInView()的一个错误。
    他们不关心:

    解决方案:

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

    在这种情况下,
    self
    QGraphicsView
    ,因此您可能需要更改此设置。

    为什么要包含您说有效的代码,而不是无效的代码?另外,您显示的屏幕截图看起来不像是全屏窗口,或者至少,它看起来不像您的代码示例应该生成的窗口。为什么您要包含您所说的有效的代码,而不是无效的代码?此外,您显示的屏幕截图看起来不像全屏窗口——或者至少,它看起来不像您的代码示例应该生成的屏幕截图。