【问题标题】:How to get complete fullscreen with PyQt4如何使用 PyQt4 获得完整的全屏
【发布时间】:2016-12-06 10:16:33
【问题描述】:

我无法在 PyQt 4.8 中让 QWidget 真正全屏显示。我采取了两种方法:

  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 设计了窗口,有一个带有 QGraphicsView 的 QWidget,用我的 Image 设置了一个 QGraphicsScene。基本上与上面的代码相同,但使用 uic 模块导入 ui 文件。附加结果的图像。我总是得到一个灰色边框,它似乎是 QWidget 的一部分。

这是为什么呢?如何摆脱它?

【问题讨论】:

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

标签: python pyqt fullscreen qgraphicsview


【解决方案1】:

据我所知,它是 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)

【讨论】:

    【解决方案2】:

    问题是QGraphicsView::fitInView() 的错误,他们并不关心:https://bugreports.qt.io/browse/QTBUG-11945

    解决方案:

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-26
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      相关资源
      最近更新 更多