代码之家  ›  专栏  ›  技术社区  ›  sheldonzy

pyqt5-带工具栏的qmainwindow上的drawpixmap(无法适应窗口)

  •  0
  • sheldonzy  · 技术社区  · 6 年前

    我有一个工具栏的 qmainwindow ,我在安装窗口的 qpixmap to the window时遇到了问题,这样它就不会用工具栏来解决问题。

    我想显示图片:

    从代码:

    导入系统 从pyqt5.qtcore导入qrect 从pyqt5.qtwidgets导入qaction、qmainwindow、qapplication 从pyqt5.qtgui导入qpixmap,qpainer 类菜单(qmainwindow): 定义初始化(self): super()初始化 newact=qaction(“新建”,self) self.toolbar=self.addtoolbar('remove') self.toolbar.addaction(newact) self.image=qpixmap(“background.png”)。 自设置几何图形(100、30、500、300) self.resize(self.image.width(),self.image.height()) self.show()。 def paintevent(自我,事件): 油漆工=油漆工(本人) rect=qrect(0,0,self.image.width(),self.image.height()) painter.drawpixmap(矩形,自图像) 如果“名称”= app=qapplication(系统argv) mainmenu=菜单() 系统退出(app.exec_u())

    我得到:

    如您所见,图片也在工具栏上,我不想这样。

    再次尝试:

    导入系统 从pyqt5.qtcore导入qrect 从pyqt5.qtwidgets导入qaction、qmainwindow、qapplication 从pyqt5.qtgui导入qpixmap,qpainer 类菜单(qmainwindow): 定义初始化(self): super()初始化 newact=qaction(“新建”,self) self.toolbar=self.addtoolbar('remove') self.toolbar.addaction(newact) self.image=qpixmap(“background.png”)。 自设置几何图形(100、30、500、300) self.resize(self.image.width(),self.image.height()+self.toolbar.height()) self.show()。 def paintevent(自我,事件): 油漆工=油漆工(本人) rect=qrect(0,self.toolbar.height(),self.image.width(),self.image.height()+self.toolbar.height()) painter.drawpixmap(矩形,自图像) 如果“名称”= app=qapplication(系统argv) mainmenu=菜单() 系统退出(app.exec_u())

    但我得到:

    如你所见,我看不到其中一条线(蓝色的)。

    如何修复它,使图片适合窗口,不包括工具栏? 除此之外,这意味着我必须更改所有鼠标单击以移动Y轴。是否有一种方法可以设置所有内容,使(x,y)=(0,0)位于工具栏下方的最左上方?

    我在Windows上使用python 3.6.5 anaconda custom(64位)pyqt version:5.9.2

    我想显示图片:

    enter image description here

    从代码来看:

    import sys
    from PyQt5.QtCore import QRect
    from PyQt5.QtWidgets import QAction, QMainWindow, QApplication
    from PyQt5.QtGui import QPixmap, QPainter
    
    
    class Menu(QMainWindow):
    
        def __init__(self):
            super().__init__()
            newAct = QAction('New', self)
            self.toolbar = self.addToolBar('Remove')
            self.toolbar.addAction(newAct)
            self.image = QPixmap("background.png")
            self.setGeometry(100, 30, 500, 300)
            self.resize(self.image.width(), self.image.height())
            self.show()
    
        def paintEvent(self, event):
            painter = QPainter(self)
            rect = QRect(0, 0, self.image.width(), self.image.height())
            painter.drawPixmap(rect, self.image)
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        mainMenu = Menu()
        sys.exit(app.exec_())
    

    我得到:

    enter image description here

    如你所见,图片也在工具栏上,我不想这样。

    另一个尝试:

    import sys
    from PyQt5.QtCore import QRect
    from PyQt5.QtWidgets import QAction, QMainWindow, QApplication
    from PyQt5.QtGui import QPixmap, QPainter
    
    
    class Menu(QMainWindow):
    
        def __init__(self):
            super().__init__()
            newAct = QAction('New', self)
            self.toolbar = self.addToolBar('Remove')
            self.toolbar.addAction(newAct)
            self.image = QPixmap("background.png")
            self.setGeometry(100, 30, 500, 300)
            self.resize(self.image.width(), self.image.height() + self.toolbar.height())
            self.show()
    
        def paintEvent(self, event):
            painter = QPainter(self)
            rect = QRect(0, self.toolbar.height(), self.image.width(), self.image.height() + self.toolbar.height())
            painter.drawPixmap(rect, self.image)
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        mainMenu = Menu()
        sys.exit(app.exec_())
    

    但我得到:

    enter image description here

    正如你所看到的,我看不到其中一条线(蓝色的)。

    如何修复它,使图片适合窗口,不包括工具栏? 除此之外,这意味着我必须更改所有鼠标单击以移动Y轴。是否有一种方法可以设置所有内容,使(x,y)=(0,0)位于工具栏下方的最左上方?

    我在Windows上使用的是python 3.6.5 anaconda自定义(64位)pyqt版本:5.9.2

    1 回复  |  直到 6 年前
        1
  •  1
  •   eyllanesc RAHUL KUMAR    6 年前

    虽然我不能重现这个问题,但是下面的解决方案必须有效,在这个解决方案中,我在一个小部件中绘制图像,并将它们设置为centralwidget。

    import sys
    from PyQt5.QtCore import QRect
    from PyQt5.QtWidgets import QAction, QMainWindow, QApplication, QWidget
    from PyQt5.QtGui import QPixmap, QPainter
    
    class Widget(QWidget):
        def __init__(self, parent=None):
            super().__init__(parent)
            self.image = QPixmap("background.png")
            self.setFixedSize(self.image.size())
    
        def paintEvent(self, event):
            painter = QPainter(self)
            painter.drawPixmap(self.rect(), self.image)
    
    
    class Menu(QMainWindow):
        def __init__(self):
            super().__init__()
            newAct = QAction('New', self)
            self.toolbar = self.addToolBar('Remove')
            self.toolbar.addAction(newAct)
            self.setCentralWidget(Widget())
            self.setFixedSize(self.sizeHint())
            self.show()
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        mainMenu = Menu()
        sys.exit(app.exec_())