【问题标题】:PyQt: Scrollbars are not shown with QGraphicsView class being nested under QMainWindowPyQt:滚动条不显示,QGraphicsView 类嵌套在 QMainWindow 下
【发布时间】:2018-09-14 19:38:03
【问题描述】:

我应该在屏幕上添加滚动条。下面显示的类设计是我应该修改和添加滚动条的软件的一部分。 Window类的滚动条代码是我自己加的。

运行程序时没有显示。我应该纠正什么?

import sys

from PyQt4 import QtGui
from PyQt4 import QtCore

class Window(QtGui.QGraphicsView):

  def __init__(self, parent=None):

        QtGui.QGraphicsView.__init__(self, parent)
        self.scene = QtGui.QGraphicsScene(self)
        self.scene.setBackgroundBrush(QtGui.QBrush(QtCore.Qt.darkGray, QtCore.Qt.SolidPattern))
        self.setScene(self.scene)

        self.setDragMode(QtGui.QGraphicsView.ScrollHandDrag)
        self.setTransformationAnchor(QtGui.QGraphicsView.AnchorUnderMouse)
        self.viewport().setCursor(QtCore.Qt.CrossCursor)
        self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)


class CityscapesLabelTool(QtGui.QMainWindow):
    def __init__(self, parent=None):

        QtGui.QMainWindow.__init__(self, parent)

        Window()

app = QtGui.QApplication(sys.argv)
GUI = CityscapesLabelTool()
GUI.show()
sys.exit(app.exec_())

【问题讨论】:

    标签: python pyqt pyqt5 qgraphicsview qmainwindow


    【解决方案1】:

    当程序离开其范围时,会删除局部变量,在您的情况下,Window() 是一个局部变量,当它完成执行构造函数时会被消除。为了不破坏该变量,它必须与另一个具有更大范围的变量相关。在这种情况下,将Window() 设置为QMainWindow 的centralWidget 是合适的。

    import sys
    
    from PyQt4 import QtGui
    from PyQt4 import QtCore
    
    class Window(QtGui.QGraphicsView):
      def __init__(self, parent=None):
            QtGui.QGraphicsView.__init__(self, parent)
            self.scene = QtGui.QGraphicsScene(self)
            self.scene.setBackgroundBrush(QtGui.QBrush(QtCore.Qt.darkGray, QtCore.Qt.SolidPattern))
            self.setScene(self.scene)
    
            self.setDragMode(QtGui.QGraphicsView.ScrollHandDrag)
            self.setTransformationAnchor(QtGui.QGraphicsView.AnchorUnderMouse)
            self.viewport().setCursor(QtCore.Qt.CrossCursor)
            self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
            self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
    
    
    class CityscapesLabelTool(QtGui.QMainWindow):
        def __init__(self, parent=None):
            QtGui.QMainWindow.__init__(self, parent)
            centralwidget = Window()
            self.setCentralWidget(centralwidget)
    
    app = QtGui.QApplication(sys.argv)
    GUI = CityscapesLabelTool()
    GUI.show()
    sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 2011-04-09
      • 2019-07-08
      • 2018-02-25
      • 1970-01-01
      • 2018-09-19
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多