导航:首页 > 编程语言 > python绘图两个圆代码

python绘图两个圆代码

发布时间:2024-03-29 06:37:17

‘壹’ python pyqt怎么画圆

这个例子我做了好几天:

1)官网C++的源码,改写成PyQt5版本的代码,好多细节不会转化

2)网上的PyQt的例子根本运行不了

填了无数个坑,结合二者,终于能完成了一个关于绘图的东西。这个过程也掌握了很多新的知识点

【知识点】

1、关于多个点的使用

poitns = [QPoint(10, 80), QPoint(20, 10), QPoint(80, 30), QPoint(90, 70)]

请看:

import sysfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *class StockDialog(QWidget): def __init__(self, parent=None):
super(StockDialog, self).__init__(parent)
self.setWindowTitle("利用QPainter绘制各种图形")

mainSplitter = QSplitter(Qt.Horizontal)
mainSplitter.setOpaqueResize(True)

frame = QFrame(mainSplitter)
mainLayout = QGridLayout(frame) #mainLayout.setMargin(10)
mainLayout.setSpacing(6)

label1=QLabel("形状:")
label2=QLabel("画笔线宽:")
label3=QLabel("画笔颜色:")
label4=QLabel("画笔风格:")
label5=QLabel("画笔顶端:")
label6=QLabel("画笔连接点:")
label7=QLabel("画刷风格:")
label8=QLabel("画刷颜色:")

self.shapeComboBox = QComboBox()
self.shapeComboBox.addItem("Line", "Line")
self.shapeComboBox.addItem("Rectangle", "Rectangle")
self.shapeComboBox.addItem('Rounded Rectangle','Rounded Rectangle')
self.shapeComboBox.addItem('Ellipse','Ellipse')
self.shapeComboBox.addItem('Pie','Pie')
self.shapeComboBox.addItem('Chord','Chord')
self.shapeComboBox.addItem('Path','Path')
self.shapeComboBox.addItem('Polygon','Polygon')
self.shapeComboBox.addItem('Polyline','Polyline')
self.shapeComboBox.addItem('Arc','Arc')
self.shapeComboBox.addItem('Points','Points')
self.shapeComboBox.addItem('Text','Text')
self.shapeComboBox.addItem('Pixmap','Pixmap')

self.widthSpinBox = QSpinBox()
self.widthSpinBox.setRange(0,20)

self.penColorFrame = QFrame()
self.penColorFrame.setAutoFillBackground(True)
self.penColorFrame.setPalette(QPalette(Qt.blue))
self.penColorPushButton = QPushButton("更改")

self.penStyleComboBox = QComboBox()
self.penStyleComboBox.addItem("Solid",Qt.SolidLine)
self.penStyleComboBox.addItem('Dash', Qt.DashLine)
self.penStyleComboBox.addItem('Dot', Qt.DotLine)
self.penStyleComboBox.addItem('Dash Dot', Qt.DashDotLine)
self.penStyleComboBox.addItem('Dash Dot Dot', Qt.DashDotDotLine)
self.penStyleComboBox.addItem('None', Qt.NoPen)

self.penCapComboBox = QComboBox()
self.penCapComboBox.addItem("Flat",Qt.FlatCap)
self.penCapComboBox.addItem('Square', Qt.SquareCap)
self.penCapComboBox.addItem('Round', Qt.RoundCap)

self.penJoinComboBox = QComboBox()
self.penJoinComboBox.addItem("Miter",Qt.MiterJoin)
self.penJoinComboBox.addItem('Bebel', Qt.BevelJoin)
self.penJoinComboBox.addItem('Round', Qt.RoundJoin)

self.brushStyleComboBox = QComboBox()
self.brushStyleComboBox.addItem("Linear Gradient",Qt.LinearGradientPattern)
self.brushStyleComboBox.addItem('Radial Gradient', Qt.RadialGradientPattern)
self.brushStyleComboBox.addItem('Conical Gradient', Qt.ConicalGradientPattern)
self.brushStyleComboBox.addItem('Texture', Qt.TexturePattern)
self.brushStyleComboBox.addItem('Solid', Qt.SolidPattern)
self.brushStyleComboBox.addItem('Horizontal', Qt.HorPattern)
self.brushStyleComboBox.addItem('Vertical', Qt.VerPattern)
self.brushStyleComboBox.addItem('Cross', Qt.CrossPattern)
self.brushStyleComboBox.addItem('Backward Diagonal', Qt.BDiagPattern)
self.brushStyleComboBox.addItem('Forward Diagonal', Qt.FDiagPattern)
self.brushStyleComboBox.addItem('Diagonal Cross', Qt.DiagCrossPattern)
self.brushStyleComboBox.addItem('Dense 1', Qt.Dense1Pattern)
self.brushStyleComboBox.addItem('Dense 2', Qt.Dense2Pattern)
self.brushStyleComboBox.addItem('Dense 3', Qt.Dense3Pattern)
self.brushStyleComboBox.addItem('Dense 4', Qt.Dense4Pattern)
self.brushStyleComboBox.addItem('Dense 5', Qt.Dense5Pattern)
self.brushStyleComboBox.addItem('Dense 6', Qt.Dense6Pattern)
self.brushStyleComboBox.addItem('Dense 7', Qt.Dense7Pattern)
self.brushStyleComboBox.addItem('None', Qt.NoBrush)

self.brushColorFrame = QFrame()
self.brushColorFrame.setAutoFillBackground(True)
self.brushColorFrame.setPalette(QPalette(Qt.green))
self.brushColorPushButton = QPushButton("更改")

labelCol=0
contentCol=1
#建立布局
mainLayout.addWidget(label1,1,labelCol)
mainLayout.addWidget(self.shapeComboBox,1,contentCol)
mainLayout.addWidget(label2,2,labelCol)
mainLayout.addWidget(self.widthSpinBox,2,contentCol)
mainLayout.addWidget(label3,4,labelCol)
mainLayout.addWidget(self.penColorFrame,4,contentCol)
mainLayout.addWidget(self.penColorPushButton,4,3)
mainLayout.addWidget(label4,6,labelCol)
mainLayout.addWidget(self.penStyleComboBox,6,contentCol)
mainLayout.addWidget(label5,8,labelCol)
mainLayout.addWidget(self.penCapComboBox,8,contentCol)
mainLayout.addWidget(label6,10,labelCol)
mainLayout.addWidget(self.penJoinComboBox,10,contentCol)
mainLayout.addWidget(label7,12,labelCol)
mainLayout.addWidget(self.brushStyleComboBox,12,contentCol)
mainLayout.addWidget(label8,14,labelCol)
mainLayout.addWidget(self.brushColorFrame,14,contentCol)
mainLayout.addWidget(self.brushColorPushButton,14,3)
mainSplitter1 = QSplitter(Qt.Horizontal)
mainSplitter1.setOpaqueResize(True)

stack1 = QStackedWidget()
stack1.setFrameStyle(QFrame.Panel|QFrame.Raised)
self.area = PaintArea()
stack1.addWidget(self.area)
frame1 = QFrame(mainSplitter1)
mainLayout1 = QVBoxLayout(frame1) #mainLayout1.setMargin(10)
mainLayout1.setSpacing(6)
mainLayout1.addWidget(stack1)

layout = QGridLayout(self)
layout.addWidget(mainSplitter1,0,0)
layout.addWidget(mainSplitter,0,1)
self.setLayout(layout)
#信号和槽函数 self.shapeComboBox.activated.connect(self.slotShape)
self.widthSpinBox.valueChanged.connect(self.slotPenWidth)
self.penColorPushButton.clicked.connect(self.slotPenColor)
self.penStyleComboBox.activated.connect(self.slotPenStyle)
self.penCapComboBox.activated.connect(self.slotPenCap)
self.penJoinComboBox.activated.connect(self.slotPenJoin)
self.brushStyleComboBox.activated.connect(self.slotBrush)
self.brushColorPushButton.clicked.connect(self.slotBrushColor)

self.slotShape(self.shapeComboBox.currentIndex())
self.slotPenWidth(self.widthSpinBox.value())
self.slotBrush(self.brushStyleComboBox.currentIndex())

def slotShape(self,value):
shape = self.area.Shape[value]
self.area.setShape(shape)
def slotPenWidth(self,value):
color = self.penColorFrame.palette().color(QPalette.Window)
style = Qt.PenStyle(self.penStyleComboBox.itemData(self.penStyleComboBox.currentIndex(),Qt.UserRole))
cap = Qt.PenCapStyle(self.penCapComboBox.itemData(self.penCapComboBox.currentIndex(),Qt.UserRole))
join = Qt.PenJoinStyle(self.penJoinComboBox.itemData(self.penJoinComboBox.currentIndex(),Qt.UserRole))
self.area.setPen(QPen(color,value,style,cap,join))
def slotPenStyle(self,value):
self.slotPenWidth(value)
def slotPenCap(self,value):
self.slotPenWidth(value)
def slotPenJoin(self,value):
self.slotPenWidth(value)
def slotPenColor(self):
color = QColorDialog.getColor(Qt.blue)
self.penColorFrame.setPalette(QPalette(color))
self.area.setPen(QPen(color))
def slotBrushColor(self):
color = QColorDialog.getColor(Qt.blue)
self.brushColorFrame.setPalette(QPalette(color))
self.slotBrush(self.brushStyleComboBox.currentIndex())
def slotBrush(self,value):
color = self.brushColorFrame.palette().color(QPalette.Window)
style = Qt.BrushStyle(self.brushStyleComboBox.itemData(value,Qt.UserRole))
if(style == Qt.Lin

‘贰’ python 用eval(input)画这样四个圆 提示用户输入半径

python有两种编程方式,交互式和文件式。

交互式:对每个输入语句即时运行结果------适合语法练习

文件式:批量执行一组语句并运行结果------编程的主要方式

实例1:圆面积的计算(根据半径r计算圆面积)

字符串的使用

使用[ ]获取字符串中一个或多个字符

1 TempStr = input("请输入带有符号的温度值: ") 2 if TempStr[-1] in ['F', 'f']:#TempStr[-1]指的是最后一个字符 3 C = (eval(TempStr[0:-1]) - 32)/1.8#TempStr[0:-1]指的是字符串从第一个到最后一个之前的所有字符串 4 print("转换后的温度是{:.2f}C".format(C)) 5 elif TempStr[-1] in ['C', 'c']: 6 F = 1.8*eval(TempStr[0:-1]) + 32 7 print("转换后的温度是{:.2f}F".format(F)) 8 else: 9 print("输入格式错误")

数字类型:整数和浮点数

整数:数学中的整数

32或-89

浮点数:数学中的实数,带有小数部分

1.8或者-1.8或者-1.0

列表类型:由0个或多个数据组成的有序序列

列表使用[ ]表示,采用逗号分隔各元素

[ 'F' , 'f' ]表示列表里含义两个元素'F'和'f'

使用保留字in判断一个元素是否在列表中

TempStr[-1] in ['C' , 'c']判断前者是否与列表中的某个元素相同

赋值语句:由赋值符号构成的一行代码

赋值符号笔者之前提过,就是我们俗称的等于号,但等于号在编程语言中通常表示赋值,不表示等于号的含义。

1、赋值语句用来给变量赋予新的数据值

C = (eval(TempStr[0:-1]) - 32)/1.8 #右侧运算结果值赋值给C

2、赋值语句右侧的数据类型同时作用于变量

TempStr = input("请输入带有符号的温度值: ") #input返回一个字符串,所以TempStr也是字符串

分支语句:由判断条件决定程序运行方向的语句

1 if TempStr[-1] in ['F', 'f']:

如果条件为True则执行冒号后的语句

2、每个保留字所在行最后存在一个冒号:,是语法的一部分

冒号及后续缩进用来表示后续语句与条件的所属关系

函数:根据输入参数产生不同输出的功能过程

类似于数学中的函数,y=f(x)

print("输入格式错误") #打印出 输入格式错误

函数采用<函数名>(<参数>)的方式使用

1 eval(TempStr[0:-1])#TempStr[0:-1]是参数

python的输入输出

input():从控制台获得用户输入的函数

input()函数的使用格式:

1 <变量>=input (<提示信息字符串>)

用户输入的信息以字符串类型保存在<变量>中

1 TempStr=input("请输入") #TempStr保存用户输入的信息

输出函数print()

以字符形式向控制台输出结果的函数

print()函数的基本使用格式

1 print(<拟输出字符串或字符串变量>)

字符串类型的一对引号仅在程序内部使用,输出无引用

1 print("输入格式错误")#向控制台输出 输入格式错误

print函数的格式化:

1 print("转换后的温度是{:.2f}C".format(C))

{ }表示槽,后续变量填充到槽中

{:.2f}表示将变量C填充到这个位置时取小数点后2位

如果C的值是123.456789,则输出结果为123.45C

评估函数eval():去掉参数最外侧引号并执行余下语句的函数

eval的基本使用格式

1 eval(<字符串或字符串变量>)

>>>eval("1") 1

‘叁’ python怎么用turtle画圆

turtle.circle ()

Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。

‘肆’ python画同心圆并填充颜色

用海龟画图,代码如下:

import turtle
my_colors=('red','green','yellow','blue','black')
t=turtle.Pen()
for i in range(5):
t.penup()
t.goto(0,-i*10)
t.pendown()
t.color(my_colors[i%len(my_colors)])
t.circle(15+i*10)'''t.goto(0,0)
turtle.done()#程序执行完,窗口仍然在

‘伍’ Matlab或Python怎么作出两个圆的公切线

用sympy + matplot:

from sympy import Point, Circle, Line, var
import matplotlib.pyplot as plt

var('t')

c1 = Circle(Point(0, 0), 2)
c2 = Circle(Point(4, 4), 3)
l1 = Line(c1.center, c2.center)
p1 = l1.arbitrary_point(t).subs({t: -c1.radius / (c2.radius - c1.radius)})
p2 = l1.arbitrary_point(t).subs({t: c1.radius / (c1.radius + c2.radius)})
t1 = c1.tangent_lines(p1)
t2 = c1.tangent_lines(p2)
ta = t1 + t2

fig = plt.gcf()
ax = fig.gca()
ax.set_xlim((-10, 10))
ax.set_ylim((-10, 10))
ax.set_aspect(1)

cp1 = plt.Circle((c1.center.x, c1.center.y), c1.radius, fill = False)
cp2 = plt.Circle((c2.center.x, c2.center.y), c2.radius, fill = False)
tp = [0 for i in range(4)]
for i in range(4):
start = ta[i].arbitrary_point(t).subs({t:-10})
end = ta[i].arbitrary_point(t).subs({t:10})
tp[i] = plt.Line2D([start.x, end.x], [start.y, end.y], lw = 2)

ax.add_artist(cp1)
ax.add_artist(cp2)
for i in range(4):
ax.add_artist(tp[i])

‘陆’ Python如何画个正六边形,再画一个最小的外接圆和一个最大内接圆

Python可以使用turtle库来绘制图形,以下汪答是绘制正六边形、最小外接圆和最大内接圆的代码:

```python
import turtle
import math

# 创建画布
canvas = turtle.Screen()

# 创建画笔
pen = turtle.Turtle()

# 画正六边形
for i in range(6):
pen.forward(100)
pen.right(60)

# 计算正六边形的外接圆半径
r1 = 100 / math.sin(math.radians(30))

# 将画笔移动到圆心
pen.penup()
pen.goto(0, 0)
pen.pendown()

# 画最小外接圆
pen.circle(r1)

# 计算正六边形的内接圆半径
r2 = 100 * math.sqrt(3) / 3

# 画最大内接圆
pen.penup()
pen.goto(0, -r2)
pen.pendown()
pen.circle(r2)

# 隐藏画笔
pen.hideturtle()

# 关闭画布
canvas.exitonclick()
```

代码解析:

首先创建画布和画笔,然后使用循环画正六边形。接着根据正六边形的外接圆半径公式 $R = \frac{a}{\sin{(\frac{\pi}{n})}}$,计算出正六边形的外接圆半径 r1。将画笔移动到圆心,画最小外接圆。再根据正六边形的内切圆困仔慧半径公式 $r = \frac{a\sqrt{3}}{3}$,计算出正六边形的内戚槐接圆半径 r2。最后将画笔移动到内接圆底部,画最大内切圆。最后隐藏画笔并关闭画布。

运行以上代码就可以得到如下图所示的正六边形、最小外接圆和最大内接圆:

![正六边形、最小外接圆和最大内接圆](https://i.imgur.com/u6UWzBC.png)

‘柒’ python turtle画4个同心圆方法

importturtle
#drawfirstcircle
turtle.penup()
turtle.goto(0,-200)
turtle.pendown()
turtle.circle(200)
#drawsecondcircle
turtle.penup()
turtle.goto(0,-150)
turtle.pendown()
turtle.circle(150)
#drawthirdcircle
turtle.penup()
turtle.goto(0,-100)
turtle.pendown()
turtle.circle(100)
#drawfourthcircle
turtle.penup()
turtle.goto(0,-50)
turtle.pendown()
turtle.circle(50)


画笔的坐标默认在0,0,就以它为圆心。

因为turtle画圆的时候是从圆的底部开始画的,所以需要找到四个圆底部的坐标

比如:

第一个半径为200的圆,底部为(0,-200)

第二个半径为150的圆,底部为(0,-150)

第三个半径为100的圆,底部为(0,-100)

第四个半径为 50的圆,底部为(0, -50)


画的时候按下面的步骤:

  1. 抬起画笔:turtle.penup()

  2. 移动到相应坐标:turtle.goto(坐标)

  3. 放下画笔:turtle.pendown()

  4. 画圆:turtle.circle(半径)


效果如下图所示:



阅读全文

与python绘图两个圆代码相关的资料

热点内容
烟台汽车空调压缩机 浏览:388
pythonopencvdct 浏览:26
h3c接口配置命令 浏览:779
安卓手机怎么连接不上苹果耳机 浏览:152
怎么隐藏无线网手机app 浏览:931
美团买电影票到店说系统故障 浏览:101
有床戏的拉拉片 浏览:775
什么同城约会app好 浏览:166
如何下载tis服务器地图 浏览:430
phpxsl扩展 浏览:28
美国电影一个男人带着一个小孩的 浏览:194
日本电影网推荐 浏览:895
啄木鸟丝袜女同 浏览:226
服务器怎么关闭公网访问 浏览:195
嵌入式算法推荐书籍 浏览:677
win7怎样设置网站服务器地址 浏览:103
程序员代码炫酷视频 浏览:80
韩国电影爱情推理片下载 浏览:64
php后台管理系统模板 浏览:334
不太会电脑学习python难吗 浏览:661