我无法在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的一部分。
为什么?如何摆脱它?
答案 0 :(得分:0)
据我所知,它是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)
答案 1 :(得分:0)
问题是QGraphicsView::fitInView()
的一个错误,他们并不关心:https://bugreports.qt.io/browse/QTBUG-11945
解决方案:
self.setViewportMargins(-2, -2, -2, -2)
self.setFrameStyle(QFrame.NoFrame)
self
在这种情况下为QGraphicsView
,因此您可能需要更改它。