2017-02-20 74 views
-1

我有这样的代码:QWidget的画家

import sys, random, pprint 
from PyQt5 import QtWidgets, QtGui, QtCore 
from PyQt5 import QtGui 
from PyQt5.QtCore import Qt 

class Window(QtWidgets.QMainWindow): 
    def __init__(self): 
     super().__init__() 

     self.initUI() 

    def initUI(self): 
     self.setGeometry(QtCore.QRect(200, 200, 700, 700)) 

     self.widget = QtWidgets.QWidget(self) 
     self.widget.setGeometry(QtCore.QRect(10, 10, 400, 200)) 
     self.widget.setObjectName("widget") 

    def paintEvent(self, event): 
     painter = QtGui.QPainter() 
     painter.begin(self.widget) 
     self.drawPoints(painter) 
     painter.end() 

    def drawPoints(self, painter): 
     #drawing code 


if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv) 
    ex = Window() 
    ex.show() 
    sys.exit(app.exec_()) 

什么我想到:这将由drawPoints()画区(400x200)。 QWidget继承QPaintDevice。所以这段代码应该工作。但是,控制台说:

了QPainter ::开始:喷漆设备返回的发动机== 0,类型:1点

了QPainter ::结束:画家不活跃,中止

能不能帮我, 请。

+0

初始化画笔使用空油漆设备造成的问题。换句话说,画家没有什么可以借鉴的。什么是'self.widget'? – vahancho

+0

@vahanco self.widget = QtWidgets.QWidget(self) – cheremushkin

回答

0

它看起来像你试图复制this example,对吗?

主要区别似乎在于您为主窗口定义了paintEvent(),而不是您实际尝试绘制的窗口小部件。如果您创建的QWidget自定义子类,定义paintEvent()有它的工作,然后插入该到标准QMainWindow情况下,像这样:

class MyWidget(QtWidgets.QWidget): 
    def __init__(self, parent=None): 
     super(MyWidget, self).__init__(parent=parent) 

     self.initUI() 

    def initUI(self): 
     self.setGeometry(QtCore.QRect(10, 10, 400, 200)) 
     self.setObjectName("widget") 

    def paintEvent(self, event): 
     painter = QtGui.QPainter() 
     painter.begin(self) 
     self.drawPoints(painter) 
     painter.end() 

    def drawPoints(self, painter): 
     pass 


if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv) 
    my_window = QtWidgets.QMainWindow() 
    my_window.setGeometry(QtCore.QRect(200, 200, 700, 700)) 
    my_window.setCentralWidget(MyWidget(my_window)) 
    my_window.show() 
    sys.exit(app.exec_()) 

最起码,它没有打印该错误信息了。