Python 如何在PyQt4中的QWidget中使用QPaint
下面的代码当前打开一个500x500 qmain窗口,该窗口为空 我只是尝试使用QPaint在QWidget中画一个圆 这是我的密码:Python 如何在PyQt4中的QWidget中使用QPaint,python,pyqt,pyqt4,qpainter,Python,Pyqt,Pyqt4,Qpainter,下面的代码当前打开一个500x500 qmain窗口,该窗口为空 我只是尝试使用QPaint在QWidget中画一个圆 这是我的密码: from PyQt4 import QtCore, QtGui, Qt from PyQt4.QtGui import QApplication, QMainWindow import sys class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.
from PyQt4 import QtCore, QtGui, Qt
from PyQt4.QtGui import QApplication, QMainWindow
import sys
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.resize(500, 500)
self.centralwidget = QtGui.QWidget(MainWindow)
self.horizontalLayout = QtGui.QHBoxLayout(self.centralwidget)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 500, 22))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
MainWindow.setStatusBar(self.statusbar)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
class MyMainScreen(QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.ui = Ui_MainWindow() # This is from a python export from QtDesigner
self.ui.setupUi(self)
self.paintCircle()
def paintCircle(self):
self.painter = QtGui.QPainter(self)
self.painter.begin(self)
self.painter.setPen(Qt.QPen(Qt.QColor.black))
# painter.end()
self.painter.drawArc(QtCore.QRectF(250, 250, 10, 10), 0, 5760)
if __name__ == "__main__":
app = QApplication(sys.argv)
mainscreen = MyMainScreen()
mainscreen.show()
app.exec_()
我得到以下错误:
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::setPen: Painter not active
你必须使用你的名字
def paintEvent(self, event):
而不是def paintCircle(self):
在需要时自动运行它
from PyQt4 import QtCore, QtGui, Qt
from PyQt4.QtGui import QApplication, QMainWindow
import sys
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.resize(500, 500)
self.centralwidget = QtGui.QWidget(MainWindow)
self.horizontalLayout = QtGui.QHBoxLayout(self.centralwidget)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 500, 22))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
MainWindow.setStatusBar(self.statusbar)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
class MyMainScreen(QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.ui = Ui_MainWindow() # This is from a python export from QtDesigner
self.ui.setupUi(self)
def paintEvent(self, event):
self.ui.centralwidget.painter = QtGui.QPainter()
self.ui.centralwidget.painter.begin(self)
self.ui.centralwidget.painter.setPen(QtGui.QPen(QtCore.Qt.red))
self.ui.centralwidget.painter.drawArc(QtCore.QRectF(250, 250, 10, 10), 0, 5760)
self.ui.centralwidget.painter.end()
if __name__ == "__main__":
app = QApplication(sys.argv)
mainscreen = MyMainScreen()
mainscreen.show()
app.exec_()
示例在您的情况下,必须覆盖
paintEvent
函数:
from PyQt4 import QtCore, QtGui, Qt
from PyQt4.QtGui import QApplication, QMainWindow
import sys
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.resize(500, 500)
self.centralwidget = QtGui.QWidget(MainWindow)
self.horizontalLayout = QtGui.QHBoxLayout(self.centralwidget)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 500, 22))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
MainWindow.setStatusBar(self.statusbar)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
class MyMainScreen(QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.ui = Ui_MainWindow() # This is from a python export from QtDesigner
self.ui.setupUi(self)
def paintEvent(self, event):
painter = QtGui.QPainter(self)
painter.setPen(QtGui.QPen(QtCore.Qt.red))
painter.drawArc(QtCore.QRectF(250, 250, 10, 10), 0, 5760)
if __name__ == "__main__":
app = QApplication(sys.argv)
mainscreen = MyMainScreen()
mainscreen.show()
app.exec_()
输出:
没有必要像那样保留对
QPainter的引用:只需使用局部变量。@ekhumoro我使用了OP代码并进行了最小的修改。我如何让它在双击时触发?在框中,基本上我想我可以说如果event==QtCore.QEvent.MouseButtonDblClick,然后是drawArc,但每次事件都是QPaintEvent.paint显然我已经在使用需要鼠标的事件过滤器DupleClickEvent你能让drawArc处理matplotlib FigureCanvasQtAgg吗?当画布不存在时,圆圈显示,但当我将以下三行添加到init时,它不再显示:self.ui.centralwidget.fig=图((5,5),dpi=100)#(self.ui.centralwidget)